GPT-6 Astra 関数呼び出しガイド:スキーマ、検証、リトライ、ツール結果
信頼性の高いGPT-6 Astra関数呼び出しを、厳格なJSONスキーマ、引数の検証、冪等な実行、リトライ、並列呼び出し、構造化された結果とともに実装します。

関数呼び出しにより、GPT-6 Astraはアプリケーションが制御するコードを要求できます。モデルが関数を選択し、引数を提案します。ランタイムがそれらを検証し、操作を実行して結果を返します。信頼性は、巧妙なツールの説明よりも、規律ある実行ループに依存します。
厳格な契約を定義する
OpenAIはstrict: trueを推奨しています。厳密なスキーマではadditionalProperties: falseが必要であり、すべてのプロパティがrequiredに含まれている必要があります。オプションの値はnullを含むユニオンとして表現してください。
const tools = [{ type: "function", name: "lookup_order", description: "ユーザーに表示される1つの注文の現在のステータスを返します。", strict: true, parameters: { type: "object", properties: { order_id: { type: "string", description: "正規の注文ID" }, include_events: { type: ["ブーリアン", "null"] } }, 必須: ["order_id", "include_events"], additionalProperties: false } }];
関数は小さく保ち、名前は具体的にしましょう。多くのモードを持つ大きな`manage_account`ツールは、無効な組み合わせを招き、リスクを隠します。`get_account`、`update_shipping_address`、`close_account`を優先し、重要な操作には承認を設けてください。
## 実行ループ
Responses APIでは、リクエストされた呼び出しが `response.output` 内に `type: "function_call"`、`call_id`、`name`、およびJSON文字列の `arguments` を持つアイテムとして表示されます。アプリケーションは引数を解析して検証し、信頼できるコードを実行した後、対応する `function_call_output` で続行します。
```ts
const first = await client.responses.create({ model: "gpt-6-astra", ツール、 input: "注文ORD-1042はどこですか?" });
const outputs = []; for (const item of first.output) { if (item.type !== "function_call") continue; const args = JSON.parse(item.arguments); const result = await lookupOrder(args); outputs.push({ type: "function_call_output", call_id: item.call_id, output: JSON.stringify(result) }); }
const final = await client.responses.create({ model: "gpt-6-astra", previous_response_id: first.id, input: 出力 });
モデルからの任意の名前を決して実行しないでください。固定のレジストリに対して解決してください。厳格モードでもアプリケーションコードで再度検証してください。スキーマの妥当性は、認可、レコードの存在、ビジネスルールの準拠、安全性を証明するものではありません。
## 便利なツール結果の設計
最も完全な結果を返します。安定した識別子、ステータス、型指定されたフィールド、機械可読なエラーコードを含めてください。データベース行全体やスタックトレースをダンプすることは避けてください。
```json
{
"headers": {
"row1": "列1",
"row2": "列2",
"row3": "列3"
},
"rows": [
{
"row1": "データ1",
"row2": "データ2",
"row3": "データ3"
}
],
"videourl": "https://example.com/video.mp4"
}
{ "ok": false, "error": { "code": "ORDER_NOT_VISIBLE", "message": "発注者のアカウントに注文が見つかりませんでした。", "retryable": false } }
メッセージはモデルの説明を助け、コードはオーケストレーション層の判断を助けます。別のテナントが隠し識別子を所有していることを明かさないでください。
## リトライには2つのポリシーが必要です
Transport retries は API のタイムアウト、429、および一時的な 5xx エラーに対応します。Tool retries は自身の依存関係の障害に対応します。これらを分けてください。
安全な読み取りは通常、指数バックオフとジッターで再試行できます。書き込みには冪等性キーと調整が必要です。`create_refund` の後に接続が切れた場合は、再度呼び出す前に払い戻しが存在するか確認してください。各論理アクションに安定した操作IDを割り当て、結果とともにツール呼び出しIDを保存してください。
モデル単体で再試行が安全かどうかを尋ねないでください。ツールレジストリは、再試行クラス、タイムアウト、副作用レベルを宣言する必要があります。
## 並列呼び出しと順序付け
モデルは複数の関数呼び出しを要求する場合があります。並列実行は、3つの都市の天気を確認するなど、独立した読み取りに便利です。呼び出しBが呼び出しAに依存する場合や、2つの書き込みが同じレコードにアクセスする場合は安全ではありません。
すべての関数呼び出し項目を収集してください。1つだけとは限りません。依存関係を認識する実行エンジンを構築するか、順序が重要な場合は並列動作を無効化/回避してください。各結果はそれぞれの `call_id` を使用して返します。
## コントロールツールの選択
`tool_choice` は、自動選択、ツールの必須化、ツールの禁止、または名前付き関数の強制を許可します。オープンエンドのエージェントには `auto` を使用し、API操作がエンドポイントの明示的な目的である場合はツールを強制し、処理をモデルのみに留める必要がある場合は `none` を選択します。
ユーザー向けの操作では、2段階のパターンが有効です。まず変更案を準備して表示し、その後、別の確認済みツールを実行します。これにより、親しみやすい文章が暗黙の承認になってしまうことを防げます。
## コントラクトをテストする
欠落フィールド、nullオプショナル、無効な列挙型、未認証ID、タイムアウト、重複送信、部分的な障害、複数回の呼び出し、巨大な出力、ツール結果内の悪意のある文字列に対するケースを作成します。最終的な回答が成功を主張するのではなく、障害を正確に反映しているかを評価します。
ログスキーマバージョン、コールID、ツール名、サニタイズ済み引数、所要時間、結果、および再試行回数。シークレットや機密コンテンツをテレメトリに含めないでください。
## スキーマ設計レビューチェックリスト
すべてのツールを公開APIのようにレビューせよ。列挙型は、モデルに文字列を発明させるのではなく、実際にサポートされている値を反映すべきである。日付には宣言されたフォーマットとタイムゾーンが必要である。数値フィールドには単位と範囲が必要である。識別子は正規化されるべきであり、あいまいさを解決できるルックアップステップがある場合、自由形式の顧客名であってはならない。説明には前提条件と、その関数が行わないことを明記すべきである。
`force`、`override`、`skip_checks` などのブール値の罠を避けてください。これらは重要なポリシー判断を、モデルが生成する1ビットに集約してしまいます。例外的な操作が正当なものであるなら、それを別の高リスクツールとして公開し、より強力な認可と承認を要求してください。
バージョン互換性のないコントラクト。実行中のレスポンスチェーンには、古いスキーマによって形成された呼び出しや結果がまだ含まれている可能性があります。エグゼキュータは、サポートされていないバージョンを明示的に拒否し、機密性の高いリクエストを翻訳する方法を推測するのではなく、回復可能なエラーを返す必要があります。
最後に、関数の結果をユーザー向けの主張と比較します。`{ok:false}` を返すツールが「完了」になることは絶対にあってはなりません。自動評価では、呼び出しトレースと最終的な文章の両方を検査する必要があります。なぜなら、操作的に正しいツールレイヤーでも、モデルによって誤って表現される可能性があるからです。
## よくある質問
### 厳格モードはバリデーションコードを排除しますか?
いいえ。構造的な遵守性が向上します。アプリケーションは引き続き、権限、範囲、不変条件、ビジネスポリシーを適用します。
### ツールの出力はJSONでなければならないのですか?
出力フィールドは文字列であるため、JSONは構造化された結果のための実用的な慣例です。契約を一貫して維持してください。
### ツールを強制適用すべき時は?
エンドポイントの目的がその操作を必要とし、ユーザーがそれを承認している場合に限ります。動作を決定的に見せるためだけに、不要な呼び出しを強制しないでください。
### GPT-6 Astraは、私の関数を自分で実行できますか?
いいえ。呼び出し要求を発行し、あなたのアプリケーションが関数を実行して結果を返します。
## 結論
信頼性のある関数呼び出しはプロトコルです:厳格なスキーマ、固定レジストリ、アプリケーション検証、認可、制御された実行、構造化された結果、そして検証済みの継続。書き込みを有効にする前に、冪等性とリトライ分類を追加してください。モデルは提案しますが、すべての影響に対してあなたのシステムが責任を持ちます。






























































































