工具定义告诉模型一个工具能做什么、什么时候该用、接受哪些参数。定义由三个字段组成,其中一个在工具选择时的重要性远超其他两个。
三个要素
name— 技术标识符。模型调用工具时,tool_useblock 里出现的就是它。保持简短、有描述性、且唯一。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 字段是模型选择工具的依据——把精力花在写清晰、划边界的描述上,而不只是起个聪明的名字。