はじめに
近年、LLM(大規模言語モデル)を活用したAIエージェントの開発が盛んですが、テキストのやり取りだけでなく「音声」と「アバター(視覚情報)」を組み合わせることで、より人間らしい自然なインタラクションが可能になります。
今回は、オープンソースのリアルタイムAIフレームワークであるPipecatと、Anam.ai、そしてローカルLLM(LM Studio & Gemma 4)を組み合わせて、遅延の少ないリアルタイムなAIアバター対話システムを構築するデモアプリケーションを作成しました。
GitHubリポジトリはこちら
masayukimiyazawa/pipecat-aiavatar-unifiedvideo-localllm-demo
このアプリケーションの主な特徴
-
Pipecatによる柔軟なパイプライン構築
音声認識、LLMの推論、音声合成といった各AIコンポーネントを、Pipecatのフレームワークを用いることでシンプルかつスケーラブルに結合しています。 -
完全ローカルでのLLM動作 (Privacy & Low Latency)
クラウドAPIに依存せず、ローカル環境でLLMを動かすことで、機密情報の漏洩を防ぎつつ、ネットワーク通信による遅延を最小限に抑えています。 -
Unified Videoによるアバター映像の統合
AIAvatarとUnified Videoの技術を組み合わせ、生成された音声に合わせてアバターをリップシンク(口パク)させ、滑らかな映像ストリームとしてリアルタイムに出力します。
主要な技術スタック
| コンポーネント | 技術・ツール例 | 役割 |
|---|---|---|
| Framework | Pipecat | 全体のストリーミングとAIタスクのパイプライン管理 |
| LLM | Local LLM (Ollama, llama.cppなど) | ユーザーの入力に対する思考・応答テキスト生成 |
| STT (音声認識) | Faster Whisperなど | ユーザーの発話をテキストに変換 |
| TTS (音声合成) | VOICEVOX, Style-Bert-VITS2など | LLMが生成したテキストを音声に変換 |
| Avatar / Video | AIAvatar, UnifiedVideo機能 | アバターの描画、リップシンク、ビデオストリーム生成 |
システム構成全体図
処理の全体像をMermaid図で示します。Pipecatがハブとなり、音声の入出力からアバターの映像生成までを一気通貫で処理しています。
ワークフロー(処理の流れ)の詳細
システム内部では、以下のようなパイプラインがミリ秒単位で非同期に実行されています。
1. ユーザーの音声入力と発話検知 (VAD)
ユーザーがマイクに向かって話しかけると、VAD(Voice Activity Detection:例 Silero VADなど)が発話の開始と終了を検知します。無音区間をカットし、必要な音声データだけを後続の処理に流します。
2. STT (Speech-to-Text) によるテキスト化
検知された音声データはリアルタイムにSTTエンジンに送られ、テキストに変換されます。
3. Local LLMによる応答生成
テキスト化されたユーザーの質問や会話は、ローカル環境で立ち上がっているLLM(Ollamaなど)にプロンプトとして渡されます。ローカルで動作するため、クラウドAPI特有のネットワーク遅延がなく、素早く応答の生成を開始します。ストリーミング推論を用いることで、文章の完成を待たずに次の処理へ渡すことができます。
4. TTS (Text-to-Speech) による音声合成
LLMから出力されたテキストチャンクはTTSエンジンに渡され、自然な音声データへと変換されます。
5. Unified VideoとAIAvatar(anam.ai)による映像生成
生成された音声データ(波形データ)を元に、アバターの口の動き(リップシンク)や表情を同期させます。最終的に音声付きのビデオフレームとして統合(Unified Video)され、ユーザー側の画面にリアルタイムで描画されます。
🎥 デモ動画
おわりに
Vonageは最近、Video Connector SDKおよびそれに付随するPipecat Transportをリリースしました。これらの新しいツールにより、サーバーサイドのAIエージェントが、リアルタイムの音声と映像を伴う完全な参加者としてVonage Videoのセッションに参加できるようになります。これらを組み合わせることで、単にチャット(テキストでのやり取り)をするだけでなく、実際のライブビデオ通話の中で直接相手の言葉を聞き、自ら発話する「AIアバター」の構築が可能になります。
詳しいコードの実装やセットアップ方法については、GitHubリポジトリの README.md をぜひご覧ください!PRやIssueもお待ちしております。
