Claude Platform Docs
Messages工具

严格工具使用

通过语法约束采样,强制 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

Output
{
  "type": "tool_use",
  "name": "get_weather",
  "input": {
    "location": "San Francisco, CA"
  }
}

保证:

  • 工具 input 严格遵循 input_schema
  • 工具 name 始终有效(来自所提供的工具或服务器工具)

工作原理

  1. 定义您的工具 schema

    为工具的 input_schema 创建一个 JSON schema。该 schema 使用标准 JSON Schema 格式,但有一些限制(请参阅 JSON Schema 限制)。

  2. 添加 strict: true

    在工具定义中将 "strict": true 设置为顶层属性,与 namedescriptioninput_schema 并列。

  3. 处理工具调用

    当 Claude 使用该工具时,tool_use 块中的 input 字段严格遵循您的 input_schema,并且 name 始终有效。

计算机使用浏览器使用工具集条目(computer_toolset_20260801browser_toolset_20260801)不接受 strict: true;在任一条目上设置该属性的请求将被拒绝。

常见用例

数据保留

严格工具使用采用与结构化输出相同的流水线,将工具 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?