严格工具使用
通过语法约束采样,强制 Claude 的工具输入符合 JSON Schema。
在工具定义上设置 strict: true,可以通过将模型的令牌采样约束为符合 schema 的输出(一种称为"grammar-constrained sampling"(语法约束采样)的技术),来保证 Claude 的工具输入与您的 JSON Schema 匹配。本页介绍严格模式为何对智能体很重要、如何启用它以及常见用例。有关支持的 JSON Schema 子集,请参阅 JSON Schema 限制。有关非严格 schema 的指导,请参阅定义工具。
"Strict tool use"(严格工具使用)会验证工具参数,确保 Claude 使用类型正确的参数调用您的函数。在以下情况下使用严格工具使用:
- 验证工具参数
- 构建智能体工作流
- 确保类型安全的函数调用
- 处理具有嵌套属性的复杂工具
为什么严格工具使用对智能体很重要
构建可靠的智能体系统需要有保证的 schema 一致性。如果没有严格模式,Claude 可能会返回不兼容的类型("2" 而不是 2)或遗漏必填字段,从而破坏您的函数并导致运行时错误。
严格工具使用保证类型安全的参数:
- 函数每次都能接收到类型正确的参数
- 无需验证和重试工具调用
- 可在大规模下稳定运行的生产级智能体
例如,假设一个预订系统需要 passengers: int。如果没有严格模式,Claude 可能会提供 passengers: "two" 或 passengers: "2"。使用 strict: true 后,响应始终包含 passengers: 2。
快速开始
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[{"role": "user", "content": "What's the weather like in San Francisco?"}],
tools=[
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"strict": True, # Enable strict mode
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The unit of temperature, either 'celsius' or 'fahrenheit'",
},
},
"required": ["location"],
"additionalProperties": False,
},
}
],
)
print(response.content)响应格式: 工具使用块,其经过验证的输入位于 response.content[x].input 中
{
"type": "tool_use",
"name": "get_weather",
"input": {
"location": "San Francisco, CA"
}
}保证:
- 工具
input严格遵循input_schema - 工具
name始终有效(来自所提供的工具或服务器工具)
工作原理
定义您的工具 schema
为工具的
input_schema创建一个 JSON schema。该 schema 使用标准 JSON Schema 格式,但有一些限制(请参阅 JSON Schema 限制)。添加 strict: true
在工具定义中将
"strict": true设置为顶层属性,与name、description和input_schema并列。处理工具调用
当 Claude 使用该工具时,
tool_use块中的input字段严格遵循您的input_schema,并且name始终有效。
计算机使用和浏览器使用工具集条目(computer_toolset_20260801 和 browser_toolset_20260801)不接受 strict: true;在任一条目上设置该属性的请求将被拒绝。
常见用例
确保工具参数与您的 schema 完全匹配:
client = Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Search for flights to Tokyo departing June 1, 2026",
}
],
tools=[
{
"name": "search_flights",
"strict": True,
"input_schema": {
"type": "object",
"properties": {
"destination": {"type": "string"},
"departure_date": {"type": "string", "format": "date"},
"passengers": {
"type": "integer",
"enum": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
},
},
"required": ["destination", "departure_date"],
"additionalProperties": False,
},
}
],
)
print(response)使用有保证的工具参数构建可靠的多步骤智能体:
client = Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Help me plan a trip from New York to Paris for 2 people, departing June 1, 2026",
}
],
tools=[
{
"name": "search_flights",
"strict": True,
"input_schema": {
"type": "object",
"properties": {
"origin": {"type": "string"},
"destination": {"type": "string"},
"departure_date": {"type": "string", "format": "date"},
"travelers": {"type": "integer", "enum": [1, 2, 3, 4, 5, 6]},
},
"required": ["origin", "destination", "departure_date"],
"additionalProperties": False,
},
},
{
"name": "search_hotels",
"strict": True,
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string"},
"check_in": {"type": "string", "format": "date"},
"guests": {"type": "integer", "enum": [1, 2, 3, 4]},
},
"required": ["city", "check_in"],
"additionalProperties": False,
},
},
],
)
print(response)数据保留
严格工具使用采用与结构化输出相同的流水线,将工具 input_schema 定义编译为语法。工具 schema 会自上次使用起临时缓存最多 24 小时。提示和响应在 API 响应之外不会被保留。
严格工具使用符合 HIPAA 资格,但受保护的健康信息(PHI)不得包含在工具 schema 定义中。API 将编译后的 schema 与消息内容分开缓存,这些缓存的 schema 不享有与提示和响应相同的 PHI 保护。请勿在 input_schema 属性名称、enum 值、const 值或 pattern 正则表达式中包含 PHI。PHI 只应出现在消息内容(提示和响应)中,在那里它受 HIPAA 保障措施的保护。
有关所有功能的 ZDR 和 HIPAA 资格,请参阅 API 和数据保留。
后续步骤
从特定 URL 抓取并读取内容,将实时网页内容引入 Claude 的上下文。
跨轮次缓存工具定义,以降低成本和延迟。
使用相同的语法约束采样获取经过验证的 JSON 响应。
指定工具 schema、编写有效的描述,并控制 Claude 何时调用您的工具。
Was this page helpful?