Adaptive Interruption Handling

参照元: LiveKit Agents Documentation ロードマップ: 学習ロードマップ

What(何についてか)

Adaptive Interruption Handlingは、ユーザーがエージェントの発話中に音声を発したとき、それが本物の割り込み(barge-in)かバックチャネリング(あいづち)かを音響モデルで判別する機能だ。

バックチャネリングとは「うん」「そうですね」「なるほど」のような、聞いていることを示す短い発話のことで、エージェントへの応答を求めるものではない。

Why(なぜ必要か)

VAD単体では音声の有無しか検知できないため、バックチャネリングでもエージェントが発話を停止してしまう。

  • ❌ VADのみ:「うん」→ エージェント停止(不自然)
  • ✅ Adaptive:「うん」→ バックチャネルと判定 → エージェント継続
  • ✅ Adaptive:「ちょっと待って」→ 割り込みと判定 → エージェント停止

How(どう動くか)

処理フロー

graph TD
    A["ユーザー発話(エージェント発話中)"] --> B["VAD\n(音声検知)"]
    B --> C["Adaptive Interruption Model\n(音響シグナル分析)"]
    C -->|"本物の割り込み"| D["エージェント停止\nターン譲渡"]
    C -->|"バックチャネル"| E["エージェント継続"]

モデルはテキスト(STT結果)を待たずに音響シグナルで直接判断する。これによりSTTの処理時間分のレイテンシを削減できる。

Turn Detectorとの役割分担

機能判断材料タイミング目的
Turn Detectorテキスト(STT結果)沈黙後ターン終了の検出
Adaptive Interruption音響シグナル発話中(オーバーラップ)割り込みかバックチャネルかの判別

使用条件

以下の条件をすべて満たすと自動的に有効になる

  1. LiveKit CloudにデプロイされているかDevモードで動作中
  2. VADが有効
  3. LLMがRealtimeモデルでない
  4. STTがaligned transcriptに対応している

設定方法

# 明示的に有効化
session = AgentSession(
    turn_handling=TurnHandlingOptions(
        turn_detection=MultilingualModel(),
        interruption={
            "mode": "adaptive",
        },
    ),
)
 
# VADのみに戻す
turn_handling={"interruption": {"mode": "vad"}}
 
# 割り込み自体を完全無効化(エージェントが一切止まらない)
turn_handling={"interruption": {"enabled": False}}

Aligned transcripts

Aligned transcriptとは、各単語・発話チャンクにタイムスタンプ(開始・終了時刻)が付いたトランスクリプトだ。Adaptive Interruption Handlingの使用条件として要求される。

通常: "I need to think about that"

Aligned:
"I"     → 0.00s ~ 0.12s
"need"  → 0.13s ~ 0.28s
"think" → 0.36s ~ 0.58s
"that"  → 0.79s ~ 0.95s

STTプラグインが対応しているかは capabilities.aligned_transcript プロパティで確認できる:

if stt.capabilities.aligned_transcript:
    print("This STT model supports aligned transcripts.")

LiveKit Inference(inference.STT)は対応済み。

❓ 未解決の疑問 モデルが音響シグナルで判断するなら、なぜaligned transcript(タイムスタンプ付きテキスト)が必要なのか。 ドキュメントには「必要条件」とだけ書かれており、理由は明記されていない。 推測:音質が悪いエッジケースで音響+テキストの複合判断に使っている可能性があるが未確認。 確認方法:GitHubのソースコードを読む。

Quota and limits

環境料金制限
LiveKit Cloud デプロイ無料無制限
セルフホスト / ローカル開発無料月40,000リクエストまで

Metrics and usage

Adaptive Interruption Handlingが有効なセッションでは、割り込みイベントごとに以下のメトリクスが収集される:

  • per-event latency(割り込み判定ごとのレイテンシ)
  • リクエスト数
  • 割り込み発生回数
session.on("metrics_collected", handle_metrics)  # InterruptionMetrics

モデルの使用量は session.usageModelUsageCollector)から取得できる。詳細はPhase 6(Observability)で扱う。