Elastic Agent Builderで音声エージェントを構築

音声エージェントの仕組みと、Elastic Agent BuilderとLiveKitを使用して音声エージェントを構築する方法について説明します。

Agent Builderは、現在一般提供でご利用いただけます。Elastic Cloud トライアルを開始し、こちらでAgent Builderのドキュメントを確認してください。

AIはガラスの箱に閉じ込められています。コマンドを入力すると、テキストで応答が返されます。役には立ちますが、画面の向こうで誰かが動いているのを見ているような距離感があります。今年、2026年は、ビジネスがこのガラスの壁を打ち破り、AIエージェントを製品に導入し、真の価値を提供する年となるでしょう。

ガラスを砕く方法の1つは、人間の音声を認識し、コンピューター生成の音声を合成するAIエージェントである音声エージェントの採用によるものです。低遅延の文字起こし、高速な大規模言語モデル(LLM)、人間のように聞こえるテキスト読み上げモデルの登場により、これが可能になりました。

音声エージェントが真に価値あるものになるためには、ビジネスデータへのアクセスも必要です。このブログでは、音声エージェントの仕組みを学び、LiveKitElastic Agent Builderを使って、架空のアウトドアスポーツ用品店であるElasticSport向けに音声エージェントを構築します。当社の音声エージェントはコンテキストを認識し、自前のデータを活用します。

プログラム概要

音声エージェントの世界には2つのパラダイムがあります。1つ目は音声合成(speech-to-speech)モデルを使用し、2つ目は音声テキスト変換、LLM、テキスト読み上げからなる音声パイプラインを使用します。音声合成には独自の利点がありますが、音声パイプラインは使用される技術やコンテキストの管理方法、エージェントの動作に対する制御をより柔軟にカスタマイズできます。ここでは音声パイプラインモデルに焦点を当てます。

主要コンポーネント

文字起こし(音声テキスト変換)

文字起こしは音声パイプラインの入口です。文字起こしコンポーネントは、生のオーディオフレームを入力として受け取り、音声をテキストに書き起こして、そのテキストを出力します。文字起こしされたテキストは、システムがユーザーの音声が終了したことを検出するまでバッファリングされます。その時点で、LLM生成が開始されます。さまざまなサードパーティプロバイダーが低遅延の文字起こしを提供しています。選択する際には、遅延と文字起こしの精度を考慮し、ストリーミング文字起こしをサポートしていることを確認してください。

サードパーティAPIの例:AssemblyAIDeepgramOpenAIElevenLabs

ターン検出

ターン検出は、話者が話し終わり、生成が開始されるべき時を検出するパイプラインのコンポーネントです。これを行う一般的な方法の一つは、Silero VADのような音声アクティビティ検出(VAD)モデルを利用することです。VADは、音声のエネルギーレベルを使用して、音声に発話が含まれるタイミングと発話が終了したタイミングを検出します。しかし、VADだけでは、一時停止と発話の終了の違いを識別することはできません。このため、中間トランスクリプトまたは生の音声に基づいて話者が話し終えたかどうかを予測する発話終了モデルと組み合わせられることがよくあります。

例 (Hugging Face): livekit/turn-detector, pipecat-ai/smart-turn-v3

エージェント

エージェントは音声パイプラインのコアです。意図を理解し、適切なコンテキストを収集し、テキスト形式で返信を作成する役割を担います。Elastic Agent Builderは、組み込まれた推論機能、ツールライブラリ、ワークフロー統合により、データ上で動作し、外部サービスとやり取りできるエージェントとなります。

LLM(テキストからテキスト)

Elastic Agent Builder用のLLMを選択する際には、主に、LLMの推論ベンチマークと、最初のトークンまでの時間(TTFT)の2つの特性を考慮する必要があります。

推論ベンチマークは、LLMがどの程度正しい応答を生成できるかを示します。検討すべきベンチマークは、MT-BenchやHumanity's Last Examデータセットなど、マルチターン会話の遵守とインテリジェンスベンチマークを評価するものです。

TTFTベンチマークは、モデルが最初の出力トークンを生成する速度を評価します。レイテンシのベンチマークには他にも種類がありますが、TTFTは音声エージェントにとって特に重要です。最初のトークンを受信するとすぐにオーディオ合成を開始できるため、ターン間のレイテンシが短縮され、自然な会話が実現します。

通常、高速モデルは推論ベンチマークでパフォーマンスが低下することが多いため、これら2つの特性は互いにトレードオフとなります。

例 (Hugging Face): openai/gpt-oss-20b, openai/gpt-oss-120b

合成(テキスト読み上げ)

