STT Models Overview
参照元: LiveKit Agents Documentation ロードマップ: 学習ロードマップ
What(何についてか)
ボイスAIパイプラインの最初のステップであるSTT(Speech-to-Text / ASR)モデルの選択と利用方法。LiveKit Inference経由とPlugin経由の2つのアクセス方法があり、自動モデル選択、ストリーミング/非ストリーミングの差異吸収、話者分離などの高度な機能を提供する。
Why(なぜ必要か)
STTモデルの選択は音声認識の精度とレイテンシに直結する。プロバイダーごとに対応言語、ストリーミング対応、話者分離の有無が異なるため、ユースケースに応じた適切な選択が必要。
How(どう動くか)
LiveKit Inference対応STTモデル
Inference経由でAPI key不要で使えるモデル。主要なモデルと言語対応は以下の通り。
AssemblyAIはUniversal-3 Pro Streaming(6言語)、Universal-Streaming(英語のみ)、Universal-Streaming-Multilingual(6言語)の3モデルを提供する。CartesiaはInk Whisperで100言語に対応。DeepgramはFluxシリーズとNova-2/Nova-3シリーズを展開し、Nova-3が44言語対応で最も幅広い。ElevenLabsはScribe v2 Realtimeで190言語に対応する。
日本語STTを想定すると、ElevenLabs Scribe v2(190言語)、Cartesia Ink Whisper(100言語)、Deepgram Nova-3(44言語)が有力候補となる。
Plugin対応STT
23のプロバイダーがPluginとして利用可能。Python専用が多く、Node.js両対応はDeepgram、OpenAI、OVHCloud、Sarvamのみ。Pluginは自前のAPI keyとアカウント管理が必要で、課金・レート制限は各プロバイダー直接となる。
使い方
AgentSessionのstt引数で指定する。Inference経由の場合は inference.STT() クラスまたは文字列指定を使う。
from livekit.agents import AgentSession, inference
session = AgentSession(
stt=inference.STT(model="deepgram/nova-3", language="en"),
)多言語混在時は "deepgram/nova-3:multi" のようにコロン区切りで言語を指定する。
自動モデル選択
特定のモデル機能が不要で、指定言語に最適なモデルを使いたい場合は "auto:ja" のように auto:言語コード を指定する。LiveKit Inferenceが各言語について最適なモデルを自動選択する。選択アルゴリズムの詳細(精度/レイテンシ/コストの重み付け等)はドキュメントに明記されておらず、現時点ではブラックボックス。
StreamAdapter(非ストリーミングSTT対応)
Whisper等の非ストリーミングSTTをストリーミングパイプラインで使うためのアダプター。VADが END_SPEAKING を検知するまで音声をバッファリングし、区切り検知時にまとめて非ストリーミングSTTに投げる。結果をストリーミングSTTと同じ SpeechEvent として扱える。ただし、Inference経由でネイティブストリーミング対応モデル(Deepgram Nova-3等)が使える場合、実務で使う必要はない。
stt = agents.stt.StreamAdapter(whisper_stt, vad_stream)MultiSpeakerAdapter(話者分離、Python only)
複数話者がいる音声で「誰が何を言ったか」を識別する。diarization対応STT(AssemblyAI、Deepgram、Speechmatics、Soniox)で有効にし、MultiSpeakerAdapterでラップする。
3つの機能を提供する。Primary speaker検出は音量(RMS)ベースで最も音が大きい話者をprimaryと判定する。話者ごとのフォーマットではprimary/backgroundで出力フォーマットを変更できる。Background抑制では suppress_background_speaker=True でprimaryの transcripts だけをLLMに送る。
ユースケースは会議室マイク等の単一ミックス音声トラックで、エージェントが特定の話者に集中したい場合。
LanguageCode正規化
STTのlanguageパラメータにはLanguageCode型を使う。ISO 639-1、BCP-47、ISO 639-3、言語名、アンダースコア区切り等の任意の形式を渡すと、自動的にBCP-47に正規化される。LanguageCodeはstrのサブクラスで、.language、.region、.iso プロパティで部分抽出も可能。
Key Concepts
| 用語 | 説明 |
|---|---|
| inference.STT | Inference経由のSTT指定クラス |
| auto:言語コード | 指定言語に最適なSTTを自動選択 |
| StreamAdapter | 非ストリーミングSTTをストリーミング化するアダプター |
| MultiSpeakerAdapter | 複数話者のdiarizationとprimary speaker検出 |
| LanguageCode | 言語コードの自動正規化型(BCP-47へ) |
実装時の判断軸
基本はInference経由の "deepgram/nova-3" または "auto:ja" で十分。日本語STTならElevenLabs Scribe v2、Cartesia Ink Whisper、Deepgram Nova-3が有力。多言語混在時は "deepgram/nova-3:multi"。複数話者がいる会議室等ではMultiSpeakerAdapter(Python only)。StreamAdapter + VADは実務では使う必要がなく、ネイティブストリーミング対応モデルで十分。