Skip to content

工具调用工作流 ​

Tool Use 的价值最终体现在一次完整、可观测、可回滚的调用链路中。本章从端到端视角拆解这条链路,并用状态机描述其中的关键分支。

端到端生命周期 ​

状态机视图 ​

各阶段详解 ​

1. Register / Discover ​

工具可以在编译期、启动期或运行期被发现。启动期注册适合稳定内部能力;运行期发现适合 MCP 插件生态。发现完成后,Registry 会维护一份元数据视图,供后续所有轮次使用。当工具数量较大时,本阶段还会构建检索索引(名称 + 描述 embedding),供每轮按需召回 Top-K 候选工具,而不是把全量 schema 注入 Prompt(见第 2 章渐进披露)。

2. Model Decision ​

Orchestrator 把系统提示、用户输入、可用工具描述、历史消息一起发给模型。模型输出可能是:

  • 直接文本回答(无工具)。
  • 一个或多个工具调用请求(并行或串行)。

3. Parse ​

Parser 把模型输出转换为内部标准结构:

python
class ToolInvocation:
    call_id: str
    tool_name: str
    arguments: dict

不同厂商的输出形态不同:OpenAI 是 tool_calls 数组,Anthropic 是 tool_use 内容块,Google 是 function_call part。Parser 需要屏蔽这些差异。

4. Validate ​

Validator 至少执行两层校验:

  • Schema 校验:参数是否符合 JSON Schema,必填字段是否存在,类型是否正确。
  • 语义校验:例如数值范围、业务规则、字符串白名单、时间窗口等。

如果校验失败,通常不应静默忽略,而要把错误信息返回给模型,让它有机会自我修正。

5. Permission / Policy ​

敏感操作(写数据、发邮件、扣款、删除资源)需要经过权限检查。策略可能包括:

  • 基于身份的 ACL。
  • 基于操作风险的动态审批。
  • 基于数据敏感度的脱敏或拒绝。
  • 人机确认(HITL)弹窗。

6. Execute ​

Executor 把调用分发给真实实现。这里需要考虑:

  • 并发:独立调用并行执行,并设置最大并发数。
  • 超时:每个调用设置硬超时(区分连接超时与整体超时)。
  • 重试:对瞬时故障进行有限重试。2026 年的最佳实践是 verify-before-retry:工具调用可能出现“非原子失败”——请求超时但服务端实际已执行、效果延迟可见、部分写入(arXiv 2608.02645)。直接重放调用会造成重复扣款、重复下单等副作用;正确做法是先用只读工具检查外部状态/后置条件,确认动作确实未生效再重试,配合幂等键更安全。
  • 熔断:连续失败时快速失败,避免拖垮下游。
  • 降级:主路径失败时返回兜底结果或缓存。

7. Format ​

Formatter 把执行结果转换为模型能消费的消息格式,并进行必要处理:

  • JSON 序列化。
  • 超长结果截断或摘要。
  • 错误信息脱敏。
  • 按厂商要求包装 tool_call_id / tool_use_id。

8. Feedback ​

格式化后的消息被追加到对话历史中,模型基于新的上下文继续生成。同时,调用记录被写入 Memory 和 Observer,用于后续检索与审计。

长任务中工具历史会不断膨胀,撑爆上下文并推高成本。2026 年起托管运行时开始内置 context compaction:例如 OpenAI Agents API(2026-09 公测)会在长任务中自动压缩早期工具历史;自托管系统则应在 Feedback 阶段对过旧的 tool_result 做摘要或外置到 Memory,只保留引用。

终止条件 ​

工具调用循环不会无限进行,常见终止条件包括:

  • 模型不再返回工具调用,直接给出最终答案。
  • 达到最大轮次限制(max turns)。
  • 达到最大工具调用次数(max tool calls)。
  • 用户明确终止。
  • 连续多轮出现相同错误,判定为无法继续。
  • Planning 模块判定任务目标已达成。

失败分支 ​

失败类型典型原因处理方式
Parse Error模型输出非结构化或 JSON 非法(在受约束解码普及后已大幅减少)返回错误 Observation,允许模型重试
Validation Error参数类型/必填/范围不符合返回具体校验错误,模型修正
Permission Denied当前身份无权调用返回拒绝说明,必要时触发 HITL
Execution Error下游服务异常、超时、网络抖动验证状态后再重试(verify-before-retry)、熔断、降级
Non-atomic Failure调用超时但实际已生效,效果延迟可见先查外部状态,确认未生效再重试,避免重复副作用
Malformed Result下游返回非预期格式在 Formatter 中兜底处理
Loop / No Progress多轮调用未推进任务终止并交给用户或 Reflection 模块

下一章将逐一对核心模块的职责、输入输出和接口进行深入设计。

Released under CC-BY-SA-4.0 License.