メインコンテンツへスキップ
stream: true でストリーミングを有効にし、API に合ったスキーマでクライアント側のツールを定義します。ストリーミングとツール呼び出しへの対応はモデルによって異なります。アプリに組み込む前に、使用する Model ID で小さなリクエストを試してください。

前提条件

まず SDK のサンプルで通常のテキストリクエストを成功させます。モデル広場から、テストするプロトコルに対応する正確な Model ID をコピーしてください。確認項目はモデル選択ガイドで説明しています。 プロジェクトの Python 仮想環境に openai と anthropic をインストールし、同じターミナルでプレースホルダーを置き換えます。
以下の Python の各コードブロックは単独で実行できます。120 秒のタイムアウトは、この短いテスト用の設定例です。アプリのタイムアウトはタイムアウトの設定ガイドに従って決めてください。max_tokens や max_output_tokens を指定する前に、モデルの出力トークン上限を確認します。

テキスト応答をストリーミングする

ストリーミングは、一つの HTTP 応答でサーバー送信イベント(SSE)を送ります。SSE の各イベントが、完全な文や JSON の引数オブジェクトに対応するとは限りません。 SDK が SSE の形式を解析します。以下の例ではテキストの差分と完了情報を表示します。アプリではエラーイベントも処理してください。

プロトコルごとに天気ツールを定義する

モデルが関数呼び出しを要求すると、アプリが引数を検証し、関数を実行して結果を返します。例では get_weather 関数一つに location 引数を渡し、リアルタイムの天気ではなく、固定のデモデータを返します。天気サービスや追加の Key は不要です。 対応状況はモデルとプロトコルによって異なります。通常のテキストが動いていても、使用する Model ID でこの小さなツールリクエストを試してください。ツールを定義しても、ホスト型の検索やプロバイダー側で実行する他のツールが有効になるわけではありません。

ツールを呼び出し、結果を返す

以下の非ストリーミングの例では、引数全体を確認できるよう、ツール呼び出しを一往復だけ行います。最初の応答に含まれるすべてのツール呼び出しを処理し、追加のリクエストを一回送信します。より長いエージェントの処理には、上限付きのループと停止条件を別途設けてください。
ツールの結果を追加する前に、アシスタントの応答全体を保持します。Responses では、返された推論項目も含めてすべての output 項目を残します。Messages ではコンテンツブロックとその順序を保ちます。ID を独自に作らず、返された呼び出し ID に結果を対応させてください。

よくある質問

ツールの引数を受信した順に実行してもよいですか?

ツール呼び出しのインデックスや項目 ID ごとに断片を集め、引数が揃ってから解析・検証してください。途中の JSON は解析できない場合があります。ストリーミングとツールを組み合わせる前に、上の非ストリーミングの例から始めてください。

通常のテキストは動くのに、ツールが失敗するのはなぜですか?

対応状況はモデルとプロトコルによって異なります。使用する Model ID で小さなツールリクエストを検証してください。ツールのスキーマ、返された引数、結果の ID、メッセージの順序を確認します。型付き JSON の検証については、構造化出力の FAQを参照してください。

ストリームが切断されたら再試行すべきですか?

再送信する前にリクエスト記録を確認します。切断しただけでは、リクエストが完了したかどうかは判断できません。再試行は新たな試行になるため、実行済みのツール操作を繰り返さないようにしてください。エラーと再試行のガイドを参照してください。

関連ガイド

公式リファレンス

以下の資料は、上流 API のプロトコルフィールドを定義しています。利用する前に、BetterToken の Model ID で機能を検証してください。