音声AIの転換点
従来の音声AIアーキテクチャは「音声認識(STT)→ LLM処理 → 音声合成(TTS)」の3段パイプラインだった。各段階で200-500msのレイテンシが加算され、エンドツーエンドで1.5-3秒の応答遅延が発生する。人間の自然な会話ではターン間のポーズが約200msであることを考えると、この遅延はユーザー体験を著しく損なう。
OpenAI Realtime APIはこのパイプラインを統合し、音声入力から音声出力までをシングルモデルで処理する。実測レイテンシはfirst byteまで300-500ms、体感的にはほぼリアルタイムの会話が成立する。
WebSocket接続の設計
Realtime APIはWebSocketベースの永続接続を使用する。HTTPのリクエスト/レスポンスモデルとは根本的に異なるため、アプリケーションアーキテクチャを再考する必要がある。
接続の確立はwss://api.openai.com/v1/realtimeに対してWebSocketハンドシェイクを行い、Authorization headerにAPIキーを含める。接続後、session.createイベントでセッションを初期化し、モデル(gpt-4o-realtime-preview)、音声設定(voice: "alloy"等)、ターン検出の設定を指定する。
KGAの実装では、接続管理にリコネクションロジックを必ず組み込んでいる。WebSocket接続は15分のアイドルタイムアウトがあり、ネットワーク品質によってはより短い間隔で切断される。exponential backoffで自動再接続し、セッション状態を復元する処理が必須だ。
音声モードの実装
Realtime APIの音声入出力はPCM16フォーマット(24kHz、モノラル)で処理される。ブラウザからはWebAudio APIのAudioWorkletでマイク入力をキャプチャし、Base64エンコードしてinput_audio_buffer.appendイベントで送信する。
サーバーからの音声応答はresponse.audio.deltaイベントで断片的に届く。これをAudioWorkletのリングバッファに蓄積し、再生する。重要なのはバッファサイズの調整で、小さすぎると音切れ、大きすぎるとレイテンシ増加のトレードオフがある。KGAの検証では100msバッファが最適バランスだった。
ターン検出(Voice Activity Detection: VAD)はserver_vadモードを推奨する。サーバー側でユーザーの発話終了を検出し、自動的に応答生成を開始する。silence_duration_msパラメータで発話終了の判定しきい値を調整でき、KGAでは500msに設定している。短すぎるとユーザーの思考中の間を発話終了と誤判定する。
Function Callingの統合
Realtime APIの最も強力な機能は、音声対話中にFunction Callingを実行できる点だ。ユーザーが「今日の東京の天気を教えて」と音声で質問すると、モデルがget_weather関数を呼び出し、結果を音声で返す。このフローがシームレスに200ms以内で処理される。
sessionの初期化時にtoolsパラメータで関数定義を渡す。関数が呼び出されるとresponse.function_call_arguments.doneイベントが発火し、アプリケーション側で関数を実行してconversation.item.createで結果を返す。
KGAがクライアント向けに開発したコールセンターAIでは、12個の関数(顧客情報検索、注文状況確認、返品処理、FAQ検索等)を登録している。音声対話中にユーザーの意図を判定し、適切な関数を呼び出してバックエンドシステムと連携する。平均処理時間は関数呼び出し含めて1.2秒で、従来のIVRシステムの平均通話時間を65%短縮した。
レイテンシ最適化
Realtime APIのレイテンシを最小化するためのテクニックを共有する。
Edge Location活用: Cloudflare Workersを中間プロキシとして配置し、ユーザーに最も近いエッジからOpenAI APIに接続する。日本のユーザーの場合、東京リージョンのWorkerからOpenAIの東海岸サーバーへの接続で、直接接続と比較してTLSハンドシェイクを含めた初回レイテンシを40%削減できた。
Audio Chunking最適化: マイク入力を20msチャンクで送信する設定が最もレイテンシとネットワーク効率のバランスが良い。10msでは帯域消費が過大、50msでは体感遅延が増加する。
Pre-warming: セッション確立後、空の音声バッファを送信してモデルをウォームアップする。最初のユーザー発話に対する応答レイテンシを200ms短縮できる。
コスト構造と注意点
Realtime APIのコストは、音声入力$0.06/分、音声出力$0.24/分(2025年6月時点)。テキストベースのAPIと比較して3-5倍のコストとなる。10分間の音声対話セッションで約$3.00。コールセンター用途では1通話あたりのコストとして許容範囲だが、大量のカジュアル対話には高コストだ。
コスト削減策として、KGAではturn_detectionのthresholdを調整し、無音区間の課金を最小化している。また、単純なFAQ応答はテキストベースAPIで処理し、複雑な対話のみRealtime APIにルーティングするハイブリッド構成を採用している。これにより全体コストを55%削減した。