声明:本站文章均为作者个人原创,图片均为实际截图。如有需要请收藏网站,禁止转载,谢谢配合!!!

核心功能:限制单次 LLM 响应中 task 工具调用的并发数量,防止模型在一个响应中生成过多的并行子代理任务。

1 限制机制

默认限制:MAX_CONCURRENT_SUBAGENTS = 3
有效范围:可配置的 max_concurrent,但会被限制到 [2, 4] 之间
如果模型在一次响应中生成了超过限制的 task 工具调用,只保留前 N 个,丢弃多余的

2 实现方式

after_model() / aafter_model() → _truncate_task_calls(state)
  └─ 检查最后一条 AI 消息的 tool_calls
  └─ 统计名为 "task" 的工具调用数量
  └─ 如果超过 max_concurrent,截取前 N 个
  └─ 返回截断后的 state

3 使用场景

这是比提示词限制更可靠的方式,因为它是代码层面的强制约束,而不是依赖模型的自我约束。

函数解析:

_truncate_task_calls:

  1. 获取 state 中的 messages 列表
  2. 取最后一条消息,判断是否为 AI 消息 (type == “ai”)
  3. 检查该消息是否包含 tool_calls
  4. 筛选出所有 name == “task” 的工具调用的索引
  5. 如果数量 <= max_concurrent,返回 None(无需截断)
  6. 否则,保留前 N 个,将超出部分的索引标记为待丢弃
  7. 用 model_copy() 创建一条新的截断后的 AI 消息
  8. 打印 warning 日志,记录丢弃的数量
  9. 返回 {“messages”: [updated_msg]} 用于更新 state