diff --git a/astrbot/core/pipeline/respond/stage.py b/astrbot/core/pipeline/respond/stage.py index a43f0b32d..202a3b8aa 100644 --- a/astrbot/core/pipeline/respond/stage.py +++ b/astrbot/core/pipeline/respond/stage.py @@ -72,6 +72,20 @@ class RespondStage(Stage): # random return random.uniform(self.interval[0], self.interval[1]) + async def _is_empty_message_chain(self, chain): + """检查消息链是否为空 + + Args: + chain (MessageChain): 消息链 + """ + for comp in chain: + if isinstance(comp, Plain): + if comp.text.strip(): + return False + else: + return True + return True + async def process( self, event: AstrMessageEvent ) -> Union[None, AsyncGenerator[None, None]]: @@ -82,6 +96,13 @@ class RespondStage(Stage): if len(result.chain) > 0: await event._pre_send() + # 检查消息链是否为空 + if await self._is_empty_message_chain(result.chain): + logger.info("消息为空,跳过发送阶段") + event.clear_result() + event.stop_event() + return + if self.enable_seg and ( (self.only_llm_result and result.is_llm_result()) or not self.only_llm_result diff --git a/astrbot/core/provider/sources/gemini_source.py b/astrbot/core/provider/sources/gemini_source.py index 3233b3453..cc34784c5 100644 --- a/astrbot/core/provider/sources/gemini_source.py +++ b/astrbot/core/provider/sources/gemini_source.py @@ -127,7 +127,7 @@ class ProviderGoogleGenAI(Provider): if message["role"] == "user": if isinstance(message["content"], str): if not message["content"]: - message["content"] = "" + message["content"] = "" google_genai_conversation.append( {"role": "user", "parts": [{"text": message["content"]}]} @@ -138,7 +138,7 @@ class ProviderGoogleGenAI(Provider): for part in message["content"]: if part["type"] == "text": if not part["text"]: - part["text"] = "" + part["text"] = "" parts.append({"text": part["text"]}) elif part["type"] == "image_url": parts.append( @@ -156,7 +156,7 @@ class ProviderGoogleGenAI(Provider): elif message["role"] == "assistant": if "content" in message: if not message["content"]: - message["content"] = "" + message["content"] = "" google_genai_conversation.append( {"role": "model", "parts": [{"text": message["content"]}]} )