OpenAIの高度な音声が使えるRealtime API雑感
OpenAI DevDayで、例の高度な会話もRealtime APIとして即時提供開始が発表されました。
https://x.com/gyakuse/status/1841208089279938591?s=46&t=76glUSKyu9UyDn7XfZhjiA
Realtime API Overview - OpenAI API
https://platform.openai.com/docs/guides/realtime
実装前に、まずはこのガイドで確認できる仕様への雑感をまとめます。
答え合わせ的で面白かったのは、会話がステートフルなセッションで提供される点。これは高度な音声が単なるTTSではなく、やはりマルチモーダルな会話モデルであることを示し、その点も明言されてます。
つまり従来LLMが音声対話を行う場合に、
ユーザー発話 → STTでテキスト化して送信 → LLMが応答生成 → TTSで音声化して送信
というステップが必要だったのに対し、高度な音声では、
ユーザー発話を音声のままストリーム送信 → マルチモーダルなモデルが受け取り、ユーザー発話の途切れを待って、応答の音声を生成しながらストリーム送信(ついでにテキストも返す)
という2ステップに。あの異様な速さは、音声を文字と同等にストリームできるマルチモーダルなモデルによるものだった、ということだったのだと思います。
アプリの方の高度な音声は、一旦先にテキストを入力しておいたセッションでは使えず(強制的に古い音声が使われる)、チャットの開始時から音声でやりとりする必要がありました。
これもおそらくマルチモーダルな音声ありきのセッションに最適化しているからだと考えてましたが、Realtime APIではその制限がなくなっており、テキストでもメッセージが送信できるようです。
マルチモーダルなので本来テキストでも問題ないはずが、アプリの方で制限されていたのは、より自然な会話を行うのに音声のコンテキストが必要だからでしょうか。
その辺はセッションの再開がサポートされず、再開したければテキストをコンテキストに詰めろ、というガイドにも現れてます。音声によるセッションはテキストに比べデータ量は大きく、保存しておくのは困難であり、かといってセッションの再開ができないのはまずいので、テキストでと案内するしかない。
これは公式アプリだとかなり自然な再開ができているので、音声セッション丸ごとクライアントに保存してる可能性もありますが、再開時の送信量が大きすぎるので、近い対話だけ音声で送る等工夫があるのかもしれません。それだけでも続く発話を自然なものにするには十分使えそうです。
コンテキストが長くなるとヒューリスティックにコンテキストの内容を要約する点もガイドにありますが、面白いのはコンテキストウインドウのサイズにGPT-4oを例で挙げて、Realtime APIの具体的な上限には触れていない点。いつものように色々隠されています。
音声はbase64エンコードのチャンクで届くし、WebSocket対応は必要だし、利用のための実装は少し面倒になってますが、あの自然な対話が可能で録音できるなら小さなコストです。
せっかくのリアルタイムなAPIですが、個人的にゲームなどへの応用が主眼なので、まずは音声アセット制作用のインターフェースを考えてみます。
たとえば台本はテキストで渡し、演技指導は音声で渡すなど、マルチモーダルな点を活かしつつ、圧倒的に自然な発話を利用できる形が考えられます。
歌ってくれるのか? 公式アプリだと頻発する検閲はあるのか? 色々疑問はありますが、ガイド内容に対する雑感はこんなところです。