🌟

OpenAI Realtime APIのイベント名メモ

に公開

実務でOpenAI Realtime APIを使用していますが、イベント名で誤解をしていたことがあったのでメモ書きとして残します。

OpenAI Realtime APIとは

低遅延で双方向の通信(Speech to Speech)を可能にしているAPIです。
会話以外にもtextやimageなども可能とこちらにありました。
最近ではMCP対応なども起きているので、言葉を発することによりMCPを動かして返答をもらうこともできそうですね。
また、厳密にはSTTであるかもしれませんが。

イベント名リスト

  • 発話

    • 音声送信
      'input_audio_buffer.speech_started'
    • 音声送信終了
      'input_audio_buffer.speech_stopped'
    • 音声文字起こし終了
      'conversation.item.input_audio_transcription.completed'
  • 受話

    • 音声受信スタート
      'output_audio_buffer.started'
    • 音声受信ストップ
      'output_audio_buffer.stopped'
    • 音声文字起こし
      'response.audio_transcript.done'

セッション更新のパラメータ

{
  type: "session.update",
  session: {
    turn_detection: {
      type: "server_vad",
      silence_duration_ms: 500
    },
    input_audio_transcription: {
      model: "whisper-1",
      language: "ja",
    },
    modalities: ["text", "audio"]
  }
};
  • type: "session.update"
    セッション設定を更新するイベント。

  • turn_detection: { type: "server_vad", silence_duration_ms: 500 }
    サーバ側のVAD(無音検出)で発話の区切りを自動判定する。細かい設定も可能で、今回だと無音が0.5秒続いたら切る設定。

  • input_audio_transcription: { model: "whisper-1" }
    ユーザー入力音声の文字起こしを有効化する。
    モデルはwhisper以外にも指定可能。

  • language: "ja",
    言語設定が可能。うっかり他言語に聞き取られないようになる。
    余談ですが筆者は滑舌が悪いのでテストの際、韓国語の表示がよく出ました。

  • modalities: ["text","audio"]
    モデルが返す出力メディアを指定する。

あとがき

筆者は実務でこの部分を混同して2日費やしました。
音声終了はresponse.doneなどのイベントではないことに気づきませんでした。
ドキュメントは大事にしましょう。

Discussion