コンテンツにスキップ
Zenn Dev Taka4 Articles 31a959273c87e1

空中戦の会議を止めよう!自動書記係さん — AmiVoice × LLM × React Flow で作る ShokiGakari

  • URL: https://zenn.dev/taka4/articles/31a959273c87e1
  • 日付: 2026-06-24
  • Tier: Tier 3
  • 要旨: Web 会議の議論が空中戦になるのを防ぐため、AmiVoice(音声認識)+ LLM + React Flow を組み合わせた自動書記システム「ShokiGakari」を実装。話し始めると発話が即「仮ノード」として表示され、1.5秒無音をトリガーに LLM がツリー全体を整理して「確定ノード」に昇格。マインドマップが会話そのものになる。

詳細

AmiVoice を選んだのは、Web Speech API と異なり、確定認識(A イベント)と部分結果(U イベント)を WebSocket で明確に分離。発話開始も S イベント通知で、音声検出ロジックを音声認識側に委譲できる。React Flow v12 は dynamic グラフと差分更新(setNodes/setEdges で delta 直接適用)が得意。アーキテクチャは Browser → ScriptProcessorNode で PCM(16bit 16kHz) 取得、Node.js WS サーバーで Orchestrator が 2フェーズ制御を担当。Phase 1(確定テキスト即仮ノード追加)では SilenceDetector(1.5s)でタイマー管理。Phase 2(無音検出で LLM 起動)では現在のツリー JSON と直近の発話を渡し、{ add, update, remove } delta のみ返却させる(説明不要指示で説明文を抑制)。ブラウザは pending ノード全消去してから delta を順に適用。LLM プロバイダを環境変数で claude-cli / claude-api / ollama に切り替え可能。