🎁 新規 無料登録、10回の呼び出しを進呈。最大 $1、カード不要。

リアルタイム音声

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 } }
    }
  }
}

最小限の会話ターン:

  1. input_audio_buffer.append でマイク音声をストリーミングします(base64 PCM)。
  2. input_audio_buffer.commit でターンをコミットし、続いて response.create を送信します。
  3. 音声デルタ(response.output_audio.delta)とテキストの文字起こしを受け取り、続いて usage を含む response.done を受け取ります。
  4. 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 は招待制ベータです。カタログと価格には表示されますが、使用するにはワークスペースにアクセス権が付与されている必要があります——有効化のご相談は当社までご連絡ください。