Claude Platform Docs
Messagesツール

厳密なツール使用

文法制約付きサンプリングにより、ClaudeのツールインプットにJSON Schemaへの準拠を強制します。

ツール定義に strict: true を設定すると、モデルのトークンサンプリングをスキーマに適合する出力に制約することで(「grammar-constrained sampling」(文法制約付きサンプリング)と呼ばれる手法)、ClaudeのツールインプットがJSON Schemaに一致することが保証されます。このページでは、厳密モードがエージェントにとって重要である理由、有効化の方法、および一般的なユースケースについて説明します。サポートされているJSON Schemaのサブセットについては、JSON Schemaの制限事項を参照してください。非厳密スキーマのガイダンスについては、ツールの定義を参照してください。

「strict tool use」(厳密なツール使用)はツールパラメータを検証し、Claudeが正しい型の引数で関数を呼び出すことを保証します。次のような場合に厳密なツール使用を利用してください。

  • ツールパラメータを検証する
  • エージェント型ワークフローを構築する
  • 型安全な関数呼び出しを保証する
  • ネストされたプロパティを持つ複雑なツールを扱う

厳密なツール使用がエージェントにとって重要な理由

信頼性の高いエージェント型システムを構築するには、スキーマへの準拠が保証されている必要があります。厳密モードがない場合、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"
  }
}

保証される内容:

  • ツールの inputinput_schema に厳密に従います
  • ツールの name は常に有効です(提供されたツールまたはサーバーツールのいずれか)

仕組み

  1. ツールスキーマを定義する

    ツールの input_schema 用のJSONスキーマを作成します。スキーマは標準のJSON Schema形式を使用しますが、いくつかの制限があります(JSON Schemaの制限事項を参照)。

  2. strict: true を追加する

    ツール定義のトップレベルプロパティとして、namedescriptioninput_schema と並べて "strict": true を設定します。

  3. ツール呼び出しを処理する

    Claudeがツールを使用すると、tool_use ブロックの input フィールドは input_schema に厳密に従い、name は常に有効になります。

コンピュータ使用およびブラウザ使用のツールセットエントリ(computer_toolset_20260801 および browser_toolset_20260801)は strict: true を受け付けません。いずれかのエントリにこれを設定したリクエストは拒否されます。

一般的なユースケース

データ保持

厳密なツール使用は、構造化出力と同じパイプラインを使用して、ツールの input_schema 定義を文法にコンパイルします。ツールスキーマは最後の使用から最大24時間、一時的にキャッシュされます。プロンプトとレスポンスはAPIレスポンスを超えて保持されることはありません。

厳密なツール使用はHIPAA適格ですが、「protected health information」(保護対象医療情報)、すなわちPHIをツールスキーマ定義に含めてはなりません。APIはコンパイル済みスキーマをメッセージコンテンツとは別にキャッシュしており、これらのキャッシュされたスキーマにはプロンプトやレスポンスと同じPHI保護が適用されません。input_schema のプロパティ名、enum 値、const 値、または pattern 正規表現にPHIを含めないでください。PHIは、HIPAAの保護措置の下で保護されるメッセージコンテンツ(プロンプトとレスポンス)にのみ含めるようにしてください。

すべての機能におけるZDRおよびHIPAAの適格性については、APIとデータ保持を参照してください。

次のステップ

特定のURLからコンテンツを取得して読み取り、ライブのWebコンテンツをClaudeのコンテキストに取り込みます。

ターンをまたいでツール定義をキャッシュし、コストとレイテンシを削減します。

同じ文法制約付きサンプリングを使用して、検証済みのJSONレスポンスを取得します。

ツールスキーマを指定し、効果的な説明を記述し、Claudeがツールを呼び出すタイミングを制御します。

Was this page helpful?