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 = (