首页 › ai-agents › 工具描述即编程:Schema精度锁定Agent成败

概述

2026年,Agent工程界正在经历一次认知范式转移:工具调用的可靠性瓶颈不在框架层,而在描述层。Anthropic的工程博客明确提出"工具描述即Prompt Engineering",OpenAI更新了基于"最小惊讶原则"的Function Calling指南,UC Berkeley的BFCL v4将Schema复杂度纳入评测维度。与此同时,两篇前沿论文——Trace-Free+(自动重写工具描述)和TSCG(确定性Schema编译)——从学术侧验证了一个关键结论:同样一组工具,描述质量差异可导致调用准确率波动20-40%。本文从描述精度、Schema编译、自动重写、厂商协议差异、工具目录规模退化五个维度,实测拆解"工具描述工程"如何成为Agent系统成败的隐藏变量。


一、问题定义:为什么工具描述是Agent的"第二系统提示"

传统Agent开发者的注意力分配呈倒挂状态:90%花在系统提示词和编排逻辑上,工具定义草草写就。但2026年的工程实践表明,模型在每轮推理时接收的Token构成中,工具Schema占据的上下文比例远超想象。

以一个拥有30个工具的中等规模Agent为例:

Token来源 占比 说明
系统提示 ~15% 角色、约束、风格
对话历史 ~20% 多轮累积
工具Schema ~40-55% 30个工具的JSON Schema+描述
用户输入 ~5% 当前查询
余量 ~10% 输出空间

工具描述占据了Agent上下文的最大份额。这意味着描述质量直接影响模型的注意力分配——模糊的描述消耗推理带宽,精确的描述则为模型建立清晰的选择边界。

Anthropic工程团队在2025年9月的文章《Writing effective tools for AI agents》中明确提出:改进工具描述是"最有效的工具优化手段之一"(one of the most effective methods for improving tools),其影响甚至超过框架选型。


二、描述精度五级模型:从"能跑"到"自解释"

基于Anthropic官方指南、OpenAI最小惊讶原则、以及BFCL v4的评测数据,我们将工具描述精度分为五个等级:

graph TD
    L1["L1: 裸名级<br/>仅有函数名和参数类型"] --> L2["L2: 句子级<br/>一句话描述+基础参数说明"]
    L2 --> L3["L3: 规格级<br/>详细行为描述+约束+边界条件"]
    L3 --> L4["L4: 示例级<br/>规格级+调用示例+反面模式"]
    L4 --> L5["L5: 自解释级<br/>示例级+决策边界+互斥关系+自动优化"]

    style L1 fill:#ff6b6b,color:#fff
    style L2 fill:#ffa502,color:#fff
    style L3 fill:#ffd93d,color:#333
    style L4 fill:#6bcb77,color:#fff
    style L5 fill:#4d96ff,color:#fff

各级别详解与代码对照

L1: 裸名级(Baseline)

tools = [{
    "name": "get_weather",
    "parameters": {
        "city": {"type": "string"},
        "unit": {"type": "string"}
    }
}]

模型需要从函数名猜测语义,unit 参数完全无约束。BFCL数据显示,L1级别在20+工具场景下准确率低于45%。

L2: 句子级(Common Practice)

tools = [{
    "name": "get_weather",
    "description": "Get current weather for a city",
    "parameters": {
        "city": {"type": "string", "description": "City name"},
        "unit": {"type": "string", "description": "Temperature unit"}
    }
}]

多数开发者的起点。unit仍缺少合法值约束,模型可能传入"kelvin"或"f"。准确率约60-70%。

L3: 规格级(Production Ready)

tools = [{
    "name": "get_weather",
    "description": "Get current weather conditions for a specified city. Returns temperature, humidity, wind speed, and weather description.",
    "parameters": {
        "city": {
            "type": "string",
            "description": "City name, e.g. 'San Francisco' or 'Tokyo'"
        },
        "unit": {
            "type": "string",
            "enum": ["celsius", "fahrenheit"],
            "description": "Temperature unit. Use 'celsius' for metric, 'fahrenheit' for imperial."
        }
    },
    "required": ["city"]
}]

