For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション
Theme

関数

関数を定義し、保留中の呼び出しを処理して結果を返す方法を説明します。

関数ツールを使うと、エージェントからアプリケーションのコードを呼び出せます。開発者は関数とその引数を定義します。エージェントが関数の呼び出しを要求し、アプリケーションのコードが結果を返すと、ハーネスがターンを続行します。

ハンドラーは、アプリケーションサーバー、ワーカー、または開発者が管理する環境で実行できます。セッションに環境を接続しただけでは、その環境で関数ツールが自動的に実行されることはありません。

Responses API の Function Calling を使用している場合は、ここで説明するセッションの処理手順でも、既存の関数の実装を再利用できます。

関数の定義

agent.tools に関数定義を追加するのは、エージェントの設定時です。関数の名前と説明、引数の JSON スキーマを指定します。

{
  "type": "function",
  "name": "get_customer",
  "description": "Look up a customer by ID.",
  "parameters": {
    "type": "object",
    "properties": { "customer_id": { "type": "string" } },
    "required": ["customer_id"],
    "additionalProperties": false
  }
}

必要なアクションの処理

エージェントが関数の結果を必要とすると、セッションは agent.session.requires_action イベントを発行します。event.session.required_actions から保留中の呼び出しを取得します。ストリーミングを使わずに、セッションを取得して session.required_actions を読み取ることもできます。

required_actions に含まれる関数呼び出しの例を示します。

{
  "type": "function_call",
  "turn_id": "turn_123",
  "call_id": "call_123",
  "name": "get_customer",
  "arguments": { "customer_id": "123" }
}

指定された関数を、渡された引数で実行します。どの呼び出しに結果を返す必要があるかは、required_actions で確認します。セッション履歴に function_call 項目があるだけでは、その呼び出しがまだ結果を待っているかどうかは分かりません。

結果の返却

agent.session.input.tool_result をセッションイベントのエンドポイントに送信します。turn_id と call_id は保留中のアクションからコピーします。

  • 成功した場合は success: true を設定し、output に文字列またはサポートされている形式のコンテンツ配列を指定します。JSON オブジェクトは文字列にシリアライズします。
  • エラーが発生した場合は success: false を設定し、error にエージェントが利用できるエラーメッセージを指定します。

保留中の get_customer 呼び出しごとに顧客情報を検索し、結果を返します。この例の action は required_actions 内の該当項目です。

関数の結果を返す例
const result = {
  turn_id: action.turn_id,
  call_id: action.call_id,
};
let outcome;

outcome = {
  success: true,
  output: JSON.stringify(getCustomer(action.arguments)),
};

await client.beta.agents.sessions.events.create(sessionId, {
  events: [
    { type: "agent.session.input.tool_result", ...result, ...outcome },
  ],
});

ハーネスは、必要な結果を受け取るとターンを続行します。セッションのイベントと項目を追跡すると、ターンがどのように終了したかを確認し、その出力を取得できます。

結果のサイズ

ツールの結果が大きすぎて API に拒否された場合は、Agents API のメタデータ用に少し余裕を持たせ、結果を 4 MiB(4,194,304 バイト)未満に縮小します。呼び出しがまだ保留中であれば、同じ turn_id と call_id で結果を再送信します。

切断後の復旧

セッションを取得して、保留中のアクションを確認します。関数をすでに実行している場合は、同じ turn_id と call_id を使って、保存済みの結果を送信します。

副作用のある関数では、セッション ID、ターン ID、呼び出し ID の組み合わせごとに結果を永続化します。実行に成功した可能性があるのに結果が保存されていない場合は、関数を再実行する前に実行結果を確認します。

関数のオンデマンド読み込み

デフォルトでは、関数はあらかじめ読み込まれます。必要になるまで関数の読み込みを遅らせるには、関数定義に defer_loading: true を設定し、{ "type": "tool_search" } を agent.tools に追加します。完全な例は「ツール検索」を参照してください。