Documentation Index
Fetch the complete documentation index at: https://wb-21fd5541-update-training-api-26.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
これはインタラクティブなノートブックです。ローカルで実行するか、以下のリンクを使用してください:
Audio データで Weave を使用する方法:OpenAI の例
このデモでは、OpenAI の chat completions API と GPT 4o Audio Preview を使用して、テキストプロンプトに対する音声レスポンスを生成し、それらを Weave で追跡します。
高度なユースケースとして、OpenAI Realtime API を活用してリアルタイムで音声をストリーミングします。動画デモを見るには、次のサムネイルをクリックするか、こちらをクリックしてください。
セットアップ
まず、OpenAI (openai) と Weave (weave) の依存関係、および API キー管理用の依存関係 set-env をインストールします。
%%capture
!pip install openai
!pip install weave
!pip install set-env-colab-kaggle-dotenv -q # 環境変数用
python
%%capture
# openai のバグを修正するための暫定的な回避策:
# TypeError: Client.__init__() got an unexpected keyword argument 'proxies'
# 詳細は https://community.openai.com/t/error-with-openai-1-56-0-client-init-got-an-unexpected-keyword-argument-proxies/1040332/15 を参照
!pip install "httpx<0.28"
次に、OpenAI と Weave に必要な API キーを読み込みます。ここでは、Google Colab のシークレットキーマネージャーと互換性があり、Colab 固有の google.colab.userdata の代替となる set_env を使用します。使用方法については こちら を参照してください。
# 環境変数を設定します。
from set_env import set_env
_ = set_env("OPENAI_API_KEY")
_ = set_env("WANDB_API_KEY")
最後に、必要なライブラリをインポートします。
import base64
import os
import time
import wave
import numpy as np
from IPython.display import display
from openai import OpenAI
import weave
音声ストリーミングと保存の例
次に、音声モダリティを有効にした OpenAI の completions エンドポイントへのコールを設定します。まず、OpenAI クライアントを作成し、Weave の Projects を開始します。
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
weave.init("openai-audio-chat")
ここで、OpenAI の completions リクエストを定義し、Weave のデコレータ (op) を追加します。
関数 prompt_endpont_and_log_trace を定義します。この関数には主に 3 つのステップがあります:
-
テキストと音声の入出力に対応した
GPT 4o Audio Preview モデルを使用して、completion オブジェクトを作成します。
- モデルに対し、アクセントを変えながらゆっくりと 13 まで数えるようにプロンプトを出します。
- completion を “stream” に設定します。
-
ストリームされたデータがチャンクごとに書き込まれる新しい出力ファイルを開きます。
-
音声ファイルへのオープンファイルハンドラーを返し、Weave がトレース内に音声データをログに記録するようにします。
SAMPLE_RATE = 22050
@weave.op()
def prompt_endpoint_and_log_trace(system_prompt=None, user_prompt=None):
if not system_prompt:
system_prompt = "You're the fastest counter in the world"
if not user_prompt:
user_prompt = "Count to 13 super super slow, enunciate each number with a dramatic flair, changing up accents as you go along. British, French, German, Spanish, etc."
# 音声モダリティを指定して OpenAI API にリクエスト
completion = client.chat.completions.create(
model="gpt-4o-audio-preview",
modalities=["text", "audio"],
audio={"voice": "fable", "format": "pcm16"},
stream=True,
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt},
],
)
# 書き込み用に wave ファイルを開く
with wave.open("./output.wav", "wb") as wav_file:
wav_file.setnchannels(1) # モノラル
wav_file.setsampwidth(2) # 16-bit
wav_file.setframerate(SAMPLE_RATE) # サンプリングレート (必要に応じて調整)
# API からストリームされるチャンクを書き込む
for chunk in completion:
if (
hasattr(chunk, "choices")
and chunk.choices is not None
and len(chunk.choices) > 0
and hasattr(chunk.choices[0].delta, "audio")
and chunk.choices[0].delta.audio.get("data") is not None
):
# base64 音声データをデコード
audio_data = base64.b64decode(chunk.choices[0].delta.audio.get("data"))
# 現在のチャンクを wave ファイルに書き込む
wav_file.writeframes(audio_data)
# ファイルを Weave op に返す
return wave.open("output.wav", "rb")
テスト
以下のセルを実行します。システムプロンプトとユーザープロンプト、および出力音声が Weave のトレースに保存されます。
セルを実行した後、”🍩” 絵文字の隣にあるリンクをクリックしてトレースを確認してください。
from IPython.display import Audio
# 音声ストリームを書き込む関数を呼び出す
prompt_endpoint_and_log_trace(
system_prompt="You're the fastest counter in the world",
user_prompt="Count to 13 super super slow, enunciate each number with a dramatic flair, changing up accents as you go along. British, French, German, Spanish, etc.",
)
# 更新された音声ストリームを表示
display(Audio("output.wav", rate=SAMPLE_RATE, autoplay=True))
高度な使い方:Weave を使った Realtime Audio API