Realtime Models Overview

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

What(何についてか)

Realtimeモデルは、音声を直接受け取って音声を直接返すモデルである。STT→LLM→TTSの3段パイプラインをバイパスし、入力音声の感情的ニュアンスや口調をテキスト化で失うことなく理解できる。また、出力音声にも感情表現を反映できる。

従来のパイプライン(STT→LLM→TTS)では、テキスト化の時点で「怒り」「焦り」「喜び」等の非言語的情報が失われる。Realtimeモデルは音声を直接処理するため、この問題を根本的に解決する。

Why(なぜ必要か)

音声AIの品質において、感情理解と感情表現は重要な差別化要因である。特にカスタマーサポートや医療などのユースケースでは、ユーザーの感情状態を正確に捉えることが求められる。Realtimeモデルはこの領域でパイプライン型を上回る性能を発揮する。

How(どう動くか)

Realtimeモデルのインスタンスを AgentSessionllm パラメータに渡す。STTとTTSはRealtimeモデル内部で処理されるため、別途指定不要である。

from livekit.agents import AgentSession
from livekit.plugins import openai
 
session = AgentSession(
    llm=openai.realtime.RealtimeModel()
)

Realtimeモデルは llm スロットに差し込む設計になっている。パイプラインの観点からは「LLMの代わり」として振る舞うが、内部的にはSTT+LLM+TTSを統合した単一モデルとして動作する。

対応プラグイン

全てPlugin形式で、Inference対応はない。自前のAPI Keyが必要。

プロバイダーPythonNode.js
Amazon Nova Sonic
Azure OpenAI Realtime API
Gemini Live API
OpenAI Realtime API
Phonic Speech-to-speech
Ultravox Realtime
xAI Grok Voice Agent API

OpenAI、Gemini、Azure OpenAI、xAI、PhonicがPython/Node.js両対応。Amazon Nova SonicとUltravoxはPythonのみ。

Half-Cascade構成

Realtimeモデルの音声理解力を活かしつつ、音声出力は別のTTSに任せる構成。half-cascade構成またはhalf-duplex pipelineと呼ばれる。

session = AgentSession(
    llm=openai.realtime.RealtimeModel(modalities=["text"]),
    tts="cartesia/sonic-3"
)

modalities=["text"] でRealtimeモデルの出力をテキストのみに制限し、「音声入力はRealtimeが理解 → テキスト出力 → TTSが音声化」という流れになる。

この構成のトレードオフとして、Realtimeモデルが本来持つ「感情を込めた音声出力」は失われる。出力側の感情表現はTTSの能力に依存する。決まったセリフを正確に読み上げる必要がある場合や、履歴読み込みが多い場合に有効な選択肢である。

テキストのみの応答モダリティをサポートしているRealtimeモデルでないと利用できない。

制約

ターン検出とVAD

LiveKitはRealtimeモデル内蔵のターン検定を使うことを推奨している。正確なターン検出にはVADとリアルタイム音声→テキストのコンテキストが必要だが、Realtimeモデルは暫定文字起こしを提供しないため、LiveKitのターン検出モデルを使いたい場合は別途STTプラグインを追加する必要がある。

遅延文字起こし

Realtimeモデルは暫定(interim)文字起こし結果を提供しない。ユーザー入力の文字起こしはエージェントの応答後に到着することもある。リアルタイム文字起こしが必要な用途では、パイプライン型(STT→LLM→TTS)を使うか別途STTを追加する。

スクリプト化された音声出力

say のような「テキストスクリプトをそのまま読み上げる」メソッドは存在しない。generate_reply(instructions='...') で指示は出せるが、スクリプト通りの出力は保証されない。正確なスクリプト読み上げが必要な場合はhalf-cascade構成を使う。

会話履歴の読み込み

現在のRealtimeモデルは会話履歴をテキスト形式でしか読み込めない。過去会話の感情的ニュアンスがテキスト化で失われる。特にOpenAI Realtime APIでは、大量の履歴を読み込むとテキストのみで応答する確率が上がるため、履歴を読み込む用途ではhalf-cascade構成が推奨される。

実装時の判断軸

graph TD
    A["Realtimeモデル選択"] --> B{"構成の決定"}
    B -->|"感情を音声に反映"| C["フルRealtime<br/>音声→音声"]
    B -->|"スクリプト制御/履歴多い"| D["Half-Cascade<br/>Realtime理解 + 別TTS"]
    B -->|"暫定文字起こし必要"| E["別途STT追加<br/>or パイプライン型"]
    C --> F["内蔵ターン検定を使用"]
    D --> G["TTS選択で出力品質を制御"]

主な判断基準は3つ。感情表現を音声に反映したいか、スクリプト通りの発話や履歴読み込みが必要か、リアルタイム文字起こしが必要か。これらの要件によってフルRealtime、half-cascade、パイプライン型のいずれかを選択する。