> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tokenlab.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# 構造化出力とツール呼び出し

> すべてのモデルが同じ契約をサポートしているとは限らないため、JSONモード、関数ツール、およびネイティブツールルートを使用します。

構造化出力とツール呼び出しは、ルート固有の契約です。TokenLabは複数の公開APIフォーマットを転送するため、最も安全なプロダクションパターンは、各プロバイダネイティブツールの形状を所有するルートに保持し、モデル出力を自分のアプリケーションで検証することです。

## ルートを選択する

| 必要                     | ルート                                     | この形状を使用                                            |
| ---------------------- | --------------------------------------- | -------------------------------------------------- |
| ポータブルJSONオブジェクトレスポンス   | `/v1/chat/completions`                  | `response_format: {"type": "json_object"}`         |
| OpenAI互換の関数呼び出し        | `/v1/chat/completions`                  | `tools: [{ "type": "function", "function": ... }]` |
| OpenAIレスポンツール          | `/v1/responses`                         | レスポンス `tools`, `tool_choice`, および `text` フィールド     |
| Claudeネイティブツールの使用または思考 | `/v1/messages`                          | Anthropic Messagesツールスキーマ                          |
| Gemini関数宣言または組み込みツール   | `/v1beta/models/:model:generateContent` | Geminiネイティブ `tools` およびコンテンツ部分                     |

プロバイダネイティブの組み込みツールを異なるルートを通じて送信し、TokenLabが静かにそれらを翻訳することを期待しないでください。

## JSONモード

ポータブル構造化レスポンスのために、Chat Completions JSONモードから始めます：

```json theme={null}
{
  "model": "gpt-5.4",
  "messages": [
    {
      "role": "user",
      "content": "都市と天気を含むJSONオブジェクトを返してください。"
    }
  ],
  "response_format": { "type": "json_object" }
}
```

Chat Completionsのための安定した共有検証は、`text` と `json_object` を受け入れます。`json_schema`、`strict`、およびプロバイダ固有のスキーマ強制は、一部の上流ルートや変換パスに存在する可能性がありますが、すべてのTokenLabルートとモデルに対する包括的な約束ではありません。依存する前に、選択したモデルに対してそれらを検証してください。

常にサーバー上で返されたJSONを解析し、検証してください。JSONモードは形状を改善しますが、アプリケーションレベルのスキーマ検証を置き換えるものではありません。

## ツール呼び出しループ

TokenLabはあなたの関数を実行しません。あなたのアプリケーションがループを所有します：

1. メッセージとツール定義を送信します。
2. モデルのレスポンスから `tool_calls`、`function_call`、Anthropic `tool_use`、またはGemini関数呼び出し部分を読み取ります。
3. 自分のバックエンドでツールを実行します。
4. 同じルートによって要求される形式でツールの結果を追加します。
5. モデルが最終的な答えを返すまで会話を続けます。

ツールループ全体で同じルートを維持してください。Chat Completions、Responses、Messages、およびGeminiフォーマットを1つの会話で混合すると、通常は微妙な状態やスキーマのバグが発生します。

## Chat Completionsの例

```bash theme={null}
curl https://api.tokenlab.sh/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.4",
    "messages": [
      {
        "role": "user",
        "content": "名前とメールをJSONとして抽出してください。必要に応じて、顧客を検索してください。"
      }
    ],
    "response_format": { "type": "json_object" },
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "lookup_customer",
          "description": "メールで顧客を検索する",
          "parameters": {
            "type": "object",
            "properties": {
              "email": { "type": "string" }
            },
            "required": ["email"]
          }
        }
      }
    ]
  }'
```

## スキーマ設計

* スキーマは小さく明示的に保ちます。大きなネストされたスキーマはトークンを追加し、信頼性を低下させます。
* 製品が継続できない値には必須フィールドを優先します。
* UIやバックエンドが依存する閉じたセットにはenumを使用します。
* モデルが形状に苦労している場合は、プロンプトに例を含めます。
* サポートされていないフィールドエラーは契約フィードバックとして扱います。フィールドを削除するか、それを文書化しているネイティブルートを使用します。

## プロダクションチェックリスト

* ルート、モデル、ツール名、およびサニタイズされたスキーマ形状をログに記録します。
* 副作用を実行する前にツール引数を検証します。
* ツール実行前に独自の権限チェックを適用します。
* クライアントの再試行が同じツール呼び出しを繰り返す可能性がある場合、ツール実行を冪等にします。
* ツールから返された秘密をモデルが見えるメッセージにログしないでください。

## APIリファレンス

| トピック           | リファレンス                                                      |
| -------------- | ----------------------------------------------------------- |
| マルチフォーマットAPI   | [マルチフォーマットAPI](/ja/guides/api-formats)                      |
| チャット完了の作成      | [チャット完了の作成](/ja/api-reference/chat/create-completion)       |
| レスポンスの作成       | [レスポンスの作成](/ja/api-reference/responses/create-response)     |
| メッセージの作成       | [メッセージの作成](/ja/api-reference/messages/create-message)       |
| Geminiコンテンツの生成 | [Geminiコンテンツの生成](/ja/api-reference/gemini/generate-content) |
