- はじめに
- スタート アップ ガイド
- Maestro の BPMN を使用した構築
- Maestro Case を使用した構築
- Maestro Case について
- Maestro BPMN と Maestro Case の比較: ケース管理を使用すべき状況
- Maestro Case のライフサイクル: イベント トリガーからアプリのエクスペリエンスまで
- Maestro Case を使用して最初のケースを構築する
- コーディング エージェントを使用して Maestro Case を構築する (プレビュー)
- ケース キーを定義する (システムと外部)
- タスクの I/O と書き戻しの契約を確立する
- 終了ルールと早期終了
- プライマリ ステージとセカンダリ ステージをモデリングする
- Data Fabric からケースをトリガーする
- ステージレベルのペルソナと権限を実装する
- SLA と自動エスカレーション ルールを設定する
- 再作業によるループ (再エントリ) を設定する
- Case Manager エージェントを設定およびテストする (プレビュー)
- ケース マネージャーの入力および出力コントラクト
- Maestro Case コンポーネント ディクショナリ
- Maestro Flow を使用した構築
- Maestro Automate
- Integrations
- オペレーティング
- 監視
- 最適化中
- 参考情報
Voice Agent
ライブ コールにアタッチし、発信者と会話する音声エージェント。
機能
エージェントをライブ通話に接続し、発信者と会話します。音声はリアルタイムの音声モデルに直接ストリーミングされ、発信者は音声の途中でエージェントの話を中断できます。モデル、ペルソナ、プロンプト、ツール、コンテキスト グラウンディングのインデックス、エスカレーションをノードで直接設定します。
どちらの呼び出し方向も、同じ 3 ステップの形状を使用します。
| 方向 | ノード シーケンス |
|---|---|
| 受信 | 着信コール → 音声エージェント → コール終了時 |
| 発信 | 通話 終了 →音声 エージェント → 発信コールを作成 |
ノードには、ノード パレットの [エージェント] カテゴリで [音声エージェント] というラベルが付けられます。
構成のリファレンス
| フィールド | 説明 |
|---|---|
| モデル | リアルタイム音声モデルです。 |
| ペルソナ | 選択したモデルの音声です。 |
| システム プロンプト | エージェントの役割、スタンディングの指示、および会話の終了方法 |
| 温度 | 0 から 1への回答の創造性 |
| 最大トークン数 | 会話の最大トークンです。 |
| 通話コンテキスト | このエージェントがアタッチする呼び出し。上流の callContext (例: $vars.createOutgoingCall1.output.callContext) にバインドします。 |
出力変数
必要に応じて、[プロパティ] パネルの [ 出力 ] セクションで、構造化された出力変数を設定できます。フロー内の下流のノードで使用する目標指向の変数やルーティング変数を設定するのに役立ちます。
宣言した各出力変数は、エージェントの出力オブジェクトのフィールドになり、 $vars.<agentName>.output.<name>として参照されます。それぞれに名前と型を指定し、変数の [説明] フィールドでその設定方法をエージェントに指示します。出力の生成は、エージェントのシステム プロンプトと出力変数の説明の組み合わせによって決定されます。
エージェントは、音声セッションを終了すると、それらを設定します。
最も一般的な 2 つの用途は、通話の要約と ハンドオフです。要約の場合は、 call_summary などの出力を宣言し、その説明を使用して、通話を要約するようエージェントに指示します。エージェントはセッションの終了時にこのメッセージを書き込み、下流のノードはそれを として読み取 $vars.voiceAgent1.output.call_summary。
ツール
ツールを ツール のハンドルに接続して、エージェントが推論中に呼び出すことができる機能を提供します。エージェントは、ループ中に、接続された各ツールを呼び出すかどうか、およびいつ呼び出すかを決定します。各ツールには、そのツールの目的をエージェントに伝える説明が付いているので、ツールで説明が公開された場合は、明確な説明を記述してください。
音声エージェント用のツールを設計する際には、以下の点に注意してください。
- 呼び出し元はすべてのツールの呼び出しを待機するため、各ツールのジョブは小さくて高速に保ちます。
- エージェントが同じラウンドで呼び出したツールは一緒に返されます — 最も遅いツールは、呼び出し元が無音を聞く時間を設定します。
- タイムアウトすると、エージェントは失敗を報告してもう一度試行する可能性があるため、ツールはべき等にしてください。180 秒以内にツール呼び出しが返っていないと、タイムアウトします。
ツールの可用性
| ツールのカテゴリ | 利用可能状況 |
|---|---|
| RPA プロセス | 利用可能 |
| API ワークフロー | 利用可能 |
| Activities (アクティビティ) | 利用可能 |
| その他のフロー (Maestro) | 利用可能 |
| Process orchestration | 利用可能 |
| コード化された関数 | 利用可能 |
| エージェント (パブリッシュ済みのスタンドアロン エージェントを呼び出し) | 利用可能 |
| Integration Service のコネクタ | 利用可能 |
| コンテキスト グラウンディングのインデックス | 利用可能 |
| 組み込みツール (ファイルを分析、ディープ RAG、バッチ変換) | 利用できません。 |
| エスカレーション | 利用できません。 |
| モデル コンテキスト プロトコル (MCP) ツール | 利用できません。 |
| A2A (エージェント間) | 利用できません。 |
| IXP (ドキュメント抽出) | 利用できません。 |
内蔵音声ツール
すべての音声エージェントは、2つの組み込みツールにアクセスできます。これらは含まれますが、フロー キャンバスには表示されません。
- Dual-Tone Multi-Frequency(DTMF)ツール:電話機のキーパッドの数字を押すために使用し、外部の電話ツリーをナビゲートするために使用できます
- セッションを終了: 通話を終了せずに会話を終了するために使用します。音声エージェントの ハンドオフに役立ちます。
ツールのガードレール
ツールレベルのガードレールは、音声エージェント ノードに接続されているツールで利用できます。ツールの入力パラメーターをフィルター処理またはブロックできます。音声エージェントの [ツール] ハンドルに取り付けられているツールでガードレールを設定します。詳しくは、「 ツールのガードレール」をご覧ください。
ハンドオフ
音声セッションの終了は、通話の終了と同じではありません。エージェントはセッションを終了すると、通話を終了しますが、回線は開いたままになります。エージェントは出力変数を入力すると、フローは次のノードに移動します。通話を終了できるのは、 通話 終了ノードと発信者のみです。
それがハンドオフを可能にするのです。音声エージェント ノードをチェーンし、すべて同じ コール コンテキストにバインドします。完了すると、各エージェントは独自のセッションを終了し、最後のパスのみが 通話終了に到達するため、発信者は終始回線上に留まります。
ハンドオフは次の 2 つの部分で構成されます。
- 適切なエージェントにルーティングする。最初のエージェントに出力変数 (
handoffなど) を与え、その説明を使用して、設定する値をエージェントに指示します。スイッチ ノードで その値を分岐させ、各ケースがそれを処理するエージェントにつながるようにします。 - コンテキストを引き継ぎます。受信エージェントは、すでに言われたことについて何も知りません。最初のエージェントからの通話要約の出力をシステム プロンプトで参照するか (
$vars.voiceAgent1.output.call_summaryを参照するか、ブランチに [ 会話コンテキストを取得 ] ノードを追加して、代わりに文字起こしを参照します。詳しくは、「 通話の文字起こし」をご覧ください。
通話の引き継ぎはサポートされていません。ライブ通話転送はありません。
通話の文字起こし
通話後にトランスクリプトを読み取るには、 デバッグ実行トレース または Orchestrator ジョブのトレースを開きます。詳しくは、「 会話型エージェントのオブザーバビリティ」をご覧ください。
フロー内でトランスクリプトを使用するには、以下の手順を実行します。
- [ 会話コンテキストを取得 ] ノードを追加します。
$vars.<incomingOrOutgoingCallNodeId>.output.callContext.conversationIdを渡します。たとえば、<incomingOrOutgoingCallNodeId>をcreateOutgoingCall1できます。- 文字起こしを
$vars.<getConversationContextNodeId>.output.conversationContext.messagesとして参照します。たとえば、getConversationContextNodeIdをgetConversationContext1できます。
たとえば、処理のためにトランスクリプトを自律型エージェントに渡すことができます。
一般的な問題
エージェントは正常に会話しますが、ツールは実行されません。Orchestrator フォルダーには、サーバーレス マシンが割り当てられた Unattended ロボットまたは既定のロボットがないため、すべてのツール呼び出しがエラーとして返され、エージェントは会話状態を維持します。フォルダーにロボットを追加してから、もう一度呼び出します。詳しくは、「 Orchestrator フォルダーの要件」をご覧ください。
会話が終了する前に通話が終了しますが、エラーはありません。エージェントが会話の途中で自身のセッションを終了し、フローは 通話の終了に進みました。これは、音声エージェントが発信者の支援を終了したと考え、セッションを終了することを決定したプロンプトの問題である可能性があります。
エージェントが停止するか、静的な読み取り数字文字列を生成します。Gemini Live at Temperature 0では、長い数字の弦が失速したり、音が歪んだりすることがあります。温度を少し上げます。問題が解決しない場合は、他のモデルを試してください。
エージェントはツール スキーマ エラーでアタッチに失敗します。Gemini モデルは、狭いスキーマのサブセットを受け入れます。ツールの入力スキーマをフラット化するか、フラットな入力スキーマでツールを API ワークフローにラップし、代わりにそのワークフローをツールとして使用します。
通話は接続され、誰も話さず、約 25 秒後に切断されます。エージェントを接続しない通話は、約 25 秒間デッド エアが続くと終了します。通話コンテキストを [着信通話] トリガーまたは [発信通話を作成] ノードからのcallContextにバインドします。
関連ページ
- Incoming Call
- Create Outgoing Call
- End Call
- デプロイ — 番号を接続し、フローにバインドします。