模式矩阵 /模式白皮书/A1

A1 · Tool Dispatch · 工具调度

字段
双轴坐标 行动 Action × 路由 Route(选)
成本档 ①(与单次调用同量级,元数据开销可忽略)
课程对应 05-02
目录归属 全集 33 模式之一 · 行动模块 5 模式之一
一句话 Agent 在每一步行动前,由工程层依据工具元数据从工具集中挑出最合适的工具,而不是让模型自己临场决定。

它解决什么问题

工具一多,agent 选错工具的概率就上来了。这里有一个反直觉的事实:LLM 擅长用工具(填参数、解读返回值),但不擅长选工具。一个接了 17 个工具的物流派单 agent,曾经把 80 单全部派给同一个堵在路上的司机——它每一步都"觉得"自己选对了,错误藏在"没刷新司机状态"和"没看路况"这些它注意不到的细节里。

Tool Dispatch 把"选哪个工具"这件事从模型手里收回到工程层。它的核心判断是:选工具是可靠性工程,不是 prompt 工程。靠的不是写一段更聪明的提示,而是给每个工具补足元数据,再配上配额、状态刷新、副作用追踪这一整套工程契约。

为什么坐标是「行动 × 路由」

核心机制

工业级 Tool Dispatch 的质量,主要由工具元数据的丰富度决定。OpenAI 早期 function calling 只有 name、description、parameters 三个字段,够 demo 用。Claude Code 的工具 schema 扩到了 14 个字段,按用途大致分成八类:标识、动态描述、双 schema、执行特性、UI 行为、来源标记、渐进披露、生命周期。

其中最关键的是执行特性五字段:isReadOnlyisConcurrencySafeisDestructiverequiresFreshStaterequiresApproval。它们的工程哲学是默认全部为 false,也就是"不知道就当不安全"——工具实现者忘了声明,系统也会保守处理,只有显式声明只读才进并行通道、跳过确认弹窗。每一个字段都对应一条资深工程师的工具操作直觉,把人靠多年经验积累的判断编码成机器可读的契约。

围绕元数据,还要配三件工程纪律:

机制 作用
Quota 配额 单 session 内同一工具(或同一参数)调用次数封顶,挡住"80 单派一个司机"这类副作用累积
State refresh 强制 写操作前必须先查询刷新状态,避免基于过期数据做写入
Saga 副作用追踪 每个 destructive 工具登记 inverse 动作,失败时反向回滚

适合的生产场景

容易出错的地方

关键指标

最小骨架

dispatch(tool_name, args, session):
    工具不存在        → 拒绝(tool_hallucination)
    配额已用满        → 拒绝(quota_exceeded)
    需新鲜状态但已过期 → 拒绝(stale_state_must_refresh)
    需人工审批        → 挂起(awaiting_approval)
    执行 handler:
        成功且 destructive → 登记 saga inverse + 累加 quota + 刷新 state 时间戳
        失败              → 记 trace,交由上层 saga 回滚
    返回 DispatchTrace(工具/参数/触发方/状态/拒因/耗时)

工程落地要点:元数据默认按不安全处理;quota 按主参数计(如派单按司机 id 计);MCP 工具加来源标记走额外的描述校验和行为监控。

企业落地一例

梁博团队的执行型 agent 把工具、技能、知识库分成三种角色:工具是"手",技能是"套路",知识库是"地图加手册"。agent 通过 retrieve 看地图、use_skill 读套路、call_tool 出手——出手前先看图读套路,正是 Tool Dispatch 在工程层做选择的体现。落到那个城配派单 agent 上,团队重写 dispatch 层时加了五件事:工具元数据扩展、selection guidance、写操作前强制状态刷新、单 session 内同一司机派单配额、saga 副作用追踪。准确率从 60% 升到 96%,代价是 dispatch 层多了约 800 行代码。多出来的每一行,本质都是把工程师踩过的坑固化成了机器执行的规则。

与其他模式的关系

一句话记住它

Tool Dispatch 的本质不是"写一段挑工具的提示",而是把工程师群体多年积累的工具操作纪律,编码成元数据和工程契约交给 agent 用——demo 级 agent 的工具元数据是 3 字段,生产级是 14 字段,这道字段差就是玩具和系统之间的距离。


本页属于 ADPS 33 模式白皮书。返回 模式矩阵与白皮书目录, 或查看配套 可运行代码目录