turn_detection: null を指定して使用している OpenAI Realtime Transcription からの移行について説明します。
すべての移行ガイド
すでに Cartesia SDK を使用している場合は、バージョン
>=3.2.0 にアップグレードしてください接続
OpenAI の WebSocket URL と認証ヘッダーを Cartesia の/stt/websocket に置き換え、使用するモデルと入力音声フォーマットをクエリパラメーターとして指定します。
cartesia_version クエリパラメーターとして渡し、API キーの代わりに access_token クエリパラメーターで有効期限の短いアクセストークンを使用してください。
Cartesia SDK で手動ファイナライズ WebSocket に接続します。
セッション設定
OpenAI はsession.update ペイロードでセッションを設定します。Cartesia は同等の設定をクエリパラメーターとして受け取ります。
encoding
encoding
OpenAI は入力形式を
audio.input.format で設定します。Cartesia は encoding と sample_rate をクエリパラメーターとして受け取ります。OpenAI の PCM 形式は 16 ビット、24 kHz、モノラルです。Cartesia はその
sample_rate をそのまま受け付けるため、リサンプリングせずに同じ音声をストリーミングできます。Cartesia は pcm_s32le、pcm_f16le、pcm_f32le も受け付けます。音声の送信
OpenAI は各音声チャンクを JSON 形式のテキストフレームでラップし、音声バイトを base64 エンコードします。Cartesia は音声チャンクをバイナリフレームとして受け取ります。生の音声バイトを直接送信してください。
session.update メッセージに相当するものはありません。パラメーターを変更するには WebSocket を新たに再接続してください。
Cartesia の制御コマンドは JSON ではなく、素のテキストフレームです。
バッファされた音声をコミットしてトランスクリプトを出力するには、input_audio_buffer.commit の代わりに finalize フレームを送信します。
close フレームを送信します。
SDK での音声の送信
送信前に base64 エンコードされた音声をデコードする
ファイナライズとクローズ
イベントのマッピング
OpenAI はconversation.item.input_audio_transcription.delta イベントと、コミットされたターンごとに completed イベントをストリーミングします。Cartesia は
transcript デルタに加え、finalize および close コマンドに対する確認応答を発行します。
完了したトランスクリプト
OpenAI のconversation.item.input_audio_transcription.completed イベントはターン全体を含みます。
transcript イベントになり、それぞれがデルタを含みます。
- Ink 2 はまだ
durationやwordsを返しません- Ink 2 と Whisper は現在、確定トランスクリプト(
is_final: true)のみを発行します
サーバーメッセージの例
GPT は完全なトランスクリプトを送信します。Ink はデルタを送信し、単語の途中で区切られることがあります。
参考資料
API リファレンス
Cartesia Realtime STT (Manual)
完全なコード例
Cartesia SDK を使用