Anthropic Claude モデルを使用した構造化出力

構造化出力を使用すると、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 で返されます。

この例では、次の構造化出力フィールドを使用します。各フィールドの詳細については、リクエスト フィールドのセクションをご覧ください。

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_schema
  • tools[].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 スキーマ の制限事項 のドキュメントをご覧ください。