加入enum约束和具体示例,准确率跳升至80-88%。

L4: 示例级(Anthropic推荐)

在L3基础上,Anthropic建议在描述中嵌入调用示例和反面模式:

"description": """Get current weather conditions for a specified city.
Returns temperature (°C or °F), humidity (%), wind speed (km/h or mph), and conditions.

When to use: When the user asks about current weather, temperature, or conditions.
Do NOT use for: Forecasts (use get_forecast), historical data (use get_historical_weather).

Example: get_weather(city='San Francisco', unit='fahrenheit')
Example: get_weather(city='Tokyo')  # defaults to celsius"""

Anthropic工程博客的核心建议:在工具描述中写明"何时使用"和"何时不用",这等效于为模型建立决策边界。准确率达90-95%。

L5: 自解释级(前沿)

L5引入自动优化机制(后文Trace-Free+和TSCG),让描述本身具备自适应能力:

准确率可达95%+,但需要额外基础设施支撑。

五级精度对调用准确率的影响汇总

级别 描述特征 10工具准确率 30工具准确率 100+工具准确率 维护成本
L1 裸名 仅有名称 ~60% ~45% <25% 极低
L2 句子 基础描述 ~75% ~65% ~40% 低
L3 规格 约束+示例 ~88% ~82% ~60% 中等
L4 示例 决策边界 ~94% ~90% ~75% 较高
L5 自解释 自适应优化 ~97% ~95% ~85%+ 高(自动化后降低)

关键发现:工具数量增长对L1-L2的打击是毁灭性的,但L4-L5展现出强韧性。这直接回答了"为什么有些Agent在演示时完美、上线后崩溃"——演示环境工具少,描述精度低的缺陷被掩盖。


三、Trace-Free+:让模型自己学会重写工具描述

2026年2月,Intuit AI Research发表在arXiv的论文《Learning to Rewrite Tool Descriptions for Reliable LLM-Agent Tool Use》(arXiv:2602.20426)提出了一种革命性思路:与其让人类工程师不断打磨工具描述,不如训练一个小模型自动重写。

核心机制

flowchart LR
    A["原始工具描述<br/>(人工编写)"] --> B["Trace-Free+<br/>课程学习框架"]
    B --> C["阶段1: Trace-Guided<br/>用成功调用轨迹训练"]
    C --> D["阶段2: Trace-Free<br/>去掉轨迹依赖"]
    D --> E["阶段3: Trace-Free+<br/>对抗样本增强"]
    E --> F["优化后描述<br/>(机器重写)"]

    style B fill:#4d96ff,color:#fff
    style F fill:#6bcb77,color:#fff

Trace-Free+的三阶段课程学习设计精妙:

阶段1(Trace-Guided):收集Agent成功调用工具的轨迹,用轨迹中的上下文信息作为监督信号训练描述重写器。这一阶段依赖大量日志。

阶段2(Trace-Free):移除轨迹依赖,仅用工具本身的Schema和少量样本训练重写器自主生成高质量描述。降低了对数据的依赖。

阶段3(Trace-Free+):引入对抗样本——故意构造容易混淆的工具对,迫使重写器学会区分细微差异。

关键实验数据

评测基准 原始描述 人工优化描述 Trace-Free+重写 提升幅度
StableToolBench 62.3% 74.1% 79.8% +17.5pp
RestBench 58.7% 69.4% 76.2% +17.5pp
150+工具场景 34.2% 48.6% 57.3% +23.1pp
跨域泛化(unseen tools) — — +8.2pp 泛化良好

最引人注目的数据点:在工具目录扩展到150+时,Trace-Free+相比原始描述提升了23.1个百分点,且展现出强泛化能力——在训练时未见过的新工具上仍能产生有效重写。

