Skip to main content
これは対話型ノートブックです。ローカルで実行するか、以下のリンクを使用できます。

オーディオデータで Weave を使う方法: OpenAI の例

このデモでは、OpenAI Chat Completions API と GPT 4o Audio Preview を使用して、テキストプロンプトに対する音声応答を生成し、それらを Weave でトラッキングします。 GPT 4o Audio Preview のインテグレーションと音声応答生成ワークフローを備えた OpenAI Chat Completions API インターフェース より高度なユースケースでは、OpenAI Realtime API を活用して、音声をリアルタイムでストリーミングします。以下のサムネイルをクリックして動画デモを視聴するか、こちらをクリックしてください。 Everything Is AWESOME

セットアップ

まず、OpenAI (openai) とWeave (weave) の依存関係、および APIキー管理用の依存関係である set-env をインストールします。
次に、OpenAI と Weave に必要な APIキーを読み込みます。ここでは、Google Colab のシークレット キー マネージャーと互換性があり、Colab 固有の google.colab.userdata の代替となる set_env を使用します。使用方法については、こちらを参照してください。
最後に、必須ライブラリをインポートします。

オーディオのストリーミングと保存の例

次に、オーディオモダリティを有効にした OpenAI の completions エンドポイントに対する call を設定します。まず OpenAI クライアントを作成し、Weave プロジェクトを初期化します。
次に、OpenAI の completions リクエストを定義し、Weave デコレータ (op) を追加します。 ここでは、関数 prompt_endpont_and_log_trace を定義します。この関数は、主に 3 つの step で構成されています。
  1. テキストとオーディオの入力と出力をサポートする GPT 4o Audio Preview モデルを使用して、completion オブジェクトを作成します。
    • モデルに、アクセントを変えながらゆっくり 13 まで数えるよう指示します。
    • completion を “stream” に設定します。
  2. ストリーミングされたデータをチャンクごとに書き込むための新しい出力ファイルを開きます。
  3. Weave がトレースにオーディオデータをログするように、オーディオファイルの開いたファイルハンドラを返します。

テスト

次のセルを実行してください。システムプロンプトとユーザープロンプトは、出力オーディオとともに Weave トレース に保存されます。 セルの実行後、トレース を表示するには、”🍩” 絵文字の横にあるリンクをクリックしてください。

高度な使用方法: Weave での Realtime Audio API

Weave とストリーミング音声会話インターフェースを使用した Realtime Audio API インテグレーション OpenAI の realtime API は、リアルタイムの音声およびテキストアシスタントを構築するための、高機能で信頼性の高い会話型 API です。 以下の点に注意してください:
  • マイクの設定 のセルを確認してください
  • Google Colab の実行環境には制約があるため、これはお使いのマシン上で Jupyter Notebook として実行する必要があります。ブラウザでは実行できません。
    • MacOS では、Pyaudio を動作させるために Brew 経由で portaudio をインストールする必要があります (こちらを参照) 。
  • enable_audio_playback トグルを有効にすると、アシスタントが出力した音声が再生されます。エコー検出の実装は非常に複雑なため、これを有効にする場合はヘッドホンが必要です

必要な環境の設定

マイクの設定

次のセルを実行して、利用可能なオーディオデバイスをすべて確認します。次に、表示されたデバイスに基づいて INPUT_DEVICE_INDEXOUTPUT_DEVICE_INDEX を設定します。入力デバイスには少なくとも 1 つの入力チャネルがあり、出力デバイスには少なくとも 1 つの出力チャネルがあります。

OpenAI Realtime API スキーマ実装

OpenAI Python SDK はまだ Realtime API をサポートしていません。そこで、可読性を高めるため、OAI Realtime API の完全なスキーマを Pydantic で実装しています。今後、公式サポートが提供された段階で、こちらは非推奨となる可能性があります。

OpenAI Realtime API の Pydantic スキーマ

オーディオストリームライター (ディスクおよびメモリ内への書き込み)

Realtime オーディオモデル

Realtime (RT) オーディオモデルは、WebSocket を使用して OpenAI の Realtime audio API にイベントを送信します。動作の流れは次のとおりです。
  1. init: ローカルバッファ (入力オーディオ) とストリーム (assistant の再生ストリーム、ユーザーオーディオのディスク書き込みストリーム) を初期化し、Realtime API への接続を開きます。
  2. receive_messages_thread: API からのメッセージ受信を処理するスレッドです。主に次の 4 種類のイベントを処理します。 - RESPONSE_AUDIO_TRANSCRIPT_DONE: サーバーは assistant の応答が完了したことを示し、その文字起こしを返します。
    • CONVERSATION_ITEM_INPUT_AUDIO_TRANSCRIPTION_COMPLETED: サーバーはユーザーのオーディオの文字起こしが完了したことを示し、その文字起こし結果を送信します。これを Weave にログし、ユーザー向けに表示します。
    • RESPONSE_AUDIO_DELTA: サーバーは assistant の応答オーディオの新しいチャンクを送信します。これを response ID に対応する進行中の応答データに追加し、再生用の出力ストリームにも追加します。
    • RESPONSE_DONE: サーバーは assistant の応答が完了したことを示します。応答に関連付けられたすべてのオーディオチャンクと文字起こしを取得し、これらを Weave にログします。
    3.send_audio: ハンドラーはユーザーオーディオのチャンクをバッファに追加し、オーディオバッファが一定のサイズに達すると、そのチャンクを送信します。

オーディオレコーダー

RTAudioモデルのsend_audio methodに接続されたハンドラー付きのpyaudio入力ストリームを使用します。このストリームはメインスレッドに返されるため、プログラムの終了時に安全に停止できます。

メインスレッド (実行してください!)

メインスレッドでは、Weave を組み込んだ Realtime オーディオモデル を開始します。次に、録音を開始し、ユーザーによるキーボード割り込みを待ちます。