システムツール

外部リクエストなしで会話の内部状態を更新します。

システムツールを使うと、アシスタントは会話の内部状態を更新できます。Webhookツールやクライアントツールとは異なり、システムツールは外部API呼び出しやクライアント側の関数のトリガーを行いません。外部呼び出しをせずに会話の内部状態を変更します。

概要

一部のアプリケーションでは、エージェントが会話のフローや状態を制御する必要があります。 システムツールを使うと、外部サーバーやクライアントと通信せずに、通話の状態に関連するアクションをアシスタントが実行できます。

利用可能なシステムツール

実装

API経由でエージェントを作成する際に、エージェント設定へシステムツールを追加できます。以下は、通話終了ツールと言語検出ツールの実装方法です。

カスタムLLM統合

ElevenLabsエージェントでカスタムLLMを使用する場合、システムツールはLLMが呼び出せる関数定義として公開されます。各システムツールには、固有のパラメータとトリガー条件があります。

利用可能なシステムツール

目的:適切な条件が満たされたときに、会話を自動的に終了します。

トリガー条件:LLMは以下の場合にこのツールを呼び出します。

  • 主なタスクが完了し、ユーザーが満足している
  • 双方の合意により、会話が自然な結論に達した
  • ユーザーが会話を終了したいと明示的に示した

パラメータ:

  • reason(string、必須):通話を終了する理由
  • message(string、任意):通話終了前にユーザーへ送信する別れのメッセージ

関数呼び出し形式:

{
"type": "function",
"function": {
"name": "end_call",
"arguments": "{\"reason\": \"Task completed successfully\", \"message\": \"Thank you for using our service. Have a great day!\"}"
}
}

実装:エージェント設定でシステムツールとして設定します。LLMは、この関数をいつ呼び出すかについての詳細な指示を受け取ります。

詳細:通話終了ツール

目的:会話中に検出されたユーザーの言語へ自動的に切り替えます。

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

  • ユーザーが現在の会話言語とは異なる言語で話している
  • ユーザーが明示的に言語の切り替えを要求した
  • 会話で多言語サポートが必要である

パラメーター:

  • reason(文字列、必須):言語を切り替える理由
  • language(文字列、必須):切り替え先の言語コード(サポート対象言語リストに含まれている必要があります)

関数呼び出し形式:

{
"type": "function",
"function": {
"name": "language_detection",
"arguments": "{\"reason\": \"User requested Spanish\", \"language\": \"es\"}"
}
}

実装:エージェント設定でサポート対象言語を構成し、言語検出システムツールを追加します。エージェントは、検出された言語に合わせて音声と応答を自動的に切り替えます。

詳細:言語検出ツール

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

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

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

パラメータ:

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

関数呼び出し形式:

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

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

詳細:エージェント転送ツール

目的:AIの支援だけでは不十分な場合に、会話を人間のオペレーターへスムーズに引き継ぎます。

トリガー条件:LLMは以下の場合にこのツールを呼び出します。

  • 人間による判断が必要な複雑な問題
  • ユーザーが人間による支援を明示的に求めた
  • 特定のリクエストに対し、AIの能力の限界に達した
  • エスカレーションプロトコルが発動された

パラメータ:

  • reason(string、任意):転送の理由
  • transfer_number(string、必須):転送先の電話番号(設定済みの番号と一致する必要があります)
  • client_message(string、必須):転送を待つ間に顧客へ読み上げるメッセージ
  • agent_message(string、必須):通話を受ける人間のオペレーターへのメッセージ

関数呼び出し形式:

{
"type": "function",
"function": {
"name": "transfer_to_number",
"arguments": "{\"reason\": \"Complex billing issue\", \"transfer_number\": \"+15551234567\", \"client_message\": \"I'm transferring you to a billing specialist who can help with your account.\", \"agent_message\": \"Customer has a complex billing dispute about order #12345 from last month.\"}"
}
}

