関数呼び出しと双方向オーディオストリーミングを備えたリアルタイム音声AIアシスタント
フィットネスおよび栄養プラットフォームは、ユーザーにリアルタイムで自然な会話で応答し、ドメイン固有の計算(食事調整、カロリー追跡)を実行し、応答を音声で返すことができる音声ファーストのAIアシスタントを必要としていました。これはすべて、真に会話的な体験のために1秒未満の遅延で行われるものです。
プロジェクトを相談する
課題
実稼働レベルの音声AIアシスタントを構築するには、独自のリアルタイムエンジニアリング上の課題がありました。
- 遅延 — 従来のspeech-to-text → LLM → text-to-speechパイプラインでは3〜5秒の遅延が発生し、会話の流れが途切れていました
- Function Calling — アシスタントは、単なるチャットとしてではなく、会話の途中でドメインロジック(栄養計算、食事プラン調整)を実行する必要がありました
- Audio Streaming — 双方向オーディオは、バッファリングの途切れやエコーの問題なしに継続的に流れる必要がありました
- Context Awareness — アシスタントは、割り込みを処理しながら、会話のターン全体でコンテキストを維持する必要がありました
- Multi-Language — ユーザーは異なる言語で話し、同じ言語での応答を期待していました
- Session Isolation — 各音声セッションは、クロストークなしで独立した状態管理を必要としました
私たちのソリューション
当社は、GoogleのGemini Live APIを搭載し、ネイティブオーディオ機能、ドメイン固有の計算のためのカスタムfunction calling機能、およびWebSocketベースのaudio streamingを備えたReactフロントエンドを備えたリアルタイム音声AIアシスタントを構築しました。
アーキテクチャ
- AI Model: ネイティブオーディオ入出力とfunction calling機能を持つGemini
- Backend: 双方向オーディオ用のWebSocketエンドポイントを備えたPython/FastAPI
- Audio Pipeline: リアルタイムストリーミングを備えたマイク/スピーカーI/O用のPyAudio
- Frontend: セッション制御UI用のViteとTailwind CSSを備えたReact
- Communication: 低遅延JSONメッセージングおよびバイナリオオーディオ転送用のWebSocket
- Multimodal: 視覚的コンテキストのためのオプションのカメラおよびスクリーンキャプチャ
リアルタイムオーディオパイプライン
双方向ストリーミング
システムは両方向で連続的なオーディオストリームを維持します。
- Input: 16kHzモノラルでキャプチャされ、小さなフレームに分割され、リアルタイムでAIモデルにストリーミングされるマイクオーディオ
- Output: 24kHzで受信され、すぐにスピーカーから再生されるAI生成音声
- No Batching: オーディオチャンクはキャプチャされたとおりに送信されます。蓄積による遅延はありません。
- Interrupt Handling: ユーザーは応答中にアシスタントを自然に中断できます
オーディオ処理
- 入出力両方で16ビットPCMフォーマット
- 音声用に最適化された個別のサンプルレート(16kHzキャプチャ、24kHz再生)
- 最小限の遅延のための小さなバッファサイズ
- ターン間の開始/停止の途切れがない連続ストリーミング
Function Calling統合
仕組み
ドメイン固有の計算が必要な場合、AIモデルは会話の途中でローカルPython関数を呼び出すことができます。
- ユーザーがリクエストを話します(例:「今日ランチを食べ損ねた」)
- AIモデルが意図を書き起こし、理解します
- モデルはfunction callが必要であると判断し、構造化されたリクエストを送信します
- バックエンドは関数名、引数、呼び出しIDを抽出します
- ローカル関数がドメイン計算を実行します
- 結果は構造化された応答としてモデルに送り返されます
- モデルは結果を組み込んだ自然言語の音声応答を生成します
ドメイン機能
システムは、次のようなシナリオで栄養に焦点を当てたfunction callingをサポートしています。
- 食事の欠食 — 欠食した主要栄養素を残りの食事に再配分します
- 予定外の食事 — 予期せぬ摂取量を補うために今後の食事を調整します
- 食事の代替 — マクロ栄養素の目標を維持しながら食材を交換します
- 活動追跡 — カロリー消費量を推定し、栄養バッファを調整します
各関数は、食品ごとの栄養プロファイルを持つマクロデータベースを使用し、自然な応答のためにわずかな確率的変動を伴う動的な計算を実行します。
実行の安全性
- 重複を防ぐため、関数実行中はマイク入力が一時停止されます
- 古いコンテキストを避けるため、保留中のオーディオフレームは破棄されます
- 関数実行が失敗した場合でも、エラー応答は適切に送り返されます
- 関数完了後すぐに通常のストリーミングが再開されます
バックエンドアーキテクチャ
FastAPI WebSocketサーバー
- すべてのクライアント通信のための単一のWebSocketエンドポイント
- セッションライフサイクル管理(開始、停止、ping/pongヘルスチェック)
- セッションロックにより、一度に1つのアクティブセッションのみ
- 開発環境向けのCORSミドルウェア
- 監視用のヘルスチェックエンドポイント
セッション管理
- クライアント接続時にモード選択(オーディオのみ、カメラ、またはスクリーン)付きでセッションが作成されます
- バックグラウンドのasyncタスクがオーディオキャプチャ、処理、再生を並行して処理します
- リソースクリーンアップを伴う正常な切断
- APIキーの検証とエラー伝播
マルチモーダル入力(オプション)
音声以外に、システムはオプションの視覚的コンテキストをサポートしています。
- カメラモード — 会話における視覚的コンテキストのためにウェブカメラフレーム(1fps)をストリーミングします
- スクリーンモード — 画面上の情報を議論するためにスクリーンコンテンツをキャプチャします
- 画像は送信前にリサイズおよび圧縮されます
- 視覚的コンテキストは、AIが関連性の高い応答を提供する能力を向上させます
フロントエンドインターフェース
- セッション制御 — 明確なステータスインジケータ付きでの聞き取り開始/停止
- ステータス表示 — リアルタイム接続およびセッション状態(idle、connecting、active、error)
- テーマサポート — 永続性のあるライト/ダークモード
- ガイド付きウォークスルー — 初めてのユーザー向けステップバイステップデモ
- WebSocket管理 — 自動再接続ロジック
AIモデル設定
- ネイティブオーディオモダリティ(独立したSTT/TTSパイプラインなし)
- 複数のプリセット音声からの設定可能な音声選択
- アシスタントのパーソナリティ、応答スタイル、言語処理を定義するシステム指示
- パラメータスキーマ付きの利用可能なすべての関数のTool定義
- 同じ言語での応答を伴う自動言語検出
主要機能
- 1秒未満の遅延 — ネイティブオーディオモデルがSTT/TTSパイプラインのオーバーヘッドを排除
- リアルタイム双方向オーディオ — チャンクあたり50ms未満の遅延での連続ストリーミング
- Function Calling — 会話の途中で実行されるドメイン固有の計算
- 自然な割り込み — ユーザーは特別なコマンドなしでアシスタントを自然に中断できます
- 多言語対応 — 同じ言語での応答を伴う自動言語検出
- マルチモーダル入力 — 視覚的理解のためのオプションのカメラおよびスクリーンコンテキスト
- セッション管理 — ロックとリソースクリーンアップを伴うセッションライフサイクル制御
- マクロ計算 — 食品ごとのマクロプロファイルによる動的な栄養調整
- エラー回復 — 関数障害およびネットワーク中断の適切な処理
- 拡張性 — スキーマとハンドラを定義することで新しい機能を追加でき、アーキテクチャの変更は不要です
成果
技術スタック
caseStudyDetail.more ケーススタディ
その他の技術実装事例をご覧ください
Kickly: AIを活用したスタートアップ向けプロジェクトプラットフォーム
Kicklyは、AIを活用したスタートアップ向けプロジェクト管理プラットフォームです。スマートなタスク自動化、チームコラボレーション、リアルタイムの進捗追跡を一つの製品に統合しています。
Kickly: AIを活用したスタートアップ向けプロジェクトプラットフォーム
Kicklyは、AIを活用したスタートアップ向けプロジェクト管理プラットフォームです。スマートなタスク自動化、チームコラボレーション、リアルタイムの進捗追跡を一つの製品に統合しています。
よくある質問
MicrocosmWorksは、ユーザーの音声をリアルタイムのチャンクでASRエンジンにストリーミングし、ユーザーが話し終える前にストリーミング文字起こしを使用してLLM推論を開始し、応答の最初のトークンでテキスト読み上げ合成を開始する双方向WebSocketオーディオパイプラインを設計しました。このパイプライン化されたアプローチにより、発話終了から最初の音声出力までの応答レイテンシを800ms未満に抑え、ユーザーはこれを自然な会話のやり取りとして認識します。
MicrocosmWorksは、LLMが会話のコンテキストに基づいて、予約の受付、データベースへの問い合わせ、ワークフローのトリガーといった事前定義されたAPIsを呼び出し、その結果を自然な形で発信者に音声で伝えることができる、構造化されたファンクションコーリングを統合しました。このシステムには、支払いまたはキャンセルといった重要なアクションに対する確認フローが含まれており、アシスタントが口頭で詳細を確認し、実行する前に発信者の明確な承認を待ちます。
はい、MicrocosmWorksはバージイン検出を実装しており、これにより発信者はアシスタントが応答中に割り込むことができ、音声再生を即座に停止して新しい発話を処理します。ASRパイプラインにはノイズキャンセリングの前処理が含まれており、多様なアクセントに合わせて微調整されたモデルをサポートしているため、車内、オフィス、公共スペースからの電話によくある騒がしい環境においても90%を超える文字起こし精度を達成しています。
MicrocosmWorks は、SIP trunk 連携と Twilio 接続で音声アシスタントを構築しました。これにより、発信者がアプリをインストールしたり、特別なインターフェースを使用したりすることなく、既存のビジネス電話番号、IVR システム、コンタクトセンタープラットフォームへのデプロイをサポートします。プラットフォームは、AI が会話に人間の専門知識が必要であると判断した場合に、通話ルーティング、キュー管理、および有人エージェントへのウォームトランスファーを処理します。
MicrocosmWorksは、時給30ドルから50ドルのレートでカスタム音声 AI アシスタントを開発しています。初期構築費用はマネージドプラットフォームのセットアップ費用を上回りますが、カスタムソリューションは、Dialogflow CX や Amazon Lex のようなプラットフォームが課す分単位の利用料金を回避でき、これは高い通話量で顕著になります。カスタム構築はまた、LLM、音声ペルソナ、および関数呼び出しロジックに対する完全な制御を提供しますが、マネージドプラットフォームはこれを厳格なダイアログフローパラダイムで制約します。