コアガイド
構造化出力とツール呼び出し
すべてのモデルが同じ契約をサポートしているとは限らないため、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モードから始めます:
{
"model": "gpt-5.6-terra",
"messages": [
{
"role": "user",
"content": "都市と天気を含むJSONオブジェクトを返してください。"
}
],
"response_format": { "type": "json_object" }
}Chat Completionsのための安定した共有検証は、text と json_object を受け入れます。json_schema、strict、およびプロバイダ固有のスキーマ強制は、一部の上流ルートや変換パスに存在する可能性がありますが、すべてのTokenLabルートとモデルに対する包括的な約束ではありません。依存する前に、選択したモデルに対してそれらを検証してください。
常にサーバー上で返されたJSONを解析し、検証してください。JSONモードは形状を改善しますが、アプリケーションレベルのスキーマ検証を置き換えるものではありません。
ツール呼び出しループ
TokenLabはあなたの関数を実行しません。あなたのアプリケーションがループを所有します:
- メッセージとツール定義を送信します。
- モデルのレスポンスから
tool_calls、function_call、Anthropictool_use、またはGemini関数呼び出し部分を読み取ります。 - 自分のバックエンドでツールを実行します。
- 同じルートによって要求される形式でツールの結果を追加します。
- モデルが最終的な答えを返すまで会話を続けます。
ツールループ全体で同じルートを維持してください。Chat Completions、Responses、Messages、およびGeminiフォーマットを1つの会話で混合すると、通常は微妙な状態やスキーマのバグが発生します。
Chat Completionsの例
curl https://api.tokenlab.sh/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-terra",
"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 |
| チャット完了の作成 | チャット完了の作成 |
| レスポンスの作成 | レスポンスの作成 |
| メッセージの作成 | メッセージの作成 |
| Geminiコンテンツの生成 | Geminiコンテンツの生成 |