実装:転送先の電話番号と条件を設定します。顧客と通話を受ける人間のオペレーターの両方に向けたメッセージを定義します。TwilioとSIPトランキングの両方で機能します。

詳細:番号転送ツール

目的:エージェントが話さずに一時停止し、ユーザー入力を待機できるようにします。

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

  • ユーザーが少し時間が必要だと示した場合(「少し待って」、「考えさせて」)
  • ユーザーが会話の流れを一時停止するよう求めた場合
  • エージェントが、ユーザーが情報を処理する時間を必要としていると検出した場合

パラメーター:

  • reason(文字列、任意):一時停止が必要な理由を説明する自由形式のテキスト

関数呼び出し形式:

{
"type": "function",
"function": {
"name": "skip_turn",
"arguments": "{\"reason\": \"User requested time to think\"}"
}
}

実装:追加設定は不要です。このツールは、ユーザーが再び話すまでエージェントが沈黙を保つよう通知するだけです。

詳細:ターンスキップツール

パラメーター:

  • reason(文字列、任意):DTMFトーンを再生する理由(例:「内線へ移動」、「PINを入力」)
  • dtmf_tones(文字列、必須):再生するDTMFシーケンス。有効な文字:0~9、*、#、w(0.5秒の一時停止)、W(1秒の一時停止)

関数呼び出し形式:

{
"type": "function",
"function": {
"name": "play_keypad_touch_tone",
"arguments": "{"reason": "Navigating to customer service", "dtmf_tones": "2"}"
}
}

詳細:キーパッドのタッチトーン再生ツール

パラメータ:

  • reason(文字列、必須):留守番電話を検出した理由(例:「自動応答メッセージを検出」、「人間からの応答なし」)

関数呼び出し形式:

{
"type": "function",
"function": {
"name": "voicemail_detection",
"arguments": "{\"reason\": \"Automated greeting detected with request to leave message\"}"
}
}

詳細:留守番電話検出ツール

目的:外部APIを呼び出さずに、会話に基づいてエージェントが1つ以上の動的変数を更新できるようにします。

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

  • 会話に記録すべき情報(例:エスカレーションフラグ、選択されたオプション、ユーザーが提供した値)が含まれている場合
  • 設定された状態更新が、LLMが会話から判断または抽出する必要がある値に依存する場合

パラメーター:

関数のパラメーターは、ツールの設定方法によって異なります。LLMで抽出した値を使用する状態更新ごとに、その更新の動的変数名を持ち、型がstring、number、またはbooleanであるプロパティが1つスキーマに追加されます。定数または他の動的変数のみから構成される状態更新では、パラメーターは追加されません。

関数呼び出し形式:

{
"type": "function",
"function": {
"name": "update_state",
"arguments": "{\"should_escalate\": true}"
}
}

実装:エージェントは、抽出したパラメーターと会話の現在の動的変数を使用して、設定されたすべての式を評価し、結果を対応する動的変数に割り当てます。外部リクエストは行われません。

詳細:状態更新ツール

from elevenlabs import AgentConfig, ConversationalConfig, ElevenLabs
elevenlabs = ElevenLabs(api_key="YOUR_API_KEY")
# Each system tool is keyed by name under built_in_tools.
# Leave "description" blank to use the default, tool-specific prompt.
response = elevenlabs.conversational_ai.agents.create(
conversation_config=ConversationalConfig(
agent=AgentConfig(
prompt={
"built_in_tools": {
"end_call": {
"type": "system",
"name": "end_call",
"description": "",
"params": {"system_tool_type": "end_call"},
},
"language_detection": {
"type": "system",
"name": "language_detection",
"description": "",
"params": {"system_tool_type": "language_detection"},
},
}
},
),
),
)

よくある質問

はい。同じアシスタント内で、システムツールをWebhookツールやクライアントツールと併用できます。 これにより、内部状態の管理と外部連携を組み合わせた包括的な機能を実現できます。