需求描述
在多步 Agent 工具调用场景下,LLM 每一步循环生成的文本都会作为独立消息立即发送给用户。当 LLM 在工具调用之间生成简短的中间文本(如"让我查一下…"、"正在处理…")时,用户会收到多条碎片化的消息,体验不佳。
复现步骤
- 配置一个非流式响应的 LLM Provider(
streaming_response: false)
- 向 Bot 发送一个需要多步工具调用的请求
- 观察到 LLM 每次工具调用前后的文本都会作为独立消息发送
期望行为
增加一个配置项(如 buffer_intermediate_messages),开启后:
- Agent 多步循环中的中间文本不立即发送,而是缓存
- 当 Agent 完成所有步骤后,将缓存的文本合并为一条消息发送
- 最终回复只包含一条合并后的完整消息
建议的配置
在 provider_settings 中新增:
{
"buffer_intermediate_messages": true
}
true:中间步骤文本缓冲,最终合并发送(默认 false 保持现有行为)
false:保持现有行为,每步都发送
相关代码位置
astrbot/core/astr_agent_run_util.py → run_agent() 函数
astrbot/core/agent/runners/tool_loop_agent_runner.py → step() 方法
在 run_agent() 中,非流式模式下每次 llm_result 都会立即 yield 触发消息发送,建议在此处增加缓冲逻辑。
环境
- AstrBot 版本:4.23.1
- Python 版本:3.12
- 操作系统:Windows
需求描述
在多步 Agent 工具调用场景下,LLM 每一步循环生成的文本都会作为独立消息立即发送给用户。当 LLM 在工具调用之间生成简短的中间文本(如"让我查一下…"、"正在处理…")时,用户会收到多条碎片化的消息,体验不佳。
复现步骤
streaming_response: false)期望行为
增加一个配置项(如
buffer_intermediate_messages),开启后:建议的配置
在
provider_settings中新增:{ "buffer_intermediate_messages": true }true:中间步骤文本缓冲,最终合并发送(默认false保持现有行为)false:保持现有行为,每步都发送相关代码位置
astrbot/core/astr_agent_run_util.py→run_agent()函数astrbot/core/agent/runners/tool_loop_agent_runner.py→step()方法在
run_agent()中,非流式模式下每次llm_result都会立即yield触发消息发送,建议在此处增加缓冲逻辑。环境