F2.2 F2

定义工具:名称、描述和输入 Schema

工具定义告诉模型一个工具能做什么、什么时候该用、接受哪些参数。定义由三个字段组成,其中一个在工具选择时的重要性远超其他两个。

三个要素

  • name — 技术标识符。模型调用工具时,tool_use block 里出现的就是它。保持简短、有描述性、且唯一。
  • description — 自然语言解释:这个工具做什么、什么时候用、和类似工具有什么区别。这是模型在多个工具之间做选择时的核心依据。
  • input_schema — 一个 JSON Schema 对象,定义参数:类型是什么、哪些是必填的、每个参数的说明。

description 才是选择机制

模型读 description 来决定用哪个工具。一个敷衍的描述比如 “Gets customer data”,在多个工具都可能适用时会让模型无从选择。好的描述应该写清楚:

  • 工具做什么
  • 期望什么输入(带例子)
  • 返回什么
  • 什么时候用它而不是类似工具
{
  "name": "get_stock_price",
  "description": "Get the current stock price for a given ticker symbol. Input: ticker string (e.g., 'AAPL'). Returns: current price, daily change, volume. Use for real-time price queries. For historical data, use get_price_history instead.",
  "input_schema": { ... }
}

最后那句——“For historical data, use get_price_history instead”——重要得出乎意料。它画了一条边界,防止模型把请求路由到错误的工具。

input_schema 只管输入

Schema 用 JSON Schema 格式定义参数。列在 required 数组里的是必填项,其余默认可选。你可以给每个属性加 description 字段,帮助模型理解每个参数期望的内容。

Schema 有一件事不做:定义工具的输出格式。Claude API 没有输出 schema 校验。Schema 约束的是进去的东西,不是出来的东西。


一句话总结: description 字段是模型选择工具的依据——把精力花在写清晰、划边界的描述上,而不只是起个聪明的名字。