Skip to content
Voltar aos artigos
ai14分

OpenAI Realtime API: リアルタイム音声AIの構築

OpenAI Realtime API: Building Real-Time Voice AI

金 東勲Infrastructure Engineer
2026-03-1114分
OpenAIRealtime APIWebSocketVoice AIFunction Calling

Este artigo está publicado em japonês. Resumo em português abaixo:

OpenAI Realtime API: Building Real-Time Voice AIOpenAI Realtime APIを使ったリアルタイム音声AIアプリケーションの設計と実装。WebSocket接続、音声モード、Function Calling統合、レイテンシ最適化の実践ガイド。

音声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%削減した。

技術的な課題を一緒に解決しませんか?

KGA IT Solutionsは、AI・クラウド・DevOpsの専門チームがお客様の課題に最適なソリューションを提供します。

お問い合わせ