定義
ツール呼び出しとは、LLMが言葉で答える代わりに、注文の照会など、名前を付けた関数を実行するための構造化されたリクエストを返すことです。アプリケーションがそれを実行して結果を返すと、モデルは返答を続けられます。
ツール呼び出しの仕組み
LLM自身は、何も実行しません。開発者は、各ツールについて、名前、平易な言葉での説明、パラメーターのスキーマをモデルに伝えます。会話の途中で、モデルは、ツール名を挙げ、パラメーターを埋めたリクエストを返すことがあります。たとえば、注文番号を付けたget_order_statusです。アプリケーションはそのリクエストを確認し、関数を実行して、結果を新しいメッセージとして返します。モデルはその結果を読み、発話する返答を書きます。
Cartesiaのドキュメントでは、各ツールの説明が、モデルがいつそのツールを使うかの手がかりになります。パラメーターの値の出どころは3つで、モデル自身、固定の定数、または発信者の電話番号などの動的変数です。Managed Agentsには、組み込みのシステムツールとしてend_call、send_dtmf、transfer_to_number、voicemail_detectionなどがあり、自社のWebhookエンドポイントを呼び出すカスタムツールも使えます。
この設計からは、3つのことが言えます。モデルはツールの説明を見て選ぶので、説明があいまいだと、誤った呼び出しや呼び出しの抜けが起きます。パラメーターはモデルが埋めるので、モデルが作り出した値は、受け取る側のコードで検証しなければなりません。そして、呼び出しは往復の処理なので、結果が戻るまで、モデルの返答は止まります。
音声エージェントにとって重要な理由
ツール呼び出しがあるから、エージェントは話すだけでなく、予約を入れる、通話を転送するといった仕事ができます。一方で、待ち時間が長くなりやすいのもここです。ツールの応答時間は音声の遅延にそのまま含まれ、3秒かかる照会は、電話回線上では3秒の無音です。
そのため音声エージェントは、チャットとは違う扱いをします。時間のかかる処理の前に、「確認しますね」のような短い一言を話します。Cartesiaのシステムツールには、そのためのpre_tool_speech設定があり、値はauto、force、offです。失敗したときの備えも必要です。ツールがタイムアウトしたりエラーを返したりしたら、エージェントはその旨を伝えて次の手順を案内し、答えを作り上げてはいけません。ハルシネーションをご覧ください。
ツールにはリスクもあります。予約をキャンセルしたり、お金を動かしたりするツールには、モデルの判断に頼らない確認を前段に置くべきです。たとえば、内容の読み返しと発信者の確認、受け取る側のシステムでの権限チェックです。発信者の言葉は、モデルがどのツールを呼ぶかに影響し得ます。何を許可するかを強制するのは、プロンプトではなくツールの側であるべきです。
例
説明用の通話です。
- 発信者:「注文はどうなっていますか。番号は5521です。」
- エージェント:「確認しますね。」(モデルが注文番号5521で
get_order_statusをリクエスト) - ツールの結果:火曜に発送、金曜に到着予定
- エージェント:「火曜に発送済みで、金曜に届く予定です。」