音声会話機能
Voice Conversation System
概要
シャノンは Discord のボイスチャンネルでリアルタイム音声会話ができます。 ユーザーの音声は Groq Whisper で高速文字起こしされ、フィラーシステムが即座に音声リアクションを返すことで、 体感レイテンシ約600msの自然な会話を実現します。
テキスト応答は VOICEPEAK で感情付き音声に変換され、 文単位のストリーミングで途切れなく再生されます。

音声会話パイプライン
STT → フィラー選択(+並列LLM生成)→ ストリーミングTTS の4段階パイプライン。
Discord音声をOpus→PCM→WAV変換し、Groq Whisper large-v3-turbo で文字起こし
ユーザー発話を分析し、150+のプリキャッシュ済み音声から最適なフィラーを選択
フィラー再生と並列でLLM回答を生成。ツール実行も可能
文単位でストリーミング合成。感情パラメータ(喜び・楽しさ・怒り・悲しみ)を反映
体感レイテンシ ~600ms
STT(300ms) + フィラー選択(300ms) で即座に音声リアクション。 LLM回答はフィラー再生中にバックグラウンドで並列生成。
フィラーシステム
150以上のプリキャッシュ済み音声フィラーで、LLM応答を待つ沈黙を埋めます。 gpt-4.1-mini が文脈に応じて最適なフィラーを選択。
アトミック
~50種0.5-1.5s
そうなんだ!/ まじで!?/ ふむふむ / えっとね
フレーズ
~20種1.5-3s
しょうがないなぁ。教えてあげるよ。/ ん~と、ちょっと待ちなよね。
コンボ
~30定義組み合わせ
まじで!?→えっとね / うんうん→ちょっと待ってね
フィラーオンリーモード
挨拶・短い相槌はフィラーだけで完結。LLM呼び出しをスキップして超低遅延応答。
例: 「おはよう」→ 挨拶フィラーのみ再生
ツール実行前フィラー
ツール呼び出しが必要な場合、「ちょっと待ちなよね」等の専用フィラーを再生。 ツール名ごとのカスタムフィラーも対応。
例: google-search → 「ネットの世界に聞いてみるか」
音声合成(VOICEPEAK)
VOICEPEAK Japanese Female4 ナレーターで、感情パラメータ付きの音声を生成。 文単位ストリーミングで途切れのない再生を実現。
感情マッピング(Plutchik → VOICEPEAK)
| Plutchik 感情 | VOICEPEAK パラメータ | 係数 |
|---|---|---|
| 喜び (Joy) | happy | ×1.0 |
| 期待 (Anticipation) | fun | ×0.8 |
| 怒り (Anger) | angry | ×1.0 |
| 悲しみ (Sadness) | sad | ×1.0 |
| 嫌悪 (Disgust) | angry | ×0.5 |
| 恐れ (Fear) | sad | ×0.5 |
文単位ストリーミング
音声認識(STT)
Groq Whisper による高速文字起こし。OpenAI比で3〜5倍の速度を実現。
Groq Whisper(主系統)
モデル: whisper-large-v3-turbo
レイテンシ: ~300ms
言語: ja(日本語固定)
コンテキスト: 「シャノンとの日常会話です。」
OpenAI Whisper(フォールバック)
モデル: whisper-1
レイテンシ: ~1-2s
Groq API Key 未設定時に自動切替
ハルシネーションフィルター
Whisper は無音・短音声で誤認識(YouTube登録メッセージ等)を生成する問題があるため、 20以上の既知ハルシネーションパターンをフィルターリストで除外しています。
Discord 連携
@discordjs/voice でボイスチャンネルに参加。PTTボタンで録音を制御。
PTT(Push-to-Talk)フロー
処理ステータス表示
音声モード専用ツール
音声会話ではレイテンシを抑えるため、高速なツールのみに制限されています。
レイテンシ内訳
| ステージ | 時間 |
|---|---|
| STT(Groq) | ~300ms |
| フィラー選択 | ~300ms |
| フィラー再生 | 500-2000ms |
| LLM生成 | ~2-5s |
| TTS(1文あたり) | ~800-1500ms |
| 初回音声まで | ~600ms |

シャノンの声、聞いてみない?