33.【音声生成AI設計】割り込みで音声AIは壊れる|Speaking中に人が喋ったら何が起きるか
tags: [“音声生成AI”, “FSM”, “割り込み”, “設計思想”, “制御構造”]
✋【音声生成AI設計】割り込みで音声AIは壊れる
―― 🔥 Speaking中に人が喋ったら何が起きるか
音声AIが一番派手に壊れる瞬間は、ここだ。
🔊 AIが喋っている最中に
👤 人が喋り始める
多くの音声AIデモは、
この瞬間を意図的に避けている。
理由は単純で、
設計していないから。
🎯 本記事の目的
- 割り込みが「例外」ではないことを示す
- Speaking 中断を FSM 拡張として扱う
- 音声AIが壊れない最低条件を定義する
👉 会話らしさはまだ要らない。
まずは壊れないこと。
❌ よくある破綻パターン
① 🔊 喋り続ける
- 人の音声を無視
- マイク入力と出力が衝突
② 🧊 無音フリーズ
- TTS停止
- 状態が分からなくなる
③ 🤯 二重状態
- Speaking なのか Listening なのか不明
- FSM が破壊される
👉 すべて 状態遷移未定義。
🧠 割り込みは「異常」ではない
重要な視点:
✋ 割り込みは通常動作である
人間同士の会話でも、
- 被せる
- 相槌
- 言い直し
は常に起きている。
音声AIだけ
「割り込まれない前提」で作るのは破綻必至。
🧩 FSMに割り込み状態を追加する
前回(32)のFSMに、
割り込み専用状態を追加する。
📦 States(追加)
-
✋ Interrupted
Speaking 中に外部音声を検出 -
👂 Listening
割り込み後の入力受付
🔄 割り込み込みFSM全体像
💤 Idle
│
▼
🔊 Speaking
│ (人の音声検出)
▼
✋ Interrupted
│
├──▶ 👂 Listening (話を聞く)
└──▶ 💤 Idle (中断して終了)
🔑 ポイントは:
- Speaking → Interrupted は 即時
- Thinking を経由しない
- FSM が 強制的に主導権を奪う
⏱ 割り込み判定は「賢く」やらない
ここでやりがちな失敗:
- ❌ LLMで「割り込みかどうか」判断
- ❌ 内容を理解してから止める
正解は:
🎚 物理量で即断する
例:
- 音量閾値
- マイク入力レベル
- VAD(Voice Activity Detection)
👉 意味理解は後回し。
🔊 Speaking中にやるべきこと
割り込みが検出された瞬間:
- 🔇 TTS を即停止
- 🧩 FSM を Interrupted に遷移
- 🎤 出力と入力を分離
- 👂 Listening へ移行
この順番を崩すと壊れる。
🚫 割り込み処理でやってはいけないこと
- ❌ 喋り終わるまで待つ
- ❌ 自然な切り方を考える
- ❌ 会話の流れを維持しようとする
👉 それは 制御ではなく演出。
🧠 割り込みFSMの最大メリット
- 二重発話が起きない
- 無音フリーズしない
- 「今どの状態か」が必ず分かる
- デバッグ可能
🎯 これだけで、
実用音声AIの 合格ライン に入る。
✋ 割り込みデモ
Speaking 中に割り込みが発生した場合の挙動を、
FSMとして確認できる音声デモを用意しました。
▶ デモ
https://samizo-aitl.github.io/qiita-articles/demos/audio-fsm-interrupt/
本デモでは、
- 音声の即時停止
- Speaking → Interrupted の遷移
- FSM主導の制御
を確認できます。
📌 まとめ
- ✋ 割り込みは通常動作
- 🔊 Speaking 中断は即時
- 🧩 FSMが主導権を持つ
- 🎚 判定は物理量で行う
- 🤖 LLMを割り込み判断に使わない
🔜 次の記事(34)
- 🤖 LLMを「安全に」接続する
- Thinking 状態だけに入れる理由
- 音声×LLM最小結合構造
次でようやく
LLMが戻ってくる。
(GitHub上のMarkdownを正本とし、Qiitaには抜粋・調整して投稿)