diff --git a/astrbot/core/pipeline/process_stage/agent_runner/tool_loop_agent.py b/astrbot/core/pipeline/process_stage/agent_runner/tool_loop_agent.py index 3f97c189c..c2961ded5 100644 --- a/astrbot/core/pipeline/process_stage/agent_runner/tool_loop_agent.py +++ b/astrbot/core/pipeline/process_stage/agent_runner/tool_loop_agent.py @@ -218,7 +218,9 @@ class ToolLoopAgent(BaseAgentRunner): content="返回了图片(已直接发送给用户)", ) ) - yield MessageChain().base64_image(res.content[0].data) + yield MessageChain(type="tool_direct_result").base64_image( + res.content[0].data + ) elif isinstance(res.content[0], EmbeddedResource): resource = res.content[0].resource if isinstance(resource, TextResourceContents): @@ -242,7 +244,9 @@ class ToolLoopAgent(BaseAgentRunner): content="返回了图片(已直接发送给用户)", ) ) - yield MessageChain().base64_image(res.content[0].data) + yield MessageChain(type="tool_direct_result").base64_image( + res.content[0].data + ) else: tool_call_result_blocks.append( ToolCallMessageSegment( @@ -275,7 +279,9 @@ class ToolLoopAgent(BaseAgentRunner): self._transition_state(AgentState.DONE) if res := self.event.get_result(): if res.chain: - yield MessageChain(chain=res.chain) + yield MessageChain( + chain=res.chain, type="tool_direct_result" + ) self.event.clear_result() except Exception as e: diff --git a/astrbot/core/pipeline/process_stage/method/llm_request.py b/astrbot/core/pipeline/process_stage/method/llm_request.py index 000369326..b1d9310c6 100644 --- a/astrbot/core/pipeline/process_stage/method/llm_request.py +++ b/astrbot/core/pipeline/process_stage/method/llm_request.py @@ -177,10 +177,13 @@ class LLMRequestSubStage(Stage): if event.is_stopped(): return if resp.type == "tool_call_result": - # 处理工具调用结果,直接发送给用户 - resp.data["chain"].type = "tool_call_result" - await event.send(resp.data["chain"]) - continue + msg_chain = resp.data["chain"] + if msg_chain.type == "tool_direct_result": + # tool_direct_result 用于标记 llm tool 需要直接发送给用户的内容 + resp.data["chain"].type = "tool_call_result" + await event.send(resp.data["chain"]) + continue + # 对于其他情况,暂时先不处理 if resp.type == "tool_call": if self.streaming_response: # 用来标记流式响应需要分节 @@ -261,7 +264,9 @@ class LLMRequestSubStage(Stage): await self._save_to_history(event, req, tool_loop_agent.get_final_llm_resp()) - async def _handle_webchat(self, event: AstrMessageEvent, req: ProviderRequest, prov: Provider): + async def _handle_webchat( + self, event: AstrMessageEvent, req: ProviderRequest, prov: Provider + ): """处理 WebChat 平台的特殊情况,包括第一次 LLM 对话时总结对话内容生成 title""" conversation = await self.conv_manager.get_conversation( event.unified_msg_origin, req.conversation.cid