turn_detection: server_vad と併用する OpenAI Realtime Transcription からの移行について説明します。
すべての移行ガイド
すでに Cartesia SDK を使用している場合は、バージョン
>=3.2.0 にアップグレードしてくださいInk 2 は現時点で英語のみをサポートしています。
今後数ヶ月のうちに他言語の追加を予定しています。
今後数ヶ月のうちに他言語の追加を予定しています。
接続
OpenAI の WebSocket URL と認証ヘッダーを Cartesia の/stt/turns/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 に再接続してください。
すべての音声をコミットしてセッションを閉じるには、JSON 形式のテキストフレームを送信します。
SDK を使用した音声の送信
送信前に base64 エンコードされた音声をデコードする
終了
イベントのマッピング
OpenAI はinput_audio_buffer.speech_started / speech_stopped / committed でターンを通知し、その後ターンごとにトランスクリプトのデルタと completed イベントを一気に送信します。
Cartesia は同じ情報をターンのライフサイクルにまとめます。turn.start、turn.update、turn.eager_end、turn.resume、turn.end です。完全なステートマシンについてはターン検出を参照してください。
確定したトランスクリプト
OpenAI のconversation.item.input_audio_transcription.completed イベント:
turn.end イベントになります:
turn.start と turn.resume イベントはトランスクリプトを含みません。サーバーメッセージの例
OpenAI はターンごとにバッチ処理します。Ink はターン中にストリーミングします。
参考資料
API リファレンス
Cartesia Realtime STT (Auto)
完全なコード例
Cartesia SDK の使用