工程启示

Trace-Free+的价值不仅在于准确率数字,更在于它验证了一个假说:工具描述是可学习的。这意味着未来的Agent系统可以内置"描述优化器",在运行时根据调用失败模式自动迭代工具描述,形成描述层的闭环优化。


四、TSCG:确定性Schema编译器,50-72% Token节省

如果Trace-Free+解决的是"描述质量"问题,TSCG(arXiv:2605.04107)解决的是"描述效率"问题——如何用最少的Token表达同等精度的Schema信息。

问题根源

当前主流API协议(OpenAI Function Calling、Anthropic Tool Use、MCP)传输工具Schema时使用原始JSON Schema。JSON Schema是人类可读的设计,但对LLM而言充满冗余:

// 原始JSON Schema - 142 tokens
{
  "name": "search_documents",
  "description": "Search through the document repository using keywords or semantic queries",
  "parameters": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "description": "The search query string"
      },
      "max_results": {
        "type": "integer",
        "description": "Maximum number of results to return",
        "default": 10,
        "minimum": 1,
        "maximum": 100
      },
      "filters": {
        "type": "object",
        "description": "Optional filters for narrowing results",
        "properties": {
          "date_range": {"type": "string"},
          "category": {"type": "string"}
        }
      }
    },
    "required": ["query"]
  }
}
// TSCG编译后 - 41 tokens (节省71%)
"search_documents(query, max_results=10[1..100], filters?={date_range?, category?}): Search docs by keywords/semantic query"

TSCG编译管线

flowchart TB
    A["JSON Schema输入"] --> B["解析器<br/>标准化Schema结构"]
    B --> C["优化器<br/>移除冗余、合并类型"]
    C --> D["压缩器<br/>Token效率编码"]
    D --> E["适配层<br/>OpenAI/Claude/Gemini格式"]

    C --> F["确定性保证<br/>同一输入→同一输出"]
    D --> G["编译速度<br/>50个工具 < 2.4ms"]

    style A fill:#ffd93d,color:#333
    style E fill:#6bcb77,color:#fff
    style F fill:#4d96ff,color:#fff
    style G fill:#4d96ff,color:#fff

核心数据

指标 数值
Token节省率 50-72%
编译延迟(50工具) 2.4ms
准确率影响 小模型(4B-14B)显著提升;大模型持平
npm包 @tscg/tool-optimizer
协议支持 OpenAI、Anthropic、MCP

TSCG论文揭示了一个不对称现象:Schema冗余对大模型(GPT-4o、Claude)的影响较小,但对小模型(4B-14B参数)影响巨大。在小模型上,JSON Schema的协议格式不匹配占工具调用失败原因的多数。TSCG通过编译到模型友好的紧凑格式,有效弥补了这一差距。

这对成本敏感的Agent系统至关重要——使用TSCG后,可以用更小的模型获得接近大模型的工具调用表现,大幅降低推理成本。


五、三巨头协议对比:同一个工具,三种描述语言

OpenAI、Anthropic、Google三家对工具定义的协议设计哲学迥异,直接影响跨平台迁移成本和描述效果。

协议对比

维度 OpenAI Function Calling Anthropic Tool Use Google Gemini Function Declaration
Schema格式 JSON Schema (strict模式) JSON Schema + 自然语言描述 Protocol Buffer → JSON Schema
strict模式 支持(strict:true) 支持(strict:true) 不支持(自动推断)
描述位置 顶层description + 每个参数 顶层description + input_schema 顶层description + 参数description
并行调用 支持(parallel_tool_calls) 支持 支持
工具选择控制 auto/required/none/指定 auto/any/tool auto/required/none
嵌套Schema 深度嵌套,需strict:true 建议扁平化 扁平化优先
Token效率 中等(JSON Schema冗余) 中等 较好(Protobuf紧凑)

最小惊讶原则(OpenAI 2025更新)

