fix(agent): 流式+啰嗦模式下渠道不支持编辑时立即发送工具消息

渠道不支持编辑时没有定时刷新任务,emit 到 buffer 的内容不会被推送。
新增 can_edit_message 属性区分两种模式:支持编辑的继续 emit 到 buffer,
不支持编辑的 take 出 agent 文字与工具消息合并独立发送。
This commit is contained in:
jxxghp
2026-04-09 23:26:39 +08:00
parent aafc4b3a39
commit 22f3244bf5
2 changed files with 22 additions and 3 deletions

View File

@@ -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:
"""

View File

@@ -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()