ツールの定義
適切に型注釈された関数はツールとして使用できます。SDK は関数の docstring を説明として、パラメータの型注釈を使用します:すべてのツールの最初のパラメータは
ctx(ツールコンテキスト)である必要があります。これは会話状態へのアクセスを提供し、将来的な互換性のために必須です。ツールのパラメータは ctx の後に続けて定義します。ツールの種類
tools に渡されるプレーンな関数は、自動的にループバックツールとしてラップされます。明示的な制御には、デコレーター(@loopback_tool、@passthrough_tool、@handoff_tool)を使用してください。ループバックツール(@loopback_tool)
デフォルトの動作です。ツールの結果は LLM に返され、LLM はそれを使って応答の生成を続行できます。
パススルーツール(@passthrough_tool)
出力イベントは LLM を経由せずに、直接ユーザーに送信されます。決定的なアクションに使用します。
EndCall、TransferCall、SendDtmf)、決定的な応答。
ハンドオフツール(@handoff_tool)
制御を別のハンドラーに移譲します。以降のイベントはすべて、元のエージェントではなくハンドオフ先にルーティングされます。
event パラメータはタイミングによって異なる値を受け取ります:
- 最初の呼び出し:
eventはAgentHandedOff。これを使って遷移メッセージを送信します - その後の呼び出し:
eventは実際のInputEvent(UserTurnEndedなど)
組み込みツール
例:
end_call
現在の通話を終了し、切断します。エージェントの最終的な発話が完了した後に実際の切断が行われるため、ユーザーは切断前に終了の挨拶を最後まで聞くことができます。
end_call は次のいずれかの条件を満たす場合にのみ通話を終了する保守的なポリシーを使用します:
- ユーザーの目的が完全に達成されている
- ユーザーが明確にお別れを述べている
- エージェントが自然なお別れを述べている
カスタムの説明
ユースケースに合わせてカスタマイズした説明を提供することを推奨します。説明はデフォルトを 完全に置き換えます(追記ではありません)。そのため、do/don’t の明示的なガイダンスを含む完全な指示を含めてください。agent_as_handoff
別の Agent からハンドオフツールを作成します。マルチエージェントワークフローを実装する最も簡単な方法です。
呼び出されると、
agent_as_handoff は自動的にハンドオフメッセージを送信し、指定されていれば通話設定を更新し、新しいエージェントの導入をトリガーし、以降のすべてのイベントをそちらにルーティングします。
長時間実行ツール
デフォルトでは、エージェントが中断されるとツール呼び出しは終了します(ただし、すでに生成された推論内容やツール呼び出しのレスポンス値は、次の生成での利用のために保持されます)。 完了までに長時間かかることが想定されるツールには、is_background=True を設定してください。中断に関わらずツールはバックグラウンドで完了するまで実行され、その後 LLM にループバックしてレスポンスを生成します。
knowledge_base ツールも is_background を受け付けるため、取得処理が進行中でもエージェントは話し続けることができます:
バックグラウンドツールは次のような場合に有用です:
- 操作が一般的なユーザーの忍耐時間を超える可能性がある場合(例:複雑な検索、レポート生成)
- 操作の完了中にユーザーが話せるようにしたい場合
- ユーザーが別の質問で割り込んだとしても結果を届けたい場合