![見出し画像](https://assets.st-note.com/production/uploads/images/158354627/rectangle_large_type_2_d26fdaf1e58737a3132686f23914fdee.png?width=1200)
OpenAI の Chat Completions API のオーディオ入出力を試す
「OpenAI」の「Chat Completions API」のオーディオ入出力を試したのでまとめました。
1. Chat Completions API のオーディオ入出力
OpenAIの一部のモデルは、テキストや画像に加えて、オーディオ入出力に対応しています。オーディオ入力は、テキスト単独よりも豊富なデータを含むことができ、モデルが入力のトーンや抑揚、その他のニュアンスを検出することができます。
オーディオ機能で、次のことができます。
・本文の音声要約の生成 (テキスト入力、オーディオ出力)
・録音で感情分析を実行 (オーディオ入力、テキスト出力)
・非同期な Speech to Speech (オーディオ入力、オーディオ出力)
2. モデルからのオーディオ出力
「Google Colab」でのセットアップ手順は、次のとおりです。
(1) パッケージのインストール。
# パッケージのインストール
!pip install openai
(2) 環境変数の準備。
左端の鍵アイコンで「OPENAI_API_KEY」を設定してから、以下のセルを実行してください。
import os
from google.colab import userdata
# 環境変数の準備 (左端の鍵アイコンでOPENAI_API_KEYを設定)
os.environ["OPENAI_API_KEY"] = userdata.get("OPENAI_API_KEY")
(3) 推論の実行。
import base64
from openai import OpenAI
# OpenAIクライアントの準備
client = OpenAI()
# 推論の実行
completion = client.chat.completions.create(
model="gpt-4o-audio-preview",
modalities=["text", "audio"], # テキスト入力 → オーディオ出力
audio={"voice": "alloy", "format": "wav"},
messages=[
{
"role": "user",
"content": "富士山の高さは?"
}
]
)
# wavの出力
wav_bytes = base64.b64decode(completion.choices[0].message.audio.data)
with open("output.wav", "wb") as f:
f.write(wav_bytes)
# 文字起こし
print(completion.choices[0].message.audio.transcript)
富士山の高さは3,776メートルです。
モデルは「gpt-4o-audio-preview」を指定します。
主なパラメータは次のとおりです。
・modality : 生成させたい出力タイプ (デフォルト:["text"])
・audio :
・voice : 声 (alloy, echo, fable, onyx, nova, shimmer)
・format : フォーマット (wav, mp3, flac, opus, pcm16)
3. モデルへのオーディオ入力
(1) 左端のフォルダアイコンから、「input.wav」をアップロード。
「富士山の高さは?」というwavを作成してアップロードします。
(2) 推論の実行。
import base64
import requests
from openai import OpenAI
# OpenAIクライアントの準備
client = OpenAI()
# オーディオの読み込み
with open("input.wav", "rb") as audio_file:
wav_data = audio_file.read()
encoded_string = base64.b64encode(wav_data).decode('utf-8')
# 推論の実行
completion = client.chat.completions.create(
model="gpt-4o-audio-preview",
modalities=["text", "audio"],
audio={"voice": "alloy", "format": "wav"},
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": encoded_string,
"format": "wav"
}
}
]
},
]
)
# wavの出力
wav_bytes = base64.b64decode(completion.choices[0].message.audio.data)
with open("output.wav", "wb") as f:
f.write(wav_bytes)
# 文字起こし
print(completion.choices[0].message.audio.transcript)
富士山の高さは、標高3,777メートルです。これは日本で最も高い山として知られており、毎年多くの登山者が訪れます。
4. マルチターン会話
モデルからのオーディオ出力をマルチターン会話への入力として使用するには、オーディオ生成の応答データに表示される生成されたIDを使用します。
次のようなJSONの応答があった場合
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"refusal": null,
"audio": {
"id": "audio_abc123",
"expires_at": 1729018505,
"data": "<bytes omitted>",
"transcript": "Yes, golden retrievers are known to be ..."
}
},
"finish_reason": "stop"
}
次のように会話履歴を指定します。
messages = [
{
"role": "user",
"content": "Is a golden retriever a good family dog?"
},
{
"role": "assistant",
"audio": {
"id": "audio_abc123"
}
},
{
"role": "user",
"content": "Why do you say they are loyal?"
}
]
5. FAQ
Q. gpt-4o-audio-previewでサポートされているモダリティは?
A. 入出力の許容可能な組み合わせは次のとおりです。
・テキスト 入力 → テキスト+オーディオ 出力
・オーディオ 入力 → テキスト+オーディオ 出力
・オーディオ 入力 → テキスト 出力
・テキスト+オーディオ 入力 → テキスト+オーディオ 出力
・テキスト+オーディオ 入力 → テキスト 出力
Q. Chat Completions のモデルは、Realtime APIとどのように異なるか?
A. 基礎となるGPT-4o Audioモデルはまったく同じです。Realtime API は、同じモデルを低レイテンシーで動作します。
Q. トークンの観点から、モデルへのオーディオ入力についてどう思うか?
A. これを公開するためのより良いツールに取り組んでいますが、約1時間のオーディオ入力は、現在このモデルでサポートされている最大コンテキストウィンドウである128kトークンに相当します。
Q. 受信する出力モダリティをどのように制御するか?
A. 現在、このモデルはプログラムでのみモダリティ= ["text", "audio"] を許可しています。将来的には、このパラメータはより多くのコントロールを提供します。
Q. Tool (Function) Callingはどのように機能するか?
A. Tool(Function)Callingは、Chat Completionsの他のモデルと同じように機能します。詳しくはこちらを参照。