From 22f3244bf58dc2fc5e8c860b220b642593558e33 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 9 Apr 2026 23:26:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(agent):=20=E6=B5=81=E5=BC=8F+=E5=95=B0?= =?UTF-8?q?=E5=97=A6=E6=A8=A1=E5=BC=8F=E4=B8=8B=E6=B8=A0=E9=81=93=E4=B8=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=BC=96=E8=BE=91=E6=97=B6=E7=AB=8B=E5=8D=B3?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=B7=A5=E5=85=B7=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 渠道不支持编辑时没有定时刷新任务,emit 到 buffer 的内容不会被推送。 新增 can_edit_message 属性区分两种模式:支持编辑的继续 emit 到 buffer, 不支持编辑的 take 出 agent 文字与工具消息合并独立发送。 --- app/agent/callback/__init__.py | 7 +++++++ app/agent/tools/base.py | 18 +++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/agent/callback/__init__.py b/app/agent/callback/__init__.py index ce7d04e0..f7baa4bd 100644 --- a/app/agent/callback/__init__.py +++ b/app/agent/callback/__init__.py @@ -347,6 +347,13 @@ class StreamingHandler: """ return self._streaming_enabled + @property + def can_edit_message(self) -> bool: + """ + 是否支持消息编辑(实时推送),即定时刷新任务正在运行 + """ + return self._flush_task is not None + @property def has_sent_message(self) -> bool: """ diff --git a/app/agent/tools/base.py b/app/agent/tools/base.py index 17129c54..dd344e72 100644 --- a/app/agent/tools/base.py +++ b/app/agent/tools/base.py @@ -65,9 +65,21 @@ class MoviePilotTool(BaseTool, metaclass=ABCMeta): # 发送工具执行过程消息 if self._stream_handler and self._stream_handler.is_streaming: if settings.AI_AGENT_VERBOSE: - # VERBOSE:工具消息直接追加到 buffer 中,与 Agent 文字合并为同一条流式消息 - if tool_message: - self._stream_handler.emit(f"\n\n⚙️ => {tool_message}\n\n") + if self._stream_handler.can_edit_message: + # 渠道支持编辑:工具消息追加到 buffer,由定时刷新推送 + if tool_message: + self._stream_handler.emit(f"\n\n⚙️ => {tool_message}\n\n") + else: + # 渠道不支持编辑:取出 Agent 文字 + 工具消息合并独立发送 + agent_message = await self._stream_handler.take() + messages = [] + if agent_message: + messages.append(agent_message) + if tool_message: + messages.append(f"⚙️ => {tool_message}") + if messages: + merged_message = "\n\n".join(messages) + await self.send_tool_message(merged_message) else: # 非VERBOSE,重置缓冲区从头更新,保持消息编辑能力 self._stream_handler.reset()