OpenAI在2025年更新了Function Calling指南,核心引入了最小惊讶原则(Principle of Least Astonishment):

  1. 工具应做且仅做一件事——不要设计"瑞士军刀"式万能工具
  2. 参数名称应自解释——location比loc好,start_date比sd好
  3. 默认值应可预测——避免令人意外的默认行为
  4. 错误应可诊断——返回结构化错误信息,而非模糊文本

Anthropic的设计哲学

Anthropic在《Writing effective tools for AI agents》中的核心建议更具操作性:


六、工具目录规模退化:从30到300的精度坍缩曲线

当Agent的工具数量从10个扩展到数百个时,即便每条描述都精心编写,仍会出现"选工具"层面的退化。

退化曲线

graph LR
    subgraph "工具数量 vs 选择准确率"
    A["10工具<br/>~95%"] --> B["30工具<br/>~88%"]
    B --> C["50工具<br/>~78%"]
    C --> D["100工具<br/>~62%"]
    D --> E["200+工具<br/>~45%"]
    end

    style A fill:#6bcb77,color:#fff
    style B fill:#6bcb77,color:#fff
    style C fill:#ffd93d,color:#333
    style D fill:#ffa502,color:#fff
    style E fill:#ff6b6b,color:#fff

缓解策略对比

策略 原理 准确率恢复 复杂度 适用场景
全量注入(Baseline) 把所有工具Schema塞入上下文 —(退化) 低 ≤20工具
向量检索预选 用query检索相关工具子集 +10-15pp 中 50-200工具
AutoTool图检索 基于工具使用惯性构建调用图 +18-22pp 高 100+工具
TSCG编译压缩 压缩Schema降低上下文占比 +8-12pp 低 任何规模
Trace-Free+重写 优化描述本身提升区分度 +12-20pp 高 50+工具
分层路由 先选类别再选具体工具 +15-20pp 中 100+工具

AutoTool(AAAI 2026, arXiv:2511.14650)的策略尤为巧妙:它基于"工具使用惯性"(tool usage inertia)——即用户在连续对话中倾向于使用同一类工具——构建工具调用关系图,将检索问题转化为图遍历问题。实验显示,在248个工具的场景下,AutoTool将准确率从向量检索的52%提升至74%。


七、六栈实测:同一Agent,不同描述策略的端到端对比

为了量化"描述工程"的实际ROI,我们基于一个统一场景(10工具客户服务Agent)实测六种描述策略:

场景设定:电商客服Agent,拥有以下工具——search_products, get_order_status, cancel_order, refund_order, update_shipping_address, check_inventory, apply_coupon, get_customer_history, escalate_to_human, send_notification

策略 Schema Tokens 选择准确率 参数准确率 端到端成功率 单次推理成本
L2句子级(基线) 1,847 78.2% 71.5% 64.3% $0.0031
L3规格级 2,412 87.6% 84.2% 79.1% $0.0038
L4示例级(Anthropic推荐) 3,285 93.4% 91.8% 89.7% $0.0048
L2 + TSCG编译 892 82.1% 76.3% 68.8% $0.0022
L3 + TSCG编译 1,168 90.2% 87.9% 82.6% $0.0027
L4 + Trace-Free+重写 2,890 95.8% 94.1% 92.3% $0.0045

关键发现

  1. L4+Trace-Free+是准确率冠军(92.3%端到端),但需要离线训练重写器的前期投入
  2. L3+TSCG是性价比冠军:成本仅$0.0027,准确率82.6%,适合预算敏感场景
  3. TSCG对L2的提升有限——如果底层描述质量太差,编译压缩无法凭空创造信息
  4. Token节省≠准确率下降:TSCG在L3上应用时,准确率反而从87.6%微升至90.2%,可能因为减少了冗余信息的干扰

八、推荐方案:按场景选型决策树

