
Cascaded vs Fused Models: Comparing the architectures behind conversational agents
A breakdown of the five main voice agent architectures and the tradeoffs between reasoning, control, and naturalness.
Scribe v2 Realtimeは非常に高速なスピーチtoテキストモデルで、ライブ文字起こしに利用できます。スピードと品質の両立により、これまで実現できなかったユースケースも可能になりました。
例えば、Scribe v2 RealtimeとChrome Translator APIを使って、このリアルタイム言語翻訳ツールを作成できました。

このデモのステップバイステップのチュートリアルが必要な場合は、 こちらをご覧ください。このガイドでは、Scribe v2 Realtimeの概要と仕組みにフォーカスします。
ElevenLabsでは、音声を文字起こしするためにScribe v2とScribe v2 Realtimeの2つのモデルを提供しています。
Scribe v2は非同期の文字起こしに最適ですが、Scribe v2 Realtimeはライブで文字起こしが必要な場合に使います。
ライブ翻訳アプリには、Scribe v2 Realtimeが最適です。
このモデルを使うには、スピーチtoテキストAPIを利用します。始めるには、次の2つのステップが必要です。
APIをどこから呼び出すかによって、初期化方法が異なります。サーバーサイドで呼び出す場合は、APIキーで直接初期化し、そのインスタンスを使ってScribe v2 Realtimeに接続できます。
ただし、APIキーをクライアントに公開するのは大きなセキュリティリスクです。そのため、クライアントサイドでストリーミングする場合は、ワンタイムトークンで初期化する必要があります。
このトークンはAPIキーを守るためにサーバーサイドで生成する必要があります。
今回はReactアプリを作成するので、トークン方式を使います。このトークンは接続時に渡すため、Scribeインスタンスの作成も簡単です。
| 1 | import { useScribe } from "@elevenlabs/react"; |
| 2 | |
| 3 | function MyComponent() { |
| 4 | const scribe = useScribe({ |
| 5 | modelId: "scribe_v2_realtime", |
| 6 | }); |
| 7 | |
| 8 | //... |
| 9 | } |
適切に初期化できたら、Scribe v2 Realtimeに接続できます。Reactの翻訳プロジェクトではクライアントサイドストリーミングを使うため、バックエンドからワンタイムトークンが必要です。このトークンはAPIに接続するたびに生成して渡します。
| 1 | const handleStart = async () => { |
| 2 | const token = await fetchTokenFromServer(); |
| 3 | |
| 4 | await scribe.connect({ |
| 5 | token, |
| 6 | microphone: { |
| 7 | echoCancellation: true, |
| 8 | noiseSuppression: true, |
| 9 | }, |
| 10 | }); |
| 11 | }; |
Scribe v2 Realtimeでは、文字起こしには「部分」と「コミット済み」の2種類があります。
部分文字起こしは「ライブ文字起こし」です。これはWebSocket経由でリアルタイムに返されます。たとえば「The cat is ...」と言うと、その言葉がすぐに表示されます。
もう一つはコミット済み文字起こしです。文字起こしはセグメントごとに行われます。どのタイミングでコミットするかによって、セグメントの分け方が決まります。そのため、コミット戦略を決める必要があります。
コミット戦略には2つの方法があります。1つ目は手動で、好きなタイミングでコミットできます。おすすめは無音時や会話の切れ目など、論理的なポイントでコミットすることです。
もう1つは、Scribe v2 RealtimeがVoice Activity Detection(VAD)を使って自動でセグメントを判断する方法です。この方法では、音声や無音を自動検出し、無音のしきい値に達すると自動でコミットされます。
話している間、Scribe v2 Realtimeは一語ずつ文字起こしします。たとえば「I scream...」と言うと「Ice cream...」と認識されることもありますが、「I scream every time I see a spider in the bathroom.」という文全体が分かると、より正確に変換できます。
つまり、部分文字起こしはリアルタイム表示に使い、コミット済み文字起こしは会話履歴としてより正確な内容になります。
Scribe v2 Realtimeに接続すると、文字起こしが始まります。partialTranscriptとcommittedTranscriptsプロパティで文字起こしデータを取得できます。
| 1 | <div> |
| 2 | <button onClick={handleStart} disabled={scribe.isConnected}> |
| 3 | Start Recording |
| 4 | </button> |
| 5 | <button onClick={scribe.disconnect} disabled={!scribe.isConnected}> |
| 6 | Stop |
| 7 | </button> |
| 8 | |
| 9 | {scribe.partialTranscript && <p>Live: {scribe.partialTranscript}</p>} |
| 10 | |
| 11 | <div> |
| 12 | {scribe.committedTranscripts.map((t) => ( |
| 13 | <p key={t.id}>{t.text}</p> |
| 14 | ))} |
| 15 | </div> |
| 16 | </div> |
partialTranscriptは現在セグメントのリアルタイム文字起こしです。committedTranscriptは会話履歴で、Scribe v2 Realtime接続中にコミットされたセグメントのリストです。
これで会話のリアルタイム文字起こしができます。あとはUIを工夫したり、ライブ翻訳などの機能を追加することも可能です。
デモのリアルタイム翻訳ツールを作るには、文字起こしデータを Chrome AI Translator APIに渡して、リアルタイムで出力を表示します。
ご覧いただきありがとうございました! ElevenLabsにサインアップして アプリ開発を始めましょう!

A breakdown of the five main voice agent architectures and the tradeoffs between reasoning, control, and naturalness.
.webp&w=3840&q=95)
Not every student in Germany grows up with access to academic role models. InteGREATer e.V. was founded to change that.