31.【音声生成AI設計】音声AIをFSMで分解する|発話・無音・割り込みはすべて状態だった

tags: [“音声生成AI”, “FSM”, “設計思想”, “制御構造”, “生成AI”]


🧩【音声生成AI設計】音声AIをFSMで分解する

―― 🔄 発話・無音・割り込みはすべて状態だった

前回の記事(30)では、

🎧 音声生成AIは生成問題ではなく制御問題である

という結論を出した。

今回はそれを一段掘り下げ、
音声AIをFSM(有限状態機械)として完全に分解する。


🎯 本記事の目的

👉 まだ音は出さない。
出す前に、壊れない骨組みを作る。


❌ よくある失敗構造(FSM不在)

多くの音声AIは、暗黙的にこう扱われている。

これは 状態を定義していない のと同じ。

結果として:

が起きる。


🧠 音声AIは「状態の塊」

音声AIの挙動は、すべて次の問いに分解できる。

👉 これに答えるのが FSM


📦 最小FSM構成(まずはこれだけ)

音声AIの最小構成FSMは、以下で足りる。

🧩 States(状態)


🔄 状態遷移の全体像

💤 Idle
  │ (音声入力開始)
  ▼
👂 Listening
  │ (入力終了)
  ▼
🧠 Thinking
  │ (生成完了)
  ▼
🔊 Speaking
  │ (発話完了)
  ▼
💤 Idle

🔊 Speaking
  │ (人が喋る)
  ▼
✋ Interrupted
  │ (処理決定)
  ├──▶ 👂 Listening
  └──▶ 💤 Idle

全状態
  │ (例外)
  ▼
🚨 Error / Fallback

👉 音声AIの挙動は、これでほぼ尽きる。


⚠️ 重要:FSMは「音声の外側」にある

よくある誤解:

正解は:

🧩 FSMが音声・LLMの外側に立つ

FSMは、

強制的に管理する。


🤖 LLMが関与してよい状態・ダメな状態

⭕ LLMを使ってよい

❌ LLMを使ってはいけない

👉
時間制約のある状態にLLMを入れると壊れる。


🧊 「無音」はバグではない

無音フリーズはよくあるが、
FSM的には単なる 状態未定義

👉 遷移条件を書いていないだけ


🧩 FSM化の最大のメリット

これは モデル性能とは無関係


🧩 FSM可視化デモ

音声AIをFSMとして分解した状態遷移を、
画面上で確認できる簡易デモを用意しました。

▶ デモ
https://samizo-aitl.github.io/qiita-articles/demos/audio-fsm-visual/

本デモは音を出さず、
状態と遷移の構造理解に特化しています。


📌 まとめ


🔜 次の記事(32)

次は ちゃんと音が出る
ただし、FSMの言うことを聞く音だけ


(GitHub上のMarkdownを正本とし、Qiitaには抜粋・調整して投稿)