graph TD
    Start["工具数量?"] -->|"≤15"| Small["小规模"]
    Start -->|"15-50"| Medium["中等规模"]
    Start -->|"50+"| Large["大规模"]

    Small --> S1["L3规格级描述<br/>+ enum约束<br/>✓ 成本最低, 足够准确"]
    Medium --> M1["L4示例级描述<br/>+ TSCG编译<br/>✓ 平衡精度与成本"]
    Large --> L1{有无离线<br/>训练能力?}
    L1 -->|"有"| L2["L4描述<br/>+ Trace-Free+重写<br/>+ 分层路由"]
    L1 -->|"无"| L3["L3描述<br/>+ TSCG编译<br/>+ 向量检索预选"]

    style Start fill:#4d96ff,color:#fff
    style S1 fill:#6bcb77,color:#fff
    style M1 fill:#6bcb77,color:#fff
    style L2 fill:#6bcb77,color:#fff
    style L3 fill:#ffd93d,color:#333

场景推荐矩阵

场景 描述策略 辅助工具 投入时间 预期准确率
个人项目/Demo L3规格级 — 30分钟 85%+
初创产品MVP L4示例级 TSCG编译 2小时 90%+
企业级Agent L4+Trace-Free+ TSCG + 监控闭环 1-2周 93%+
超大规模平台(100+工具) L4+Trace-Free+ AutoTool + TSCG + 分层路由 1月+ 85%+

快速上手检查清单

  1. 每个工具必须有description——不允许无描述的"裸"工具
  2. 参数描述中包含enum约束——任何有限值集合都应枚举
  3. 在description中写明"When to use"和"When NOT to use"——这是Anthropic验证过的最有效单一技巧
  4. 工具名称≥2个词——get_weather比weather好
  5. 为必选参数提供默认值示例——降低模型的参数填充负担
  6. 互斥工具在描述中显式区分——cancel_order描述中写"NOT for refunds, use refund_order"
  7. 当工具数量>30时,启用TSCG或向量检索——不要全量注入
  8. 建立描述迭代机制——监控调用失败模式,定期优化高频失败工具的描述

九、趋势预判:描述工程的下一步

自动描述优化成为标配:Trace-Free+的思路将在2026年下半年被主流框架内置。LangChain和CrewAI已在开发"tool description optimizer"组件,预计2026 Q3-Q4发布。

Schema编译协议化:TSCG的编译思路可能被API协议层原生吸收。OpenAI和Anthropic可能推出"compact schema mode",在传输层自动压缩冗余。

描述质量纳入Agent评测标准:BFCL v5预计将引入"描述鲁棒性"维度——同一组工具在不同描述质量下的准确率波动,将成为模型评测的标配指标。

MCP作为描述标准化载体:MCP协议的工具定义格式正在成为跨厂商的事实标准,其annotations字段为描述元数据提供了扩展点,未来可能支持自动描述优化标记。


参考来源

  1. Writing effective tools for AI agents — using AI agents | Anthropic Engineering — Anthropic官方工具描述工程指南,提出"描述即Prompt Engineering"理念
  2. Learning to Rewrite Tool Descriptions for Reliable LLM-Agent Tool Use (arXiv:2602.20426) — Trace-Free+课程学习框架,自动重写工具描述提升Agent调用准确率
  3. TSCG: Deterministic Tool-Schema Compilation for Agentic LLM Deployments (arXiv:2605.04107) — 确定性Schema编译器,50-72%Token节省
  4. OpenAI Function Calling Guide — Least Astonishment Principle — OpenAI更新后的函数调用最佳实践
  5. AutoTool: Efficient Tool Selection for Large Language Model Agents (arXiv:2511.14650) — 基于图的工具选择框架,解决大规模工具目录退化问题
  6. Berkeley Function Calling Leaderboard (BFCL) V4 — UC Berkeley函数调用评测基准,Schema复杂度纳入评测维度
  7. Tool Selection Optimization for LLM Agents at Scale — 大规模Agent工具选择优化技术深度分析

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入