パイプラインの最後の部分はテキスト読み上げモデルです。このコンポーネントは、LLMから出力されたテキストを可聴音声に変換する役割を担います。LLMと同様に、遅延はテキスト読み上げプロバイダーを選択する際に注意すべき特性です。テキスト読み上げの遅延は、最初のバイトまでの時間(TTFB)で測定されます。これは、最初のオーディオバイトが受信されるまでにかかる時間です。TTFBが低いほど、ターンの待ち時間も短縮されます。

例:ElevenLabsCartesiaRime

音声パイプラインの構築

Elastic Agent Builderは、音声パイプラインに複数のレベルで統合できます。

  1. Agent Builderツールのみ:音声テキスト変換 → LLM(Agent Builderツール使用)→ テキスト読み上げ
  2. MCPとしてのAgent Builder:音声テキスト変換 → LLM(MCP 経由でAgent Builderにアクセス)→ テキスト読み上げ
  3. Agent Builderをコアとして使用:音声テキスト変換 → Agent Builder →テキスト読み上げ

このプロジェクトでは、コアアプローチとしてAgent Builderを選択しました。このアプローチにより、Agent Builderとワークフローの全機能を使用できます。このプロジェクトでは、LiveKitを使用して音声テキスト変換、ターン検出、テキスト読み上げを管理する、Agent Builderと直接統合するカスタムLLMノードを実装しています。

Elasticサポート音声エージェント

ElasticSportという架空のスポーツショップ向けにカスタムサポート音声エージェントを構築します。顧客はヘルプラインに電話をかけ、製品の推奨を尋ねたり、製品の詳細を見つけたり、注文状況を確認したり、注文情報をテキストで送信してもらったりできるようになります。これを達成するために、まずカスタムエージェントを設定し、Elasticsearch Query Language(ES|QL)クエリとワークフローを実行するためのツールを作成する必要があります。

エージェントの構成

プロンプト

プロンプトは、エージェントがどのような性格を持ち、どのように応答するかを指示します。重要なのは、応答が適切に音声に合成され、誤解が適切に修復されることを保証する音声固有のプロンプトがいくつかあることです。

ワークフロー

TwilioのメッセージングAPIを介してSMSを送信するための小さなワークフローを追加します。ワークフローはカスタムエージェントに対してツールとして公開され、エージェントが通話中に発信者にSMSを送信できるユーザーエクスペリエンスが実現されます。これにより、発信者は、「 Xについての詳細をテキストで送信できますか?」などと尋ねることができます。

ES|QLツール

次のツールを使用すると、エージェントは実際のデータに基づいた適切な応答を提供できます。サンプルリポジトリには、製品、注文、ナレッジベースのデータセットでKibanaを初期化するためのセットアップスクリプトが含まれています。

  • Product.search

製品データセットには65種類の架空の製品が含まれています。これはサンプルドキュメントです。

名前と説明のフィールドは semantic_textとしてマップされており、LLMがES|QLを介してセマンティック検索を実行して関連製品を取得できるようになっています。ハイブリッド検索クエリは、両方のフィールド間でセマンティックマッチングを実行し、ブーストを使用して名前フィールドの一致によりわずかに高い重みを適用します。

クエリはまず、初期関連性スコアでランク付けされた上位20件の結果を取得します。これらの結果は、.rerank-v1-elasticsearch 推論モデルを使用して説明フィールドに基づいて再ランク付けされ、最後に最も関連性の高い上位 5 つの製品に絞り込まれます。

  • Knowledgebase.search

ナレッジベースのデータセットには、以下の形式のドキュメントが含まれており、タイトルとコンテンツのフィールドはセマンティックテキストとして格納されます。

このツールは、 product.searchツールと同様のクエリを使用します。

  • Orders.search

最後に追加するツールは、 order_idによる注文を取得するために使用されるツールです。

エージェントを設定し、これらのワークフローとES|QLツールをエージェントにアタッチした後、エージェントはKibana内でテストできます。

ElasticSportサポートエージェントの構築以外にも、エージェント、ワークフロー、ツールを、リード資格を審査する営業エージェント、住宅修理のサービスエージェント、レストランの予約、予約スケジュールエージェントなど、他のユースケースに合わせてカスタマイズできます。

最後の部分は、先ほど作成したエージェントをLiveKit、テキスト読み上げ、音声テキスト変換モデルと連携することです。このブログの最後にリンクされているリポジトリには、LiveKitで使用できるカスタムElastic Agent Builder LLMノードが含まれています。AGENT_IDを独自のものに置き換えて、Kibanaインスタンスにリンクするだけです。

はじめに

ここでコードをチェックして試してみてください。

関連記事

最先端の検索体験を構築する準備はできましたか?

十分に高度な検索は 1 人の努力だけでは実現できません。Elasticsearch は、データ サイエンティスト、ML オペレーター、エンジニアなど、あなたと同じように検索に情熱を傾ける多くの人々によって支えられています。ぜひつながり、協力して、希望する結果が得られる魔法の検索エクスペリエンスを構築しましょう。

はじめましょう