In Silico

AIエージェント

音声エージェントのターン検出:VADだけの判定と発話終了モデルの違い

2026/10/28 (更新: 2026/11/3)

  • ターン検出
  • 音声エージェント
  • 音声AI
  • VAD
  • LiveKit Agents
  • Smart Turn
  • OpenAI Realtime API
  • Voxtral 3
  • eot-bench
  • semantic_vad
  • Silero VAD
  • 発話終了モデル
  • エンドポインティング
  • 待ち時間
  • 割り込み
  • 抑揚
  • 文字起こし
  • 音声区間検出
  • Pipecat
  • LiveKit Inference
  • v1-mini
  • Whisper Tiny
  • 無音
目次
背景・問い・要点
背景

電話や Web の通話に応答する音声エージェントは、話し手の発話を聞き取り、言語モデルで返答を作り、音声で返す。返答を始める前に、エージェントは話し手が話し終えたかを判定する。この判定を、ターン検出と呼ぶ。判定が早すぎると、話し手が文の途中で息をついただけでエージェントが話し始め、発話を遮る。判定が遅すぎると、返答が始まるまで無音が続く。

ターン検出には、音声区間検出(VAD、Voice Activity Detection)が使われてきた。VAD は、短い音声の区間ごとに人の声が含まれるかを判定する小さなモデルである。VAD が声を検出しなくなってから無音が一定時間続いたら発話が終わったとみなす方式を、エンドポインティングと呼ぶ。待つ長さは、既定では開発者が一つだけ決める。この方式は無音の長さしか見ないので、文の途中の間と文の終わりを区別できない。

最近は、VAD が無音を見つけた時点で、話し手に続きがあるかを予測する発話終了モデルを動かし、予測に応じて待ち時間を伸び縮みさせる方式が出ている。発話終了モデルの入力は、音声を文字にした文字起こしの場合と、音声そのものの場合がある。この記事は、作り手が設計の理由を一次資料に書いている LiveKit Agents、Pipecat の Smart Turn、OpenAI の Realtime API、Mistral の Voxtral 3 を取り上げる。

問い

話し終わりを VAD だけで決める方式と、VAD に発話終了モデルを足す方式は、何が違い、どの条件で使い分けるのか。

要点

VAD は声の有無を判定する部品で、ターン検出はその結果を使って話し終わりを決める処理である。途中の間が多く、使う言語が対応一覧に入る発話なら、開発者は VAD に発話終了モデルを足し、予測で待ち時間を変える方式を選ぶ。

VAD だけの方式は既定では待ち時間が一つに固定されるので、待ち時間を短くすればエージェントが途中の間で話し手を遮り、長くすれば返答が遅れる。発話終了モデルは VAD を置き換えず、無音の時点でだけ動く。開発者が発話終了モデルを足す場合は、推論を動かす場所と、作り手自身の測定にとどまる評価を確かめる。

モデル・例示

同じ 0.7 秒の間で、VAD だけの方式と発話終了モデルを足した方式の待ち時間が分かれる

※ この節の例は、説明のために作った架空のものです。

VAD だけの方式では待ち時間が間の種類によらず一つに決まり、発話終了モデルを足した方式では無音の時点の予測が待ち時間を決める。ピザ店の音声エージェントへの一回の注文で、この違いが返答の時刻にどう出るかを数で確かめる。

発信者が「大きいピザを一つ」と言って 0.7 秒黙り、「ガーリックパンも。」と言って話し終える場合を考える。間は二つある。「一つ」の後の 0.7 秒が途中の間で、「ガーリックパンも。」の後が最後の間である。

比べる設定は二つで、どちらも LiveKit の値を使う。VAD だけの方式では、待ち時間を固定の 0.5 秒にする。これは LiveKit の従来の既定値である1。発話終了モデルを足した方式では、待ち時間の最短を 0.3 秒、最長を 2.5 秒にする。これは LiveKit の、音声を入力にする発話終了モデル(以下、音声検出器)を使うときの既定値である2。VAD が無音とみなす最小の長さは、両方とも LiveKit が許す下限の 0.25 秒にする2。待ち時間はどちらも最後に声が検出された時点から数え、実際の待ちは VAD の無音の長さと待ち時間の長いほうになる2。VAD の無音の長さが 0.25 秒で待ち時間が 0.3 秒なら、実際の待ちは 0.3 秒である。説明を簡単にするため、モデルの推論は最後の声から 0.3 秒の時点までに終わるとする。

