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

関数

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

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

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

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

関数の定義

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

{
  "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_idcall_id をコピーしてください。

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

保留中の get_customer 呼び出しごとに検索処理を実行し、その結果を返します。ここで、actionrequired_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 },
  ],
});

ハーネスは、必要な結果を受け取るとターンを続行します。セッションのイベントとアイテムを追跡して、ターンの結果を確認し、出力を取得してください。

切断後の復旧

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

副作用のある関数では、セッション、ターン、呼び出し ID に紐づけて結果を永続的に保存してください。実行が成功した可能性があるものの、結果が保存されていない場合は、関数を再実行する前に実行結果を確認してください。

必要に応じた関数の読み込み

デフォルトでは、関数は事前に読み込まれます。関数の読み込みを遅延させるには、その定義に defer_loading: true を設定し、agent.tools{ "type": "tool_search" } を含めます。完全な例については、ツール検索を参照してください。