リアルタイム音声
gpt-realtime で双方向の音声エージェントを構築できます——モデルは音声を聞き取り、リアルタイムに音声で返答します(電話のように)。接続は /v1/realtime への WebSocket 接続です。既存の OpenAI Realtime SDK はそのまま動作します。エンドポイントを当社のものに向け、Synthorai キーを使うだけです。
文字起こしではなく音声対音声
このページは音声対音声(音声入力・音声出力)を扱います。?model=gpt-realtime で接続してください。
音声をテキストに変換するだけでよい(音声での返答が不要な)場合は、代わりに 音声テキスト変換 を使ってください——これは別の機能です。
エンドポイントと認証
モデルをクエリ文字列に指定して、/v1/realtime への WebSocket を開きます。認証はアップグレードの前に実行されるため、拒否されたキーがソケットを開くことはありません。
# WebSocket, server-side (Node / Python / Go — anything that can set headers)
GET wss://synthorai.io/v1/realtime?model=gpt-realtime
Authorization: Bearer $YOUR_KEY
# Send only the Authorization header. Do NOT send OpenAI-Beta: realtime=v1
# (the beta protocol is retired; it makes the upstream reject the session). - あなたの
sk-synキーが当社のゲートウェイの外に出ることはありません——上流の認証情報は当社側で差し替えられます。 - サーバーサイドのクライアント向けに設計されています(Node、Python、Go——
Authorizationヘッダーを設定できるものなら何でも)。ブラウザの一時トークンには対応していません。 - WebSocket のみです。SIP(電話)と WebRTC はクライアントを上流に直接接続するもので、プロキシされません——電話音声は WebSocket にブリッジしてください。
セッションの設定
接続が開くと session.created を受け取ります。session.update を送信して、ボイス、モダリティ、音声フォーマット、ターン検出を設定します。GA 形式(session.type: "realtime"、音声は audio.input / audio.output の下)を使用してください——旧来のフラットな beta 形式は廃止されました。
{
"type": "session.update",
"session": {
"type": "realtime",
"output_modalities": ["audio"],
"instructions": "You are a concise customer-support agent.",
"audio": {
"input": { "format": { "type": "audio/pcm", "rate": 24000 },
"turn_detection": { "type": "server_vad" } },
"output": { "format": { "type": "audio/pcm", "rate": 24000 } }
}
}
} 最小限の会話ターン:
input_audio_buffer.appendでマイク音声をストリーミングします(base64 PCM)。input_audio_buffer.commitでターンをコミットし、続いてresponse.createを送信します。- 音声デルタ(
response.output_audio.delta)とテキストの文字起こしを受け取り、続いて usage を含むresponse.doneを受け取ります。 - server VAD を有効にすると、モデルがターンを自動で検出します。手動のコミットなしで同じイベントが流れます。
ツール、関数呼び出しと知識
session.update で関数を宣言します。モデルは会話の途中でそれらを呼び出します——これが注文照会、チケット発行、あるいは任意の業務システムを接続する方法です。結果を返すと、モデルはそれを踏まえて話し続けます:
// 1. Declare tools in session.update: "tools": [{ "type": "function", ... }]
// 2. The model emits a function_call in response.done.
// 3. Return the result, then ask the model to continue:
{ "type": "conversation.item.create",
"item": { "type": "function_call_output",
"call_id": "call_abc",
"output": "{\"status\":\"shipped\"}" } }
{ "type": "response.create" } リモート MCP サーバーにも対応しています("type": "mcp")——上流が MCP サーバーに直接接続します。ナレッジベースには、instructions、RAG を裏に持つ関数ツール、または MCP を通じて事実を注入してください。モデルに内蔵された知識は、業務上の事実の信頼できる情報源ではありません。
課金
response.done ごとの usage を公式リスト価格で課金します(上乗せなし)——音声とテキスト、入力と出力、そしてキャッシュ入力レートを適用します。各セッションは終了時に台帳へ 1 行を書き込みます。
| 型 | 入力 / 1M トークン | 出力 / 1M トークン |
|---|---|---|
| 音声 | $32 / 1M | $64 / 1M |
| テキスト | $4 / 1M | $16 / 1M |
| キャッシュ入力 | $0.40 / 1M | — |
表示価格は gpt-realtime / gpt-realtime-2.1 のものです。gpt-realtime-2.1-mini はおよそ 3 分の 1 です。音声入力は ~10 tokens/second、出力は ~20 tokens/second です。会話履歴を追記のみ(append-only)に保つと、キャッシュレート($0.40/1M)が長時間の通話の大部分を吸収します。
セッションの長さとホットスイッチ
1 つの Realtime セッションは最長で 60 minutes です——これは当社ではなく OpenAI プラットフォームの制限です。上限に達すると上流が接続を閉じます。
- 長引く可能性のある通話では、上限より十分に前(例えば 50 minutes 時点)でホットスイッチしてください:新しいセッションを開き、
conversation.item.createで会話をテキストとして再生します(ユーザーはinput_text、アシスタントはoutput_text——アシスタントの音声は再生できません)。 - セッションの再開はありません:WebSocket が切断されると上流の状態は失われます。再接続も同じテキスト再生の経路を使うため、再接続の仕組みを初日から組み込んでください。
- コンテキストは
gpt-realtime-2.1/-miniで 128K(入力音声で ≈3.5 hours)、レガシーのgpt-realtimeは 32K です——長時間の通話には使わないでください。
アクセス
gpt-realtime は招待制ベータです。カタログと価格には表示されますが、使用するにはワークスペースにアクセス権が付与されている必要があります——有効化のご相談は当社までご連絡ください。