構造化出力を使用すると、Claude モデルで生成される出力を特定の JSON スキーマに正確に準拠するように制限できます。これは、Claude モデルからのレスポンスが、ダウンストリームのアプリケーション、データベース、処理パイプラインに必要な正確な形式で常に提供されるようにする場合に便利です。
構造化出力には、次の 2 つの補完的な機能が用意されています。これらの機能は、同じリクエストで単独で使用することも、組み合わせて使用することもできます。
- JSON 出力 (
output_config.format): モデルのテキスト レスポンスを、指定したスキーマに一致する JSON オブジェクトに制限します。テキストから構造化データを抽出する場合、構造化レポートを生成する場合、API レスポンスをフォーマットする場合に使用します。 - 厳密なツール使用 (
tools[].strict): モデルがツールに渡す引数がツールのinput_schemaと一致することを保証します。エージェント ワークフローでタイプセーフな関数呼び出しが必要な場合に使用します。
詳細については、Anthropic の Claude を使用した構築: 構造化 出力 と 厳密なツール 使用 のドキュメントをご覧ください。
サポートされている Anthropic Claude モデル
Gemini Enterprise Agent Platform は、次の Anthropic Claude モデルの構造化出力をサポートしています。
- Claude Opus 4.7
- Claude Sonnet 4.6
- Claude Opus 4.6
- (近日公開)Claude Opus 4.5
- (近日公開)Claude Sonnet 4.5
- (近日公開)Claude Haiku 4.5
構造化出力へのアクセスを制御する
デフォルトでは、構造化出力は組織のポリシー制約 constraints/vertexai.allowedPartnerModelFeatures によって無効になっています。構造化出力を有効にするには、この制約を構成して structured_outputs 機能を明示的に許可する必要があります。
また、組織のポリシー制約 constraints/vertexai.allowedModels を構成して、Claude
モデルへのアクセスを制限することもできます。
組織のポリシー制約の構成の詳細については、 Model Garden モデルへのアクセスを制御するをご覧ください。
構造化出力リクエストを送信する
JSON 出力をリクエストするには、パブリッシャー モデル エンドポイントに POST
リクエストを送信し、リクエスト本文にoutput_config パラメータを含めます。output_config
パラメータは、モデルのレスポンスが準拠する必要がある JSON スキーマを指定します。
REST
次のサンプルは、構造化されていないメールから構造化された連絡先情報を抽出する Agent Platform API
にリクエストを送信する方法を示しています。レスポンスは、name、email、plan_interest、demo_requested
フィールドを含む JSON オブジェクトに制限されます。
リクエストのデータを使用する前に、 次のように置き換えます。
- LOCATION: Anthropic Claude モデルをサポートするリージョン。グローバル エンドポイントを使用するには、グローバル エンドポイントを指定するをご覧ください。
- MODEL:サポートされている
Claude モデル(
claude-opus-4-7など)。 - ROLE: メッセージに関連付けられたロール。
userまたはassistantを指定できます。 最初のメッセージでは、userロールを使用する必要があります。Claude モデルはuserとassistantのターンを交互に操作します。最後のメッセージがassistantロールを使用する場合、その回答 の内容は、そのメッセージの内容の直後に続きます。これを使用して、モデルの回答の一部を制限できます。 - CONTENT:
userまたはassistantのメッセージの内容( テキストなど)。例:Extract the key information from this email: John Smith (john@example.com) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm. - MAX_TOKENS:
レスポンスで生成できるトークンの最大数。トークンは約 3.5 文字です。100 トークンは約 60~80 語に相当します。
レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。
- STREAM: レスポンスがストリーミングされるかどうかを指定するブール値。レスポンスをストリーミングする場合は
true、すべてのレスポンスを一度に戻すにはfalseに設定します。通常、構造化出力はfalseで返されます。
この例では、次の構造化出力フィールドを使用します。各フィールドの詳細については、リクエスト フィールドのセクションをご覧ください。
output_config: モデルのレスポンスの構造を制御する最上位の構成ブロック。output_config.format.type: 指定された スキーマに準拠する JSON オブジェクトにレスポンスを制限するには、json_schemaに設定します。output_config.format.schema: モデルのレスポンスに必要な構造を定義する JSON スキーマ。スキーマは、 サポートされている JSON スキーマのサブセットに準拠している必要があります。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict
リクエストの本文(JSON):
{
"anthropic_version": "vertex-2023-10-16",
"messages": [
{
"role": "ROLE",
"content": "CONTENT"
}
],
"max_tokens": MAX_TOKENS,
"stream": STREAM,
"output_config": {
"format": {
"type": "json_schema",
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"email": {"type": "string"},
"plan_interest": {"type": "string"},
"demo_requested": {"type": "boolean"}
},
"required": ["name", "email", "plan_interest", "demo_requested"],
"additionalProperties": false
}
}
}
}
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict"
PowerShell
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。content ブロックの text フィールドには、output_config で指定したスキーマに準拠する JSON 文字列が含まれています。
リクエスト フィールド
次のフィールドは JSON 出力に固有のものです。他のリクエスト フィールドについては、Claude メッセージ API リファレンスをご覧ください。
output_config: モデルのレスポンスの構造を制御する最上位の構成ブロック。output_config.format: 出力の形式定義。json_schemaタイプのみがサポートされています。output_config.format.type: 適用する出力形式のタイプ。レスポンスを JSON オブジェクトに制限するには、json_schemaに設定します。output_config.format.schema: モデルのレスポンスに必要な構造を定義する JSON スキーマ。構造化出力は、標準の JSON スキーマをサポートしていますが、オブジェクトにadditionalPropertiesをfalseに設定する必要がある、数値または文字列の長さの制約をサポートしていないなどの制限があります。サポートされている機能とサポートされていない機能の一覧については、 Anthropic の JSON スキーマ の制限事項 のドキュメントをご覧ください。通常、スキーマ内では次のものを指定します。type: このレベルの値の JSON タイプ(ルート スキーマの場合はobjectが最も一般的です)。properties: フィールド名とその型定義のマップ。モデルが返す必要のある各フィールドを記述します。required: モデルがレスポンスに含める必要のあるプロパティ名のリスト。additionalProperties:falseに設定すると、モデルがpropertiesで宣言されていないフィールドを含めるのを防ぐブール値。
厳密なツール使用を使用する
厳密なツール使用により、モデルがツールに渡す引数がツールの input_schema
と一致することが保証されます。厳格モードを使用しない場合、モデルは型が正しくない引数(2 ではなく "2" など)を使用してツールを呼び出したり、必須フィールドを省略したりする可能性があります。これにより、ダウンストリーム関数が中断し、再試行ロジックが必要になることがあります。厳格モードを有効にすると、API は文法制約付きサンプリングを使用して、次のことを保証します。
- ツールの
nameは、常に指定したツールのいずれかになります。 - ツールの
inputは、常にツールのinput_schemaに準拠します。
ツールのパラメータの検証、エージェント ワークフローの構築、タイプセーフな関数呼び出しの確保、ネストされたプロパティを持つ複雑なツールの処理を行う場合は、厳密なツール使用を使用します。
厳密なツール使用を有効にするには、ツールの定義で、name、description、input_schemaとともに、最上位フィールドとして"strict": trueを設定します。
REST
次のサンプルは、厳密な get_weather ツールを定義する Agent Platform API
にリクエストを送信する方法を示しています。モデルは、location 文字列と、celsius または fahrenheit のいずれかのオプションの unit を使用してツールを呼び出すことが保証されます。
リクエストのデータを使用する前に、 次のように置き換えます。
- LOCATION: Anthropic Claude モデルをサポートするリージョン。グローバル エンドポイントを使用するには、グローバル エンドポイントを指定するをご覧ください。
- MODEL:サポートされている
Claude モデル(
claude-opus-4-7など)。 - ROLE: メッセージに関連付けられたロール。最初のメッセージでは、
userロールを使用する必要があります。 - CONTENT:
userまたはassistantのメッセージの内容( テキストなど)。例:What is the weather in San Francisco? - MAX_TOKENS:
レスポンスで生成できるトークンの最大数。トークンは約 3.5 文字です。100 トークンは約 60~80 語に相当します。
レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。
- STREAM: レスポンスがストリーミングされるかどうかを指定するブール値。レスポンスをストリーミングする場合は
true、すべてのレスポンスを一度に戻すにはfalseに設定します。
この例では、次の厳密なツール使用フィールドを使用します。各フィールドの詳細については、厳密なツール使用フィールドのセクションをご覧ください。
tools[].strict:trueに設定すると、ツールの文法制約付きサンプリングが有効になるブール値。モデルは、 `input_schema` に一致する引数を使用してツールを呼び出すことが保証されます。input_schematools[].input_schema: モデルがツールに渡すことができる引数を定義する JSON スキーマ。strictがtrueの場合、スキーマは JSON 出力のoutput_configスキーマと同じ サポート対象の JSON スキーマ サブセット に準拠している必要があります。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict
リクエストの本文(JSON):
{
"anthropic_version": "vertex-2023-10-16",
"messages": [
{
"role": "ROLE",
"content": "CONTENT"
}
],
"max_tokens": MAX_TOKENS,
"stream": STREAM,
"tools": [
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"strict": true,
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, for example San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"],
"additionalProperties": false
}
}
]
}
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict"
PowerShell
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。tool_use コンテンツ ブロックには、キーと値の型がツールの
input_schema と一致することが保証されている input フィールドが含まれています。
厳密なツール使用フィールド
次のフィールドは、厳密なツール使用に固有のものです。他のツール定義フィールドについては、Anthropic のツールを定義するのドキュメントをご覧ください。
tools[].strict:trueに設定すると、ツールの文法制約付きサンプリングが有効になるブール値。strictがtrueの場合、モデルのツール入力はinput_schemaのスキーマと一致するように制限されます。デフォルト値はfalseです。tools[].input_schema: モデルがツールに渡すことができる引数を定義する JSON スキーマ。strictがtrueの場合、スキーマは JSON 出力で使用する JSON スキーマ サブセットに準拠している必要があります。特に、次のことを行う必要があります。- スキーマ内のすべてのオブジェクトで
additionalPropertiesをfalseに設定します。 required配列内のすべてのプロパティを一覧表示します。
サポートされている機能とサポートされていない機能の一覧については、Anthropic の JSON スキーマ の制限事項 のドキュメントをご覧ください。
- スキーマ内のすべてのオブジェクトで