発話終了モデルが二つの間を区別できる理由を、LiveKit は次のように説明する3。「大きいピザを一つ」で止まった時点の文字起こしは、後に「ガーリックパンも」が続く場合も続かない場合も同じである。違いは言い方にあり、人は抑揚、音の高さ、リズムで続きの有無を判断する。音声を入力にする発話終了モデルは、止まるまでの音声を受け取るので、言い方を判定に使える。ここでは、発信者が「一つ」を続きのある言い方で言い、モデルが途中の間を「続きがある」、最後の間を「話し終えた」と正しく予測したとする。

まず、正常に話し終える最後の間を比べる。VAD だけの方式では、最後の声から 0.5 秒で返答が始まる。発話終了モデルを足した方式は、次の順で進む。

  1. 発信者VAD1. 「ガーリックパンも。」と言い終えて黙る
  2. VADエージェント2. 無音が 0.25 秒続いたと伝える
  3. エージェント発話終了モデル3. ここまでの音声を渡し、続きがあるかを尋ねる
  4. 発話終了モデルエージェント4. 話し終えたと予測する
  5. エージェント5. 最後の声から 0.3 秒の時点で発話の終わりを確定し、返答を始める

返答は最後の声から 0.3 秒で始まり、VAD だけの方式より 0.5−0.3=0.20.5 - 0.3 = 0.2 秒早い。

次に、途中の間を比べる。VAD だけの方式では、「一つ」の後の 0.5 秒の時点で待ち時間が尽き、エージェントが返答を始める。発信者は 0.7 秒の時点で「ガーリックパンも」と言い始めるので、返答の開始から 0.2 秒後に二人の声が重なる。発話終了モデルを足した方式は、次の順で進む。

  1. 発信者VAD1. 「大きいピザを一つ」と言って黙る
  2. VADエージェント2. 無音が 0.25 秒続いたと伝える
  3. エージェント発話終了モデル3. ここまでの音声を渡し、続きがあるかを尋ねる
  4. 発話終了モデルエージェント4. 続きがあると予測する
  5. エージェント5. 待ち時間を最長の 2.5 秒にし、返答を始めない
  6. 発信者VAD6. 黙ってから 0.7 秒後に「ガーリックパンも」と言い始める
  7. VADエージェント7. 声が再開したと伝える
  8. エージェント8. 待ち時間を取り消し、続きを聞く
  1. VAD だけの方式で返答の時刻を決めるのは、固定した待ち時間だけである。途中の間が待ち時間の 0.5 秒より長ければ遮る。遮らないように待ち時間を 0.7 秒より長くすると、最後の間の返答も同じだけ遅れる。
  2. 発話終了モデルを足した方式で待ち時間を決めるのは、予測である。途中の間では最長の 2.5 秒まで延び、最後の間では最短の 0.3 秒まで縮む。最後の間の 0.2 秒の差は、VAD の無音の最小の長さが 0.3 秒より短いときにだけ出る。Silero VAD の既定の 0.55 秒のままなら、実際の待ちはどちらの方式でも約 0.55 秒になる2。
  3. 予測が外れると、差は逆向きに出る。途中の間を「話し終えた」と誤れば待ち時間は 0.3 秒に縮み、VAD だけの方式より早く遮る。間が 3 秒続けば、「続きがある」と予測しても最長の 2.5 秒で待ち時間が尽きる。

VAD だけの判定は、一つの待ち時間で割り込みと応答の遅れを同時には減らせない

VAD だけの判定では、待ち時間を短くすると割り込みが増え、長くすると応答が遅れる。音声エージェント用フレームワーク LiveKit Agents を作る LiveKit 社は、VAD が無音を検出した後に待つ時間(min_endpointing_delay)について、従来の既定値 0.5 秒を下げると割り込みが頻発し、1 秒から 2 秒に上げるとエージェントが反応しないと感じられると書く1。VAD が見るのは音声の有無だけなので、話し手が「お考えは分かりますが、」と言いさして黙った場合も、この方式は無音の長さだけで話し終わりとみなす1。LiveKit の待ち時間の設定には、それまでの会話の間の長さの移動平均から、待ち時間を最短と最長の間で動かす dynamic モードもある(既定は fixed)2。このモードも、目の前の間が途中か最後かを見分けて待ち時間を変えるものではない。

OpenAI が提供する、音声を入力して音声を返すホスト型の API(Application Programming Interface)である Realtime API でも、既定の方式 server_vad は同じ構造をとる。無音が silence_duration_ms(設定例は 500 ミリ秒)続くと、server_vad は発話の終わりとみなす4。

