Skip to content

Feature Request: 增加"缓冲中间消息"配置项,合并多步 Agent 中间文本为单条消息 #7599

@RoyougiShiki

Description

@RoyougiShiki

需求描述

在多步 Agent 工具调用场景下,LLM 每一步循环生成的文本都会作为独立消息立即发送给用户。当 LLM 在工具调用之间生成简短的中间文本(如"让我查一下…"、"正在处理…")时,用户会收到多条碎片化的消息,体验不佳。

复现步骤

  1. 配置一个非流式响应的 LLM Provider(streaming_response: false
  2. 向 Bot 发送一个需要多步工具调用的请求
  3. 观察到 LLM 每次工具调用前后的文本都会作为独立消息发送

期望行为

增加一个配置项(如 buffer_intermediate_messages),开启后:

  • Agent 多步循环中的中间文本不立即发送,而是缓存
  • 当 Agent 完成所有步骤后,将缓存的文本合并为一条消息发送
  • 最终回复只包含一条合并后的完整消息

建议的配置

provider_settings 中新增:

{
  "buffer_intermediate_messages": true
}
  • true:中间步骤文本缓冲,最终合并发送(默认 false 保持现有行为)
  • false:保持现有行为,每步都发送

相关代码位置

  • astrbot/core/astr_agent_run_util.pyrun_agent() 函数
  • astrbot/core/agent/runners/tool_loop_agent_runner.pystep() 方法

run_agent() 中,非流式模式下每次 llm_result 都会立即 yield 触发消息发送,建议在此处增加缓冲逻辑。

环境

  • AstrBot 版本:4.23.1
  • Python 版本:3.12
  • 操作系统:Windows

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:coreThe bug / feature is about astrbot's core, backend

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions