厳密なツール使用
文法制約付きサンプリングにより、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 に検証済みのインプットを含むツール使用ブロック
{
"type": "tool_use",
"name": "get_weather",
"input": {
"location": "San Francisco, CA"
}
}保証される内容:
- ツールの
inputはinput_schemaに厳密に従います - ツールの
nameは常に有効です(提供されたツールまたはサーバーツールのいずれか)
仕組み
ツールスキーマを定義する
ツールの
input_schema用のJSONスキーマを作成します。スキーマは標準のJSON Schema形式を使用しますが、いくつかの制限があります(JSON Schemaの制限事項を参照)。strict: true を追加する
ツール定義のトップレベルプロパティとして、
name、description、input_schemaと並べて"strict": trueを設定します。ツール呼び出しを処理する
Claudeがツールを使用すると、
tool_useブロックのinputフィールドはinput_schemaに厳密に従い、nameは常に有効になります。
コンピュータ使用およびブラウザ使用のツールセットエントリ(computer_toolset_20260801 および browser_toolset_20260801)は strict: true を受け付けません。いずれかのエントリにこれを設定したリクエストは拒否されます。
一般的なユースケース
ツールパラメータがスキーマに正確に一致することを保証します。
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 定義を文法にコンパイルします。ツールスキーマは最後の使用から最大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?