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.STTInference経由の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は実務では使う必要がなく、ネイティブストリーミング対応モデルで十分。