エージェント転送

定義した条件に基づいて、ユーザーをElevenLabsエージェント間でシームレスに転送します。

概要

エージェント間転送では、特定の条件が満たされたときに、ElevenLabsエージェントが進行中の会話を指定された別のエージェントへ引き継げます。これにより、異なるエージェントが特定のタスクや複雑さのレベルを担当する、多層的な会話ワークフローを実現できます。

たとえば、最初のエージェント(オーケストレーター)が一般的な問い合わせに対応し、会話の文脈に応じて専門エージェントに通話を転送できます。転送はネストすることも可能です。

Orchestrator Agent (Initial Qualification)
│
├───> Agent 1 (e.g., Availability Inquiries)
│
├───> Agent 2 (e.g., Technical Support)
│ │
│ └───> Agent 2a (e.g., Hardware Support)
│
└───> Agent 3 (e.g., Billing Issues)
エージェント転送階層の例

目的:ユーザーのニーズに応じて、専門的なAIエージェント間で会話を転送します。

トリガー条件:LLMは、次の場合にこのツールを呼び出す必要があります。

  • ユーザーのリクエストに専門知識または別のエージェント機能が必要な場合
  • 現在のエージェントではクエリに十分対応できない場合
  • 会話の流れから別のエージェントタイプが必要であることが示される場合

パラメータ:

  • reason(string、任意):エージェント転送の理由
  • agent_number(integer、必須):転送先エージェントのゼロ始まりの番号(設定済みの転送ルールに基づく)

関数呼び出し形式:

{
"type": "function",
"function": {
"name": "transfer_to_agent",
"arguments": "{\"reason\": \"User needs billing support\", \"agent_number\": 0}"
}
}

実装:条件を特定のエージェントIDにマッピングする転送ルールを定義します。現在のエージェントが転送できるエージェントを設定します。エージェントは、転送設定内でゼロ始まりの番号で参照されます。

エージェント転送を有効にする

エージェント転送は、transfer_to_agentシステムツールを使用して設定します。

1

転送ツールを追加

Agentタブのエージェント設定で、transfer_to_agentシステムツールを選択してエージェント転送を有効にします。ツールを追加する際は、「Transfer to AI Agent」を選択してください。

転送ツールを追加
2

ツールの説明を設定(任意)

転送を実行するタイミングをLLMに示すカスタム説明を指定できます。空欄のままにすると、定義した転送ルールを含むデフォルトの説明が使用されます。

転送ツールの説明
3

転送ルールを定義

他のエージェントへ転送するための具体的なルールを設定します。各ルールでは、次を指定します。

  • エージェント:会話の転送先となるエージェント。
  • 条件:転送を実行する状況を自然言語で記述します(例:「ユーザーが請求の詳細について尋ねた場合」「ユーザーが製品Xのテクニカルサポートを求めた場合」)。
  • 転送前の遅延時間(ミリ秒):転送が実行されるまでの最小遅延時間(ミリ秒)。デフォルトは0で、即時に転送されます。
  • 転送メッセージ:転送中に再生する任意のカスタムメッセージ。空欄の場合、メッセージを流さずに転送されます。
  • 最初のメッセージを有効化:転送後に、転送先エージェントが最初のメッセージを再生するかどうか。デフォルトではオフです。

LLMはこれらの条件とツールの説明を使用して、いつ、どのエージェント(番号)へ転送するかを判断します。

転送ルールの設定

エージェントを作成するユーザーアカウントが、転送ルールで指定したすべての転送先エージェントに対して少なくとも閲覧者権限を持っていることを確認してください。

転送時の動作

転送が発生すると、親エージェント(転送を開始するエージェント)は特定の設定値を子エージェント(会話を受け取るエージェント)に渡します。一方で、それ以外の設定は完全にリセットされます。

設定の継承

親エージェントは、子エージェント自身の設定にかかわらず、すべての子エージェントで次の値を上書きします。

設定説明
クライアントイベントクライアントが送信するイベント(例:audio、interruption、user_transcript)。
TTS出力オーディオ形式エージェントの音声を送信する形式(例:pcm_16000、ulaw_8000)。
ASR入力オーディオ形式エージェントが想定するユーザーオーディオの形式(例:pcm_16000、ulaw_8000)。

さらに、親エージェントの現在の言語も引き継がれます。子エージェントがその言語をサポートしていない場合は、子エージェント自身のデフォルト言語にフォールバックします。通話後のWebhookと分析の設定(評価基準やデータ収集項目を含む)も、会話全体に適用されます。

継承されない設定

その他すべての設定は子エージェントで設定されます。これには、次が含まれますが、これらに限定されません。

  • プロンプト、最初のメッセージ、LLM、ワークフロー、音声、ツール、ナレッジベース
  • TTS音声、モデル、安定性、その他の音声設定(agent_output_audio_formatを除く)
  • ASRモデル、品質、キーワード(user_input_audio_formatを除く)
  • ターン/タイムアウト、言語プリセット、最大時間など

動作の不一致を避けるため、ワークフロー内の各エージェントでこれらの設定を統一してください。

文字起こしとチャット履歴

会話全体の完全な文字起こしが保持されます。先行するすべてのエージェントからのユーザーとエージェントのメッセージは、チャット履歴に残ります。

転送中は、子エージェントのLLMに表示される履歴からtransfer_to_agentツール呼び出しが除外されるため、引き継ぎに言及せずに会話を継続できます。

通話後評価

通話後の評価LLMは、フィルタリングされていない完全な文字起こしを受け取ります。すべてのユーザーおよびエージェントのメッセージと、転送を含むすべてのツール呼び出しが含まれます。

個々のメッセージにはagent_idフィールドは含まれません。どのエージェントがどのメッセージを生成したかを判断するため、評価器は文字起こし内の境界マーカーとしてtransfer_to_agentツール呼び出しを使用します。

API実装

APIを介してエージェントを作成または更新する際に、transfer_to_agentシステムツールを設定できます。

from elevenlabs import AgentConfig, ConversationalConfig, ElevenLabs
elevenlabs = ElevenLabs(api_key="YOUR_API_KEY")
# Define transfer rules with new options
transfer_rules = [
{
"agent_id": "AGENT_ID_1",
"condition": "When the user asks for billing support.",
"delay_ms": 1000, # 1 second delay
"transfer_message": "I'm connecting you to our billing specialist.",
"enable_transferred_agent_first_message": True,
},
{
"agent_id": "AGENT_ID_2",
"condition": "When the user requests advanced technical help.",
"delay_ms": 0, # Immediate transfer
"transfer_message": None, # Silent transfer
"enable_transferred_agent_first_message": False,
},
]
response = elevenlabs.conversational_ai.agents.create(
conversation_config=ConversationalConfig(
agent=AgentConfig(
first_message="Hi, how can I help you today?",
prompt={
"prompt": "You are a helpful assistant.",
"built_in_tools": {
"transfer_to_agent": {
"type": "system",
"name": "transfer_to_agent",
# Optional custom description
"description": "Transfer the user to a specialized agent based on their request.",
"params": {
"system_tool_type": "transfer_to_agent",
"transfers": transfer_rules,
},
}
},
},
),
),
)
print(response)