割り込みと遅れの関係を数で示すのが、LiveKit が公開するベンチマーク eot-bench である。eot-bench は、話し終わっていない間でエージェントが返答を始めることを誤打ち切り、話し終わってから返答までに待つ時間を遅れと呼ぶ。遅れは推論の計算時間ではなく、待ち時間の長さである5。英語の表では、VAD だけの基準は、誤打ち切りを 5% に抑える設定で遅れが 1600 ミリ秒になる。許容する遅れを 600 ミリ秒にすると誤打ち切りは 21.7% に、300 ミリ秒にすると 55.6% になる5。同じ誤打ち切り 5% で、LiveKit Turn Detector v1 の遅れは 543 ミリ秒である5。差は 1600−543=10571600 - 543 = 1057 ミリ秒で、VAD だけの基準の遅れは v1 の約 2.9 倍である。同じ評価は日本語を含む 14 言語でも測られている。日本語では、誤打ち切り 5% での遅れは VAD だけの基準が 1200 ミリ秒、v1 が 321 ミリ秒で、差は 1200−321=8791200 - 321 = 879 ミリ秒である5。

発話終了モデルはVADを置き換えず、VADが無音を見つけた時点でだけ動いて待ち時間を決める

LiveKit と Smart Turn では、発話終了モデルは VAD を置き換えない。LiveKit の文書は、発話終了モデルが VAD の上に判定の手がかりを足すと書く2。Smart Turn は、オープンソースの音声エージェント用フレームワーク Pipecat のプロジェクトが公開する発話終了モデルである。Smart Turn の README は、モデルを Silero VAD のような軽い VAD と組み合わせ、無音の間だけ動かすと書く6。

Smart Turn は、VAD が無音を検出したら、そこまでの話し手の音声全体を入力に予測する。入力は 16 kHz の音声で、最大 8 秒分である。モデルの実行中に新しい発話が検出されたら、新しい部分だけでなく、新しい音声を含めた全体でモデルを実行し直す6。

LiveKit では、予測が待ち時間を決める。既定の待ち時間は 0.5 秒から 3.0 秒の幅を持ち、音声検出器を使うと 0.3 秒から 2.5 秒になる2。音声検出器には VAD が必要で、VAD の無音の最小の長さは 0.25 秒以上に設定する2。モデルが約 1 秒以内に予測を返さなければ、エージェントはそのまま発話を確定する2。そのため、モデルの応答が遅れても発話の確定は止まらない。

VAD が無音を見つけた時点で予測を使う構造は、2024 年の LiveKit の最初のモデルから変わっていない。そのモデルも、予測を使って VAD の無音の待ち時間を動的に短くも長くもしていた1。変わったのは、予測を出すモデルの入力である。

この構造の利点は、モデルを動かす時間が無音の間に限られることである。Smart Turn の README は、推論時間を一部の CPU(Central Processing Unit)で最短 10 ミリ秒、多くのクラウドのインスタンスで 100 ミリ秒未満と書く6。欠点は、モデルの誤りがそのまま待ち時間に出ることである。話し終えた間を「続きがある」と誤れば、エージェントは最長の待ち時間まで待つ。LiveKit は 2024 年の最初のモデルについて、VAD だけの場合と比べて意図しない割り込みが 85% 減り、この誤りの割合は 3% だったと報告した1。

発話終了モデルの入力は、抑揚を使うために文字起こしから音声へ移っている

LiveKit は、判定の入力を文字起こしから音声へ移した理由を、文字にすると抑揚や間が消えるからだと説明する3。話し手が止まった時点の文字起こしは、後に続きがある場合とない場合で同じになりうる。人は抑揚、音の高さ、リズムで続きの有無を判断すると、LiveKit の 2026-06-17 の記事は書く3。同じ記事は、文字起こしを入力にすると最終の文字起こしが届くまで推論を始められず、その分応答が遅れるとも書く3。

LiveKit、Pipecat、Mistral の仕様は、この判断に沿って音声へ向かっている。LiveKit の文書は、文字で判定する検出器を非推奨とし、Agents SDK 2.0 で削除する予定だと書く2。Smart Turn は、Whisper Tiny を土台とする約 800 万パラメータのモデルで、音声そのものを入力にし、日本語を含む 23 言語に対応する6。Mistral が 2026 年 10 月に発表した Voxtral 3 は、音声認識・音声合成のモデル群と、LiveKit を土台にした音声エージェント用 SDK(Software Development Kit)からなる。Mistral は、リアルタイムの音声認識モデルに話し終わりの予測を組み込み、音響と意味の情報を使うと書く7。

判定をどこに置くかでは、作り手の考えが分かれる。Voxtral 3 は、予測を音声認識のモデルに組み込む。音声認識に組み込む型には、Deepgram Flux や AssemblyAI の製品もある8。eot-bench の英語の表では、誤打ち切り 5% での遅れは Deepgram Flux が 1151 ミリ秒、AssemblyAI が 1049 ミリ秒である5。LiveKit は、音声認識に内蔵された検出器は対応言語が不完全になりやすく、性能が提供者ごとにばらつくと主張し、判定を音声認識から切り離す設計を取る3。

OpenAI Realtime API の semantic_vad は、意味の分類器で話し終わりを判定する方式である。OpenAI の文書は、この分類器が話し手の発した単語に基づき、入力の音声を話し終えた確率で採点すると書く。確率が低ければ待ち時間まで待ち、高ければ待たない4。応答の積極性を表す eagerness を low、medium、high、auto から選んで、最大の待ち時間を調整する4。同じ eot-bench の英語の表で、OpenAI GPT Realtime 2 の誤打ち切り 5% での遅れは 1143 ミリ秒、日本語の表では 736 ミリ秒である5。

文字入力から音声入力へ移った効果を、eot-bench で確かめることはできない。eot-bench の表には LiveKit の文字で判定する検出器が載っておらず、同じ作り手の文字入力と音声入力を比べられないからである。音声を直接入力にする Smart Turn v3.2 でも、英語で許容する遅れ 300 ミリ秒での誤打ち切りは 35.2% である5。

発話終了モデルを足すかは、途中の間の多さと対応言語で決まり、足すなら推論の場所と測定者を確かめる

この記事の判断では、発話に途中の間が少なく、使う言語が発話終了モデルの対応言語に含まれないなら、VAD だけの方式が合う。モデルを足しても割り込みの減る余地が小さいからである。自前で運用する場合は、推論を動かす場所と費用の負担も増える。なお LiveKit Agents では、Realtime のモデルを使う場合を除き、ターン検出を指定しなければ検出器が既定で使われる2。反対に、途中の間が多い発話を扱い、使う言語が対応言語に含まれるなら、発話終了モデルを足す利点が大きいとこの記事は考える。

OpenAI の Realtime API だけを使うなら、semantic_vad は設定の一項目で足りるので、導入の負担が小さい。LiveKit の検出器を使いたい場合は、Realtime のモデルの内蔵のターン検出を無効にして、LiveKit の音声検出器を併用できる2。LiveKit の最初の文字で判定するモデルは、音声を直接受け取るモデルに使えなかった1。

対応言語は、使う言語ごとに開発者が確かめる。LiveKit の音声検出器は日本語を含む 14 言語に、Smart Turn は日本語を含む 23 言語に対応する26。音声認識を設定しない場合、LiveKit の検出器は英語の閾値で動く2。2024 年の文字で判定するモデルは英語だけだった1。対応言語は増えてきたが、使う言語が一覧に入るかは、現時点で開発者が確かめる項目である。

推論を動かす場所は、費用と遅れの両方を変える。LiveKit の完全な v1 は LiveKit Inference で動き、LiveKit Cloud 上のエージェントでは追加費用がない2。自前で運用するエージェントの本番では、既定で手元の CPU で動く軽量版の v1-mini が動く。v1 を使うと、Ship と Scale のプランでは開発用の枠を超えた分が要求ごとに課金される2。Smart Turn も手元で動き、重みも BSD-2-Clause ライセンスで公開されている6。eot-bench の英語の結果で、誤打ち切り 5% のときの遅れは、v1 が 543 ミリ秒、v1-mini が 1070 ミリ秒、Smart Turn v3.2 が 1051 ミリ秒である5。日本語の表では、v1 が 321 ミリ秒、v1-mini が 766 ミリ秒、Smart Turn v3.2 が 837 ミリ秒である5。この評価では、手元で動く二つの遅れはホスト型の v1 より、英語で約 500 ミリ秒、日本語で 445〜516 ミリ秒長い。日本語では、OpenAI GPT Realtime 2 の 736 ミリ秒もこの二つより短い5。同じ表には手元で動く ultraVAD もあり、日本語では 462 ミリ秒である5。ultraVAD は、Ultravox.ai が Llama-8B を土台に作ったモデルである9。

構造のある入力とは、クレジットカード番号、電話番号、住所のように、決まった形の番号や項目を読み上げる入力である。Smart Turn の README は、これらの入力用の「モード」を作るためにモデルへ文字の条件を加えることを、中期の目標に挙げる6。README は現行版にその機能があるとは書いていないので、Smart Turn でこの種の入力の扱いが改善されるかは未定である。LiveKit は、2024 年の文字で判定するモデルが、住所、電話番号、支払い情報の聞き取りで特に役立ったと書く1。

比較の数値を誰が測ったかも、開発者が確かめる項目である。eot-bench は LiveKit が作った評価で、LiveKit の v1 が最良の位置にある53。LiveKit は、確立した公開のベンチマークがなく、各提供者が非公開のデータで評価していると書く3。Deepgram は、きれいなノートパソコンのマイクで良く感じたモデルが、電話の通話では同じ成績を出すとは限らなかったと書き、自前の評価を作った8。Deepgram もターン検出のモデルを作る側で、2026 年 10 月 29 日には Pipecat の作り手 Daily の買収を発表した10。モデルの作り手以外が実施した評価は見当たらず、順位は作り手自身の報告にとどまる。VAD だけの基準は同じ評価の中で測られているので、英語の 1057 ミリ秒の差も、日本語の 879 ミリ秒の差も、同じ条件の値である。

出典10件
  1. LiveKit「Using a transformer to improve end of turn detection」LiveKit blog, 2024. https://blog.livekit.io/using-a-transformer-to-improve-end-of-turn-detection/ — VAD だけの方式の仕組みと問題、予測で無音の待ち時間を変える構造。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8

  2. LiveKit「LiveKit turn detector」LiveKit Documentation(2026-10-27 取得). https://docs.livekit.io/agents/build/turns/turn-detector/ — 待ち時間の既定値、音声検出器の 14 言語、文字検出器の非推奨、v1 と v1-mini の実行場所。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16

  3. LiveKit「Solving end-of-turn detection: LiveKit Turn Detector v1.0」LiveKit blog, 2026. https://livekit.com/blog/solving-end-of-turn-detection — 文字にすると抑揚が消える理由と、音声を直接入力にする設計。作り手の主張として読む。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7

  4. OpenAI「Voice activity detection (VAD)」Realtime API guide(2026-10-27 取得). https://platform.openai.com/docs/guides/realtime-vad — server_vad は無音で、semantic_vad は発した単語に基づく分類器で判定する。 ↩ ↩2 ↩3

  5. LiveKit「eot-bench」GitHub README と言語別の表(2026-10-27 取得). https://github.com/livekit/eot-bench — VAD 基準と各モデルの誤打ち切り率と遅れ。英語の表と、日本語を含む 14 言語の表。LiveKit 自身の評価。言語別の表: https://github.com/livekit/eot-bench/blob/main/output/livekit__eot-bench-data__validation__min_silence_100ms/language_comparison/report.md ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12

  6. Pipecat「Smart Turn v3.2」GitHub README(2026-10-27 取得). https://github.com/pipecat-ai/smart-turn — VAD と併用して無音の間だけ動く構造、音声入力、23 言語。文字の条件付けは目標のまま。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7

  7. Mistral AI「Voxtral 3」2026-10-22. https://mistral.ai/news/voxtral-3/ — 話し終わりの予測を音声認識に内蔵し、LiveKit 上の SDK で動く。作り手の発表で、予測の測定値は示されない。 ↩

  8. Chau Luu「Evaluating End-of-Turn (Turn Detection) Models」Deepgram, 2025-10-27(2026-11-02 取得). https://deepgram.com/learn/evaluating-end-of-turn-detection-models — 条件の良い入力で良く見えたモデルが、電話では劣る場合があった。 ↩ ↩2

  9. Ultravox.ai「Model Card: UltraVAD」Hugging Face(2026-11-02 取得). https://huggingface.co/fixie-ai/ultraVAD — 作り手を Ultravox.ai、土台を Llama-8B と書く。短い無音の時点で呼び、話し終えた確率を出すモデル。 ↩

  10. Deepgram「Deepgram is acquiring Daily, makers of Pipecat」Deepgram, 2026-10-29. https://deepgram.com/blog/daily-pipecat-deepgram — Pipecat は BSD のまま公開を続け、独立の財団を作ると書く。Smart Turn の扱いは書かれていない。 ↩

この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。