From f70eaf9363293f744cf6266ba3dcd5270caf4b89 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 28 Mar 2026 23:08:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(agent):=20=E6=B7=BB=E5=8A=A0reset=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E6=94=AF=E6=8C=81=E6=B5=81=E5=BC=8F=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E5=8E=9F=E5=9C=B0=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/agent/callback/__init__.py | 13 +++++++++++++ app/agent/tools/base.py | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/agent/callback/__init__.py b/app/agent/callback/__init__.py index e2d8ae6f..8d2268c5 100644 --- a/app/agent/callback/__init__.py +++ b/app/agent/callback/__init__.py @@ -98,6 +98,19 @@ class StreamingHandler: self._message_response = None self._msg_start_offset = 0 + def reset(self): + """ + 重置缓冲区,清空已发送的文本从头更新,但保持消息编辑能力。 + + 与 clear 的区别: + - clear:完全重置所有状态,后续会开新消息 + - reset:只清空buffer,保留消息编辑状态,后续继续编辑同一条消息 + """ + with self._lock: + self._buffer = "" + self._sent_text = "" + self._msg_start_offset = 0 + async def start_streaming( self, channel: Optional[str] = None, diff --git a/app/agent/tools/base.py b/app/agent/tools/base.py index 3cee990c..761230e3 100644 --- a/app/agent/tools/base.py +++ b/app/agent/tools/base.py @@ -59,8 +59,8 @@ class MoviePilotTool(BaseTool, metaclass=ABCMeta): if tool_message: self._stream_handler.emit(f"\n\n⚙️ => {tool_message}\n\n") else: - # 非VERBOSE,不输出最后结果前的消息 - self._stream_handler.clear() + # 非VERBOSE,重置缓冲区从头更新,保持消息编辑能力 + self._stream_handler.reset() else: # 非流式渠道:保持原有行为,取出 Agent 文字 + 工具消息合并独立发送 agent_message = (