<!-- title: 工具描述即编程：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的评测数据，我们将工具描述精度分为五个等级：

```mermaid
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）**

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

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

**L2: 句子级（Common Practice）**

```python
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）**

```python
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建议在描述中嵌入调用示例和反面模式：

```python
"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）提出了一种革命性思路：**与其让人类工程师不断打磨工具描述，不如训练一个小模型自动重写**。

### 核心机制

```mermaid
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
// 原始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"]
  }
}
```

```json
// TSCG编译后 - 41 tokens (节省71%)
"search_documents(query, max_results=10[1..100], filters?={date_range?, category?}): Search docs by keywords/semantic query"
```

### TSCG编译管线

```mermaid
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》中的核心建议更具操作性：

- **描述中包含"When to use"和"When NOT to use"**——建立决策边界
- **用例子替代抽象描述**——`"city": "San Francisco"` 比 `"city": "a string representing the city"` 更有效
- **互斥工具显式声明**——如果`get_weather`和`get_forecast`容易混淆，在描述中写明区别
- **工具名称应反映自然任务边界**——`execute_database_operation`太泛，应拆为`query_database`和`insert_record`

---

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

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

### 退化曲线

```mermaid
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%，可能因为减少了冗余信息的干扰

---

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

```mermaid
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](https://www.anthropic.com/engineering/writing-tools-for-agents) — Anthropic官方工具描述工程指南，提出"描述即Prompt Engineering"理念
2. [Learning to Rewrite Tool Descriptions for Reliable LLM-Agent Tool Use (arXiv:2602.20426)](https://arxiv.org/abs/2602.20426) — Trace-Free+课程学习框架，自动重写工具描述提升Agent调用准确率
3. [TSCG: Deterministic Tool-Schema Compilation for Agentic LLM Deployments (arXiv:2605.04107)](https://arxiv.org/abs/2605.04107) — 确定性Schema编译器，50-72%Token节省
4. [OpenAI Function Calling Guide — Least Astonishment Principle](https://developers.openai.com/api/docs/guides/function-calling) — OpenAI更新后的函数调用最佳实践
5. [AutoTool: Efficient Tool Selection for Large Language Model Agents (arXiv:2511.14650)](https://arxiv.org/abs/2511.14650) — 基于图的工具选择框架，解决大规模工具目录退化问题
6. [Berkeley Function Calling Leaderboard (BFCL) V4](https://gorilla.cs.berkeley.edu/leaderboard.html) — UC Berkeley函数调用评测基准，Schema复杂度纳入评测维度
7. [Tool Selection Optimization for LLM Agents at Scale](https://ajing.github.io/posts/2026-01-10-tool-selection-optimization-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学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
