Silero VAD plugin
参照元: LiveKit Agents Documentation ロードマップ: 学習ロードマップ
公式ドキュメント: https://docs.livekit.io/agents/logic/turns/vad/
JSレンダリングの都合でコード例の直接取得が不安定だったため、以下の公式GitHubソースをあわせて参照した。
- https://raw.githubusercontent.com/livekit/agents/main/livekit-plugins/livekit-plugins-silero/livekit/plugins/silero/vad.py
- https://github.com/livekit/agents/blob/main/README.md
What(何についてか)
Silero VAD pluginは、LiveKit Agentsでユーザー発話区間を検出するためのコンポーネントである。VADは「音声か無音か」をフレーム単位で判定し、ターン検出に必要な境界情報を供給する。これにより、会話の開始・終了タイミングを機械的に安定化できる。
LiveKitの推奨は、VAD単体ではなくturn detectorと組み合わせる構成である。VADが低レイヤで音声区間を切り出し、turn detectorが会話的な終了判定を担う。
Why(なぜ必要か)
音声エージェントは、ユーザーの短い間や言い淀みを含む自然発話を扱うため、発話区間の切り出し品質が直接UXに影響する。VADの設定が不適切な場合、語頭欠落、早切り、割り込み過多、レスポンス遅延が発生しやすい。
また、VADで「話している時間」を特定できると、STT処理を必要区間へ集中させられるため、不要な計算を抑えやすい。
How(どう動くか)
Silero VADはVAD.load(...)で初期化され、AgentSession(vad=...)に注入して利用する。load()はモデルをメモリへロードするためブロッキングで、初回コストがある。公式実装でもprewarm経由での事前ロードを推奨している。
graph TD A["Worker start"] --> B["prewarm: VAD.load"] B --> C["proc.userdata に保存"] C --> D["entrypoint で再利用"] D --> E["AgentSession に vad を注入"] E --> F["音声フレーム判定"] F --> G["Turn 判定へ境界情報を供給"]
Prewarmの要点
VAD.load()は重い初期化処理であるため、ジョブ開始時に毎回実行するのではなく、prewarmで一度ロードして再利用する設計が基本になる。これにより、最初のユーザー発話時のコールドスタート遅延を抑制できる。
Configuration(主要パラメータ)
| パラメータ | 役割 | 主要トレードオフ |
|---|---|---|
min_speech_duration | 発話開始認定に必要な最短時間 | 低いほど反応は速いがノイズ誤検知が増えやすい |
min_silence_duration | 発話終了とみなす無音待ち時間 | 低いほどテンポは速いが早切りしやすい |
prefix_padding_duration | 発話先頭への前置き余白 | 大きいほど語頭欠落に強いが前方ノイズを拾いやすい |
max_buffered_speech | バッファ保持上限(秒) | 大きいほど長文に強いがリソース負荷が上がる |
activation_threshold | speech開始しきい値 | 高いほど保守的、低いほど敏感 |
deactivation_threshold | speech終了しきい値 | 開始/終了を分離してチャタリングを抑える |
sample_rate | 推論サンプルレート | 8000/16000のみ対応 |
force_cpu | CPU推論固定 | 環境差を減らし再現性を上げる |
閾値の読み方(重要)
activation_thresholdとdeactivation_thresholdは音量(dB)そのものではなく、モデルが出力するspeech確信度に対する閾値である。2つを分けることで、境界付近のON/OFF振動(チャタリング)を抑制できる。公式実装ではdeactivation_threshold未指定時にmax(activation_threshold - 0.15, 0.01)が適用される。
Key Concepts
| 用語 | 説明 |
|---|---|
| VAD | Voice Activity Detection。発話/無音を判定する下層コンポーネント |
| Prewarm | ジョブ開始前にモデルを事前ロードして初回遅延を下げる仕組み |
| Turn detection | 会話としてのターン終了を判定する上位ロジック |
| Hysteresis | 開始閾値と終了閾値を分離して揺れを抑える手法 |
一言まとめ
Silero VADはターン検出の土台であり、実運用の品質はprewarmと閾値設計で決まる。