トランスクリプトエラー
トランスクリプトを正しく結合していますか?
トランスクリプトを正しく結合していますか?
transcript フィールドは ターン内で累積的 です。各 turn.update、turn.eager_end、turn.end イベントには、これまでのターンの全文がすでに含まれています。最終的なトランスクリプトだけが必要な場合は、完了したターンごとに 1 つずつ、各 turn.end から transcript プロパティを取得してください。transcript はそのまま連結してください。strip() で空白を取り除いたり、正規化したり、独自の区切り文字を追加してはいけません。turn.update や turn.eager_end イベントのトランスクリプトを連結するのは、テキストの重複の典型的な原因です。各更新は累積的なので、それらを連結するとトランスクリプトの一部が繰り返されます。
turn.update や turn.eager_end は、トランスクリプトのチャンクではなく、ターン状態の更新として扱ってください。最終トランスクリプトは turn.end のみから読み取ってください。すべてのイベントをドレインしましたか?
すべてのイベントをドレインしましたか?
セッションの音声をすべて送信し終えたら、
{"type": "close"} を送信して、バッファリングされている音声をフラッシュし、残りのイベントを発行するようモデルに伝えます。モデルが完了すると、サーバーがソケットをクローズします。サーバーは文字起こしの精度を高めるために音声を一定量バッファします。close コマンドを送信しなかったり、メッセージの読み取りを早期に停止したりすると、バッファされた音声は処理されません。最後の 1 秒の音声を気にしないのであれば、これは問題ありません。サポートされている言語を使用していますか?
サポートされている言語を使用していますか?
Ink 2 は現時点で英語のみをサポートしています。他言語の概念は持たず、すべてを英語として文字起こししようとします。
正しいサンプルレートとエンコーディングを使用していますか?
正しいサンプルレートとエンコーディングを使用していますか?
高レイテンシー
音声の送信を停止しましたか?
音声の送信を停止しましたか?
Cartesia の API は連続した音声ストリームを想定しています。
音声の送信を停止すると、サーバーはユーザーが無音であると見なすのではなく、追加の音声チャンクが到着するのを待ちます。これは通常、ネットワークの遅延に対応するために望ましい挙動ですが、クライアントが音声入力をミュートしている間、無音 (すべてゼロ) を送信し続ける必要があることも意味します。
適切なエンドポイントを使用していますか?
適切なエンドポイントを使用していますか?
プッシュ・トゥ・トーク型のアプリ (ユーザーがボタンを押している間に話すなど) を構築している場合や、所定のポイント (特定の評価など) でトランスクリプトを「フラッシュ」したい場合は、リアルタイム STT (Manual) への切り替えを検討してください。ターン検出は、
turn.end で運ばれる最終トランスクリプトに 0.5 秒程度の遅延を追加します。
セットアップが許すなら、manual エンドポイントを使い、ユーザーの発話が終わった時点で "finalize" を送信することで、ターン検出によるレイテンシのオーバーヘッドを取り除けます。サーバーエラー
音声をチャンク分割していますか?
音声をチャンク分割していますか?
Cartesia のリアルタイム WebSocket エンドポイントは、音声がほぼ発話と同じ速度で到着することを想定しています。
ソケットに一度に大量の音声をプッシュすると、サーバー側のバッファをオーバーロードする可能性があり、内部サーバーエラーとして現れる場合があります。小さなチャンク (各 50〜200 ミリ秒) でストリーミングし、リアルタイムに合わせて、ウォールクロック 1 秒あたり平均 1 秒の音声を送るようにペースを調整してください。JavaScript の例 もご覧ください。完全なファイルを一度に文字起こししたい場合は、ファイル全体を 1 回のリクエストで受け付ける Batch STT の利用を検討してください。