摘要
Agent Tool Use 的关键,不是让大模型输出一个看起来像 API 调用的 JSON,而是让它在受约束的权限和状态空间内,持续选择正确工具、生成有效参数、解释执行反馈,并在失败时安全停止或恢复。
早期工作把推理与环境行动交错起来;随后,函数调用、API 文档检索和结构化解码改善了工具选择与参数格式。此后的评测进一步把问题从“单次调用是否正确”推进到“多轮对话结束后,系统状态是否正确、执行路径是否安全,且多次运行是否一致”。2025 年下半年至 2026 年的代表性进展,则集中在大规模工具的按需发现、代码化编排、协议的无状态化与授权加固,以及面向完整轨迹和协议攻击面的评测。
这一区别很重要:schema 合规只能消除一类格式或结构错误,不能证明字段值和业务语义正确;协议互操作也不能证明工具可信,更不能证明端到端稳定。
本文面向具备大模型或 Agent 基础的工程师与技术决策者。文中“近期”指截至 2026 年 9 月 18 日核查到的代表性公开资料,不声称穷尽全网或构成绝对最新清单。全文以一个电商售后 Agent 为贯穿案例。文中的 JSON、公式与控制流均为设计示例,未在可执行环境中验证。
范围与术语
本文讨论语言模型通过函数、API、数据库适配器或代码执行器完成数字世界任务,不展开机器人控制和多 Agent 组织方式。
- 工具(tool):具有名称、用途、输入契约、输出契约和副作用说明的可调用能力。
- 工具调用(tool call):模型提出的结构化调用意图;它不应直接等同于已执行操作。
- 观察(observation):执行器返回的结果、错误、状态版本或策略拒绝。
- 轨迹(trajectory):从用户请求到终止的一连串模型决策、工具调用、观察和状态变化。
- 工作流(workflow):调用路径主要由代码预先编排;Agent 则由模型动态决定过程与工具。这个区分提示了一个实践原则:确定性强的业务优先使用固定工作流,只有路径难以预先枚举时才增加自主性。Anthropic, Building effective agents
- 可靠性:在规定输入、环境和策略约束下,系统产生正确终态且不造成越权副作用的概率。
- 稳定性:同类输入在多次运行、版本变化和短暂故障下,结果及行为边界保持一致的程度。
原理:模型如何从文本走到行动
1. 工具描述与选择
模型首先看到一组工具描述,包括工具名、适用场景、参数和边界。它需要判断三件事:是否应调用工具、调用哪个工具、是否缺少必要信息。工具之间语义重叠、命名含糊或描述过长,都会提高误选概率。
以售后 Agent 为例,工具集包含:
get_order:只读查询订单;get_policy:读取当前售后政策;update_address:修改尚未发货订单的地址;create_refund:创建退款,具有资金副作用。
若同时提供 refund_order、cancel_order、issue_credit 等边界模糊的工具,模型即使理解用户意图,也可能选错业务动作。工具设计因此也是 Agent—计算机接口设计。工程上应让定义包含边界、示例和输入要求,并改造参数使错误更难发生,而不只是反复调整总提示词。
2. 参数生成与函数调用
选定工具后,模型把自然语言映射为结构化参数。传统 JSON mode 只能提高 JSON 语法有效率,不保证输出符合特定 schema。结构化输出进一步用 schema 约束字段、类型、枚举和必填项;OpenAI 公开说明其实现结合模型训练与受约束解码,在每一步屏蔽不符合语法的 token。OpenAI, Introducing Structured Outputs in the API
但“结构正确”不等于“值正确”。下面是示例契约:
{
"name": "create_refund",
"description": "为已支付且符合政策的订单创建退款;执行前必须获得确认",
"input_schema": {
"type": "object",
"properties": {
"order_id": { "type": "string", "pattern": "^ORD-[0-9]+$" },
"amount_minor": { "type": "integer", "minimum": 1 },
"currency": { "type": "string", "enum": ["CNY"] },
"reason_code": { "type": "string", "enum": ["DAMAGED", "NOT_SHIPPED"] },
"expected_order_version": { "type": "integer", "minimum": 0 },
"idempotency_key": { "type": "string" }
},
"required": [
"order_id",
"amount_minor",
"currency",
"reason_code",
"expected_order_version",
"idempotency_key"
],
"additionalProperties": false
}
}
该 schema 可以阻止缺字段、额外字段和部分类型错误,却无法判断 amount_minor=10000 是否超过实付金额,也无法判断订单是否已发货。这些必须由业务校验器和最新状态决定。结构化输出仍可能在字段值上犯错,也可能因拒绝或输出被截断而不能按 schema 完成。
3. 观察—推理—行动闭环
ReAct 将推理与行动交错:模型根据当前信息选择动作,环境返回观察,模型再更新计划。原论文在问答、事实核验和交互式决策任务中展示了这种闭环,并强调外部观察可减少仅靠内部生成造成的幻觉和误差传播。Yao et al., ReAct
生产系统不应把未经约束的“模型想法”直接视作权限依据。可记录的是动作摘要、工具参数、策略判定与结果,而执行权应始终经过确定性控制面。
用户请求
-> 意图与风险分级
-> 模型提出下一动作
-> schema 校验
-> 策略/权限/业务前置条件校验
-> [高风险动作:用户确认]
-> 带超时和幂等键的执行器
-> 规范化观察 + 状态版本
-> 模型继续、降级、请求信息或终止
4. 规划、执行与状态反馈
复杂任务通常包含规划与执行两个层次。售后请求“把未发货订单改到新地址,否则退款”至少要:识别订单、查询状态、读取政策、确认地址、尝试改址,并在条件不满足时重新征得退款确认。计划不是一次性脚本;每次观察都可能使原计划失效。
状态至少分四类:
- 对话状态:用户已经提供或确认了什么;
- 业务状态:订单、库存、支付和政策版本;
- 执行状态:调用是否开始、超时、成功或结果未知;
- 控制状态:剩余步数、预算、权限和风险等级。
执行器应返回机器可判定的错误,例如 VALIDATION_ERROR、CONFLICT、RATE_LIMITED、TIMEOUT_UNKNOWN_OUTCOME,而不是只有一段自然语言。模型可以据此修正参数或询问用户,但不能自行把“未知结果”解释为失败后再次扣款。
原理演进与近期技术方向
API 文档检索:从静态工具表走向按需发现
Gorilla/APIBench 聚焦 API 调用准确性,指出参数错误和虚构 API 是核心困难,并将文档检索与模型结合,以适应测试时文档或版本变化。Patil et al., Gorilla
到 2025 年,问题从“找到一个 API”扩展为“在数十至数千个工具中,仅加载当前所需定义”。Anthropic 在 2025 年 11 月公开的高级工具使用方案包括按需 Tool Search、程序化工具调用和调用示例;其内部测试数字显示这些机制可降低上下文占用并改善特定评测表现,但这些是厂商在指定模型和测试集上的结果,不应外推为普遍收益。Anthropic, Introducing advanced tool use
工程含义是:工具目录很大时,先按身份、权限、租户、任务和版本裁剪,再检索候选工具;常用且低风险的少量工具可常驻,其余延迟加载。检索本身也会漏召回,因此必须评测“目标工具是否进入候选集”,而不只评测候选集内的选择准确率。检索结果和第三方工具描述仍是不可信输入,不能覆盖系统策略。
受约束解码与调用示例:结构约束之后仍需语义约束
结构化输出代表一种重要转变:可由确定性机制保证的性质,不必只依赖提示词。厂商在其特定复杂 JSON schema 评测上报告 gpt-4o-2024-08-06 配合严格结构化输出达到 100% schema 匹配;该数字是厂商自报的格式评测结果,不能外推为工具选择、字段语义或业务终态 100% 正确。OpenAI
2025 年出现的工具调用示例机制,进一步补足 schema 难以表达的约定,例如日期格式、可选字段组合和嵌套对象使用方式。示例可降低歧义,但也增加上下文和维护成本;真正可确定的单位、枚举、字段相关性与前置条件,仍应优先写进 schema 和业务校验器,而不是只靠 few-shot 示例。
代码化编排:减少上下文搬运,同时扩大执行边界
直接工具调用要求每次结果回到模型上下文。对于大表格、长文档或多次循环,这会增加 token、时延和复制错误。2025 年公开的代码执行式 MCP/程序化调用方案,让模型编写一段编排代码,在沙箱中完成筛选、聚合、循环和并行调用,只把必要结果返回模型。Anthropic, Code execution with MCP
这不是无条件的可靠性提升。代码把隐式自然语言控制流变成更可检查的显式逻辑,也可能减少中间数据进入模型上下文;但它同时引入任意代码执行、依赖供应链、资源耗尽、网络外连和持久状态污染等风险。生产实现必须限制可调用工具、网络、文件目录、CPU、内存和时长,并把并行写操作、重试语义与数据流策略交给宿主控制面。
状态化、多轮与完整路径评测
τ-bench 模拟用户、领域 API 和策略规则,以会话结束后的数据库状态对照目标状态,并用 pass^k 观察多次试验的一致可靠性。论文报告当时的先进函数调用 Agent 在其任务上成功率仍低于 50%,零售域 pass^8 低于 25%;这些数字只适用于该论文版本、任务和实验设置。Yao et al., τ-bench
ToolSandbox 加入有状态工具执行、工具间隐式状态依赖、在策略用户模拟器,以及对任意轨迹中间与最终里程碑的动态评估。Lu et al., ToolSandbox
2025 年后,评测继续向更复杂的工具生态和更细的故障定位发展:
- MCP-Bench 接入 28 个 MCP server、250 个工具,考察模糊需求下的工具发现、跨工具协调、多跳规划、参数控制和轨迹级完成度;这比孤立的单 API 题更接近工具生态,但依赖 live server 也会引入环境变化与复现挑战。Wang et al., MCP-Bench
- FuncBenchGen 在运行时生成隐藏函数依赖 DAG,可控制图规模、依赖深度和干扰函数,以降低固定题集污染风险。其 2026 年修订版报告:依赖链变深时性能明显下降,强模型也会传播错误或陈旧参数;这为“显式保存并重述状态变量”提供了实验依据。Maekawa et al., Towards Reliable Benchmarking
- CORE 用确定有限自动机表达一组允许的工具路径,并加入路径正确性、前缀关键性、有害调用率和效率等指标,揭示“最终状态正确但途中发生危险或冗余调用”的情况。Michelakis et al., CORE
工具协议:从连接标准化走向无状态、可路由和授权加固
MCP 2025-06-18 规范以 JSON-RPC 2.0 连接 host、client 与 server,支持能力协商,并区分 resources、prompts 和 tools。2025-11-25 版进一步明确基于 OAuth 2.1 的授权发现、资源指示符、token audience 校验、PKCE 和 step-up authorization 等要求。MCP Specification 2025-11-25:Authorization
截至本文核查日,MCP 的最新正式规范版本为 2026-07-28。它把协议核心从依赖会话的双向连接改为无状态、自包含请求,引入 Multi Round-Trip Requests 处理确认或补充输入,支持基于方法/工具名 header 的网关路由、列表缓存提示和扩展框架;授权方面增加 issuer 校验,将客户端凭据绑定到签发方,并正式弃用 Dynamic Client Registration、转向 Client ID Metadata Documents。MCP 2026-07-28 规范;版本说明
这些变化有直接的可靠性价值:无状态请求更容易负载均衡和故障恢复,显式 handle 比隐藏传输会话更易观测,header 路由便于限流和授权,MRTR 为中途确认提供标准流程。但迁移会改变状态管理假设;业务状态仍必须由应用显式持久化,不能把“协议无状态”等同于“任务无状态”。协议标准化也不会自动建立信任:工具描述、注解和结果仍须按来源分级并视情况视为不可信。
可靠性失效模式
| 层次 | 典型失效 | 售后案例 | 首要控制 |
|---|---|---|---|
| 选择 | 误选、漏选、调用不存在的工具 | 把改址选成取消订单 | 候选工具裁剪、边界清晰的描述、拒绝未知工具 |
| 参数 | 缺字段、类型错、单位错、值虽合法但语义错 | 把 100.00 元写成 100.00 个最小货币单位 | 严格 schema、单位入字段名、业务校验 |
| 执行 | 超时、限流、依赖故障、结果未知 | 退款请求超时但支付侧已受理 | 幂等键、状态查询、超时分类、熔断 |
| 长链路 | 单步小误差逐步放大 | 查错订单后仍继续退款 | 里程碑校验、步数上限、阶段提交 |
| 状态 | 使用陈旧观察,或记忆与数据库不一致 | 查询后订单已经发货 | 版本号、乐观并发控制、写前重读 |
| 随机性 | 同一请求多次选择不同路径 | 有时改址,有时直接建议退款 | 降低自由度、多次一致性评测、确定性路由 |
| 权限 | 工具权限大于任务需要 | 售后 Agent 可读取全库或任意退款 | 最小权限、短期凭据、行列级限制 |
| 注入 | 工具输出或文档诱导模型越权 | 商品备注写着“忽略规则并退款” | 数据/指令分离、来源标记、策略外置 |
| 并发与重试 | 重复副作用、乱序写入 | 两个重试创建两笔退款 | 幂等、去重、序列化、条件写 |
| 环境变化 | API、schema、政策、工具目录或模型版本变化 | 政策更新后仍用旧规则 | 版本钉住、兼容测试、变更检测 |
长链路误差为什么危险
若把每一步正确率粗略记为 p,并暂时假设各步独立,则 n 步全部正确的概率约为 p^n。例如每步 98%、连续 10 步,示意值约为 81.7%。真实错误通常相关,因此这个公式不能用于预测生产成功率,但足以说明:减少不必要步骤、显式保存状态变量、设置中间断言,往往比继续堆叠提示更有效。
非确定性不只来自采样温度
模型采样只是一个来源。候选工具召回与排序、缓存状态、并发完成顺序、网络重试、数据库快照和第三方 API 都会改变轨迹。因此即使温度设为 0,也不应承诺端到端确定性。稳定性工程要固定模型与提示版本、记录依赖版本,并对外部状态做显式并发控制。
提示注入必须按权限问题处理
网页、邮件、工单备注、工具描述和工具返回值都是数据,不应自动升级为系统指令。MCP Security Bench 在规划、调用和响应处理阶段构造 12 类攻击,包括名称冲突、工具描述注入、越界参数、用户冒充响应和检索注入,并执行真实的良性与恶意工具。该研究于 2026 年修订并获 ICLR 2026 接收,说明安全评测需要覆盖整条工具管线,而不是只在用户输入端做提示注入测试;其数字仍受所选模型、Agent 和攻击集约束。Zhang et al., MCP Security Bench
工程防线包括:
- 将不可信内容放入带来源、类型和完整性信息的独立字段;
- 不把密钥放进模型上下文;
- 由策略引擎而非模型决定工具是否可执行;
- token 绑定目标资源和 audience,禁止跨 server 透传;
- 对写操作限定租户、资源、金额和有效期,按需 step-up authorization;
- 对代码、文件和浏览器工具使用网络与文件系统沙箱;
- 对资金、删除、外发和权限变更设置明确确认。
确认界面应展示具体效果,例如“向订单 ORD-123 原支付方式退款 100.00 CNY”,而不是笼统询问“是否继续”。确认令牌应绑定动作摘要、状态版本和过期时间,防止确认后参数被替换。
评测框架:榜单不是生产 SLO
离线评测要分层
建议至少保留以下指标,而不是只看最终答案:
- 候选召回率与工具选择准确率:目标工具是否被检索到,以及应调用、工具名和不应调用的判断;
- 参数合规率:schema、枚举、单位和必填字段;
- 参数语义正确率:订单、金额、时间范围是否符合意图;
- 策略遵循率:是否补问、确认、拒绝越权操作;
- 执行恢复率:限流、冲突、超时和部分失败后能否安全恢复;
- 里程碑与终态成功率:数据库终态及关键中间条件是否正确;
- 路径安全与效率:有害、重复、乱序或跳过前置条件的调用;
- 多次运行一致性:同一任务重复运行的成功分布,可借鉴
pass^k思路; - 安全鲁棒性:正常任务效用与攻击成功率必须同时报告;
- 成本与时延:工具次数、模型 token、P50/P95/P99 延迟。
τ-bench 的终态对照适合验证“事情是否真的办成”,ToolSandbox 的中间里程碑有助于定位“从哪一步开始偏离”;MCP-Bench 增加真实多工具和跨 server 协作,FuncBenchGen 可控制链路深度与干扰项,CORE 则补足完整路径的安全和效率。MSB 提醒评测还要放入恶意工具元数据、越界参数和污染响应。它们相互补充,但都不能单独代表生产流量。
线上可靠性需要另一组证据
离线集通常固定工具、策略和数据分布;线上则有新意图、脏数据、权限差异、依赖抖动、目录变化和真实攻击。生产指标应把结果、风险和恢复同时纳入:
- 任务成功率与用户更正率;
- 无法确认结果的调用比例;
- 重试后重复副作用数;
- 策略拒绝、越权尝试和人工接管率;
- 按工具、模型、提示、租户、协议和 schema 版本切分的错误率;
- 路径效率、无效循环与预算耗尽率;
- 事故严重度,而非仅平均成功率。
单一榜单成绩不能等同于生产稳定性。上线门槛还应包括影子流量、历史轨迹回放、故障注入、小流量灰度和按严重度加权的回归套件。对于依赖 live server 的评测,要记录服务版本和时间;对于 LLM judge,要抽样做人审并监控 judge 漂移。
参考架构
[用户/UI]
| 身份、会话、明确确认
[任务入口与风险分级]
|
[编排器:固定工作流优先;必要时允许模型规划]
|---- [工具目录/按需检索:按身份、权限、租户、版本裁剪]
|---- [模型:只提出结构化动作或受限编排代码]
|
[确定性控制面]
| schema 校验 / 调用示例仅作语义辅助
| 策略、授权、audience 与业务前置条件
| 状态版本、确认令牌、预算/步数/风险阈值
|
[执行网关与沙箱]
| 幂等、去重、超时、退避、熔断、限流
| 代码资源限制、网络/文件边界、短期凭据
|
[领域工具与外部系统]
|
[规范化结果 + 显式应用状态 + 审计轨迹]
|
[继续 / 降级 / 补问 / 人工接管 / 安全终止]
该架构把模型放在“提议动作”的位置,把授权、校验和提交留给确定性组件。协议层可以无状态,但售后任务的业务状态、幂等记录和确认状态必须显式持久化。对于路径稳定的流程,可将“查订单—查政策—确认—执行”固化为工作流;只有例外处理交给 Agent。
实施清单
契约、目录与状态
- 工具名互斥、描述具体,标明只读/写入、可逆性和副作用;
- 输入输出均有版本化 schema,默认拒绝额外字段;
- 金额使用最小货币单位并携带币种,时间使用明确时区;
- 大工具集按权限和任务按需发现,并单独测量检索召回率;
- 示例只表达难以结构化的调用惯例,不替代确定性约束;
- 写操作包含资源版本或前置条件,提交前重新读取关键状态;
- 工具结果使用稳定错误码,并区分“确定失败”与“结果未知”;
- 协议会话、应用会话、业务对象版本和长任务 handle 分开建模。
执行与恢复
- 每个副作用调用使用业务级幂等键和去重存储;
- 只对可重试错误采用带抖动的指数退避,并设置次数上限;
- 为模型、单工具、编排代码和整条任务分别设置超时与预算;
- 依赖持续失败时熔断,降级为只读、排队或人工处理;
- 并行仅用于真正独立的操作;有写依赖时显式排序;
- 对结果未知的写调用先查状态,不盲目重放;
- 补偿操作不是“撤销”的同义词,需单独建模、授权和审计。
权限与安全
- 按用户、租户、任务和工具签发最小权限短期凭据;
- 校验 token audience/目标资源,禁止把下游 token 透传给其他 server;
- 模型上下文不出现长期密钥;
- 外部内容、检索文档、工具元数据和工具结果按来源视为不可信数据;
- 高风险动作使用效果预览、二次确认和绑定参数的确认令牌;
- 代码执行、浏览器和文件工具运行在限制网络、CPU、内存、时长与目录的沙箱;
- 为数据外发、删除、资金和权限变更设置不可由提示覆盖的策略。
可观测性与回归
- 记录
trace_id、模型/提示/工具/协议版本、参数摘要、策略决策、状态版本、延迟和结果; - 敏感字段脱敏,审计日志与模型可见上下文分离;
- 保存可重放轨迹,但重放写操作时替换为模拟器或影子环境;
- 回归集覆盖正常路径、检索漏召回、缺信息、状态冲突、超时、注入、恶意工具描述、重复请求和版本迁移;
- 同时检查终态、里程碑、完整路径、有害调用和效率;
- 模型、提示、schema、工具、协议或政策任一变化都触发分层回归;
- 按错误严重度设置发布门槛,不能用大量轻微成功抵消一次严重越权。
分层降级与人工接管
建议预先定义降级阶梯:
- 自主执行低风险只读操作;
- 写操作前请求用户确认;
- 不确定时只生成建议,不执行;
- 依赖异常时返回已知状态并停止;
- 高风险、冲突或连续失败时移交人工。
移交包应包含用户目标、已确认事实、已执行动作、当前业务状态、失败码和待决问题,而不是只转发整段对话。这样人工可以从可信状态继续,而不是重新推断整条轨迹。
局限与展望
第一,schema、受约束解码和调用示例解决的是不同层次的问题,都不能代替事实、意图和策略语义校验。更稳健的方向是把形式化前置条件、状态机、数据流限制和事务语义纳入工具契约。
第二,按需发现缓解工具目录膨胀,却把检索召回变成新的单点;程序化调用减少上下文搬运,却扩大代码执行边界。两者都需要端到端评测,而不能只看 token 节省或单项准确率。
第三,状态化、路径化与安全基准比单轮 API 题更接近真实系统,但模拟用户、合成依赖图、有限领域、live server 漂移和 LLM judge 偏差仍限制外推。评测需要与真实匿名失败轨迹、故障注入和持续回归结合。
第四,MCP 2026-07-28 的无状态核心、MRTR、缓存和授权加固改善了可伸缩性与控制点,也带来迁移成本。统一协议会扩大工具生态,同时扩大供应链与权限边界;协议规范仍明确不能自行强制所有安全原则,宿主必须落实同意、访问控制、隔离和审计。
最后,Agent 自主性存在明确成本:步骤越多,延迟、费用和累积错误面越大。截至 2026-09-18 核查到的资料,更支持“简单、可组合、可测、显式状态”的系统,而非默认追求完全自治。可靠 Tool Use 的目标不是让模型永不出错,而是让错误可拦截、可归因、可恢复、无重复副作用,并能及时交给人。
参考资料
- Yao et al., ReAct: Synergizing Reasoning and Acting in Language Models, 2022/2023。
- Patil et al., Gorilla: Large Language Model Connected with Massive APIs, 2023。
- Yao et al., τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains, 2024。
- Lu et al., ToolSandbox, 2024,v2 2025。
- Anthropic, Building effective agents, 2024-12-19。
- OpenAI, Introducing Structured Outputs in the API, 2024-08-06。
- Wang et al., MCP-Bench, 2025-08-28。
- Maekawa et al., Towards Reliable Benchmarking: A Contamination Free, Controllable Evaluation Framework for Multi-step LLM Function Calling, 2025,v2 2026-02-06。
- Michelakis et al., CORE: Full-Path Evaluation of LLM Agents Beyond Final State, 2025-09-25。
- Anthropic, Code execution with MCP, 2025-11-04。
- Anthropic, Introducing advanced tool use on the Claude Developer Platform, 2025-11-24。
- Model Context Protocol, Specification 2025-11-25, 2025-11-25。
- Zhang et al., MCP Security Bench, 2025,v2 2026-03-24,ICLR 2026。
- Model Context Protocol, Specification 2026-07-28, 2026-07-28。
- Model Context Protocol Blog, The 2026-07-28 Specification, 2026-07-28。