注
現在、この機能はパブリック プレビュー段階にあります。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。
音声とオーディオ用 Azure OpenAI GPT-4o Realtime API は、GPT-4o モデル ファミリの一部であり、低待機時間の "音声入力、音声出力" の会話をサポートします。
WebRTC または WebSocket を介して Realtime API を使用して、オーディオ入力をモデルに送信し、リアルタイムでオーディオ応答を受信できます。
この記事の手順に従って、WebSocket 経由で Realtime API の使用を開始します。 待機時間が短く要件ではないサーバー間シナリオでは、WebSocket 経由で Realtime API を使用します。
ヒント
ほとんどの場合、Web アプリケーションやモバイル アプリなどのクライアント側アプリケーションでリアルタイムオーディオ ストリーミングを行う場合は、 WebRTC 経由の Realtime API を使用することをお勧めします。 WebRTC は、待機時間が短くリアルタイムのオーディオ ストリーミング用に設計されており、ほとんどのユース ケースに最適です。
サポートされているモデル
GPT 4o リアルタイム モデルは、グローバルなデプロイで利用できます。
-
gpt-4o-realtime-preview
(バージョン2024-12-17
) -
gpt-4o-mini-realtime-preview
(バージョン2024-12-17
)
詳細については、モデルとバージョンのドキュメントを参照してください。
API のサポート
Realtime API のサポートは、API バージョン 2024-10-01-preview
(廃止) で最初に追加されました。 最新の Realtime API 機能にアクセスするには、バージョン 2025-04-01-preview
を使用します。
リアルタイム オーディオ向けモデルのデプロイ
Azure AI Foundry ポータルで gpt-4o-mini-realtime-preview
モデルをデプロイするには:
- Azure AI Foundry ポータルに移動し、プロジェクトを作成または選択します。
- 左側のウィンドウの [マイ アセット] から [モデルとエンドポイント] を選択します。
- [+ モデルのデプロイ] を選択>ベース モデルをデプロイしてデプロイ ウィンドウを開きます。
-
gpt-4o-mini-realtime-preview
モデルを検索して選択し、[確認] を選択します。 - デプロイの詳細を確認し、[デプロイ] を選択 します。
- ウィザードに従ってモデルのデプロイを完了します。
gpt-4o-mini-realtime-preview
モデルのデプロイが済んだので、Azure AI Foundry ポータルの Audio playground または Realtime API で操作できます。
GPT-4o リアルタイム オーディオを使用する
デプロイされた gpt-4o-mini-realtime-preview
モデルと Azure AI Foundry の [リアルタイム オーディオ] プレイグラウンド内でチャットするには、次の手順に従います。
Azure AI Foundry ポータルに移動し、
gpt-4o-mini-realtime-preview
モデルがデプロイされているプロジェクトを選択します。左側のウィンドウから [プレイグラウンド ] を選択します。
オーディオプレイグラウンド>オーディオプレイグラウンドを試すを選択。
注
チャットプレイグラウンドは、
gpt-4o-mini-realtime-preview
モデルをサポートしていません。 このセクションの説明に従って 、オーディオプレイグラウンド を使用します。gpt-4o-mini-realtime-preview
ドロップダウンから、デプロイした モデルを選びます。必要に応じて、[モデルに指示とコンテキストを与える] テキスト ボックスの内容を編集できます。 ふるまいに関する指示と、応答の生成時に参照する必要があるコンテキストをモデルに与えます。 アシスタントのパーソナリティを記述したり、答えるべきことと答えるべきでないことを指示したり、応答のフォーマットを指示したりすることができます。
必要に応じて、しきい値、プレフィックスの埋め込み、無音時間などの設定を変更します。
[聞き取りを開始] を選んでセッションを始めます。 マイクに向かって話してチャットを開始できます。
話すことで、いつでもチャットを中断できます。 [聞き取りを停止する] ボタンを選ぶと、チャットを終了できます。
前提条件
- Azure サブスクリプション - 無料アカウントを作成します
- Node.js (LTS または ESM サポート)。
- サポートされているリージョンのいずれかで作成された Azure OpenAI リソース。 利用できるリージョンについて詳しくは、モデルとバージョンに関するドキュメントをご覧ください。
- 次に、Azure OpenAI リソースを使って
gpt-4o-mini-realtime-preview
モデルをデプロイする必要があります。 詳細については、「Azure OpenAI を使用してリソースを作成し、モデルをデプロイする」を参照してください。
Microsoft Entra ID の前提条件
Microsoft Entra ID で推奨されるキーレス認証の場合、次のことを行う必要があります。
- Microsoft Entra ID でのキーレス認証に使われる Azure CLI をインストールします。
- ユーザー アカウントに
Cognitive Services User
ロールを割り当てます。 Azure portal の [アクセス制御 (IAM)]>[ロールの割り当ての追加] で、ロールを割り当てることができます。
リアルタイム オーディオ向けモデルのデプロイ
Azure AI Foundry ポータルで gpt-4o-mini-realtime-preview
モデルをデプロイするには:
- Azure AI Foundry ポータルに移動し、プロジェクトを作成または選択します。
- 左側のウィンドウの [マイ アセット] から [モデルとエンドポイント] を選択します。
- [+ モデルのデプロイ] を選択>ベース モデルをデプロイしてデプロイ ウィンドウを開きます。
-
gpt-4o-mini-realtime-preview
モデルを検索して選択し、[確認] を選択します。 - デプロイの詳細を確認し、[デプロイ] を選択 します。
- ウィザードに従ってモデルのデプロイを完了します。
gpt-4o-mini-realtime-preview
モデルのデプロイが済んだので、Azure AI Foundry ポータルの Audio playground または Realtime API で操作できます。
設定
realtime-audio-quickstart
新しいフォルダーを作成し、次のコマンドを使用してクイック スタート フォルダーに移動します。mkdir realtime-audio-quickstart && cd realtime-audio-quickstart
次のコマンドで
package.json
を作成します。npm init -y
次を使用して JavaScript 用の OpenAI クライアント ライブラリをインストールします。
npm install openai
Microsoft Entra ID で推奨されるキーレス認証の場合、次を使って
@azure/identity
パッケージをインストールします。npm install @azure/identity
リソース情報の取得
Azure OpenAI リソースでアプリケーションを認証するには、次の情報を取得する必要があります。
変数名 | 値 |
---|---|
AZURE_OPENAI_ENDPOINT |
この値は、Azure portal からリソースを調べる際の キーとエンドポイント セクションにあります。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
この値は、モデルのデプロイ時にデプロイに対して選択したカスタム名に対応します。 この値は、Azure portal の [リソース管理]>[モデル デプロイ] にあります。 |
OPENAI_API_VERSION |
API バージョンの詳細を参照してください。 コードでバージョンを変更することも、環境変数を使用することもできます。 |
注意事項
SDK で推奨されるキーレス認証を使用するには、AZURE_OPENAI_API_KEY
環境変数が設定されていないことを確認します。
オーディオ出力のテキスト
次のコードを使用して
index.js
ファイルを作成します。import { OpenAIRealtimeWS } from "openai/beta/realtime/ws"; import { AzureOpenAI } from "openai"; import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity"; async function main() { // You will need to set these environment variables or edit the following values const endpoint = process.env.AZURE_OPENAI_ENDPOINT || "AZURE_OPENAI_ENDPOINT"; // Required Azure OpenAI deployment name and API version const deploymentName = process.env.AZURE_OPENAI_DEPLOYMENT_NAME || "gpt-4o-mini-realtime-preview"; const apiVersion = process.env.OPENAI_API_VERSION || "2025-04-01-preview"; // Keyless authentication const credential = new DefaultAzureCredential(); const scope = "https://cognitiveservices.azure.com/.default"; const azureADTokenProvider = getBearerTokenProvider(credential, scope); const azureOpenAIClient = new AzureOpenAI({ azureADTokenProvider, apiVersion: apiVersion, deployment: deploymentName, endpoint: endpoint, }); const realtimeClient = await OpenAIRealtimeWS.azure(azureOpenAIClient); realtimeClient.socket.on("open", () => { console.log("Connection opened!"); realtimeClient.send({ type: "session.update", session: { modalities: ["text", "audio"], model: "gpt-4o-mini-realtime-preview", }, }); realtimeClient.send({ type: "conversation.item.create", item: { type: "message", role: "user", content: [{ type: "input_text", text: "Please assist the user" }], }, }); realtimeClient.send({ type: "response.create" }); }); realtimeClient.on("error", (err) => { // Instead of throwing the error, you can log it // and continue processing events. throw err; }); realtimeClient.on("session.created", (event) => { console.log("session created!", event.session); console.log(); }); realtimeClient.on("response.text.delta", (event) => process.stdout.write(event.delta)); realtimeClient.on("response.audio.delta", (event) => { const buffer = Buffer.from(event.delta, "base64"); console.log(`Received ${buffer.length} bytes of audio data.`); }); realtimeClient.on("response.audio_transcript.delta", (event) => { console.log(`Received text delta:${event.delta}.`); }); realtimeClient.on("response.text.done", () => console.log()); realtimeClient.on("response.done", () => realtimeClient.close()); realtimeClient.socket.on("close", () => console.log("\nConnection closed!")); } main().catch((err) => { console.error("The sample encountered an error:", err); }); export { main };
次のコマンドを使用して Azure にサインインします。
az login
JavaScript ファイルを実行します。
node index.js
応答が返されるまで少し時間がかかります。
出力
このスクリプトは、モデルから応答を取得して、受け取ったトランスクリプトとオーディオ データを出力します。
出力は次のようになります。
Received text delta:Of.
Received text delta: course.
Received text delta:!.
Received text delta: How.
Received text delta: can.
Received 4800 bytes of audio data.
Received 7200 bytes of audio data.
Received text delta: I.
Received 12000 bytes of audio data.
Received text delta: help.
Received text delta: you.
Received text delta: today.
Received text delta:?.
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 26400 bytes of audio data.
Connection closed!
前提条件
- Azure サブスクリプション。 無料で作成できます。
- Python 3.8 以降のバージョン。 Python 3.10 以降を使用することをお勧めしますが、少なくとも Python 3.8 が必要です。 適切なバージョンの Python がインストールされていない場合は、オペレーティング システムへの Python のインストールの最も簡単な方法として、VS Code Python チュートリアルの手順に従うことができます。
- サポートされているリージョンのいずれかで作成された Azure OpenAI リソース。 利用できるリージョンについて詳しくは、モデルとバージョンに関するドキュメントをご覧ください。
- 次に、Azure OpenAI リソースを使って
gpt-4o-mini-realtime-preview
モデルをデプロイする必要があります。 詳細については、「Azure OpenAI を使用してリソースを作成し、モデルをデプロイする」を参照してください。
Microsoft Entra ID の前提条件
Microsoft Entra ID で推奨されるキーレス認証の場合、次のことを行う必要があります。
- Microsoft Entra ID でのキーレス認証に使われる Azure CLI をインストールします。
- ユーザー アカウントに
Cognitive Services User
ロールを割り当てます。 Azure portal の [アクセス制御 (IAM)]>[ロールの割り当ての追加] で、ロールを割り当てることができます。
リアルタイム オーディオ向けモデルのデプロイ
Azure AI Foundry ポータルで gpt-4o-mini-realtime-preview
モデルをデプロイするには:
- Azure AI Foundry ポータルに移動し、プロジェクトを作成または選択します。
- 左側のウィンドウの [マイ アセット] から [モデルとエンドポイント] を選択します。
- [+ モデルのデプロイ] を選択>ベース モデルをデプロイしてデプロイ ウィンドウを開きます。
-
gpt-4o-mini-realtime-preview
モデルを検索して選択し、[確認] を選択します。 - デプロイの詳細を確認し、[デプロイ] を選択 します。
- ウィザードに従ってモデルのデプロイを完了します。
gpt-4o-mini-realtime-preview
モデルのデプロイが済んだので、Azure AI Foundry ポータルの Audio playground または Realtime API で操作できます。
設定
realtime-audio-quickstart
新しいフォルダーを作成し、次のコマンドを使用してクイック スタート フォルダーに移動します。mkdir realtime-audio-quickstart && cd realtime-audio-quickstart
仮想環境を作成します。 Python 3.10 以降が既にインストールされている場合は、次のコマンドを使用して仮想環境を作成できます:
Python 環境をアクティブ化するということは、コマンド ラインから
python
またはpip
を実行する際に、アプリケーションの.venv
フォルダーに含まれている Python インタープリターを使用するということを意味します。deactivate
コマンドを使用して Python 仮想環境を終了し、必要に応じて、それを後で再アクティブ化できます。ヒント
新しい Python 環境を作成してアクティブにし、このチュートリアルに必要なパッケージのインストールに使うことをお勧めします。 グローバルな Python インストールにパッケージをインストールしないでください。 Python パッケージをインストールするときは、常に仮想または Conda 環境を使う必要があります。そうしないと、Python のグローバル インストールが損なわれる可能性があります。
次を使用して、OpenAI Python クライアント ライブラリをインストールします。
pip install openai[realtime]
注
このライブラリは、OpenAI によって保持されます。 このライブラリの最新の更新を追跡するには、リリース履歴を参照してください。
Microsoft Entra ID で推奨されるキーレス認証の場合、次を使って
azure-identity
パッケージをインストールします。pip install azure-identity
リソース情報の取得
Azure OpenAI リソースでアプリケーションを認証するには、次の情報を取得する必要があります。
変数名 | 値 |
---|---|
AZURE_OPENAI_ENDPOINT |
この値は、Azure portal からリソースを調べる際の キーとエンドポイント セクションにあります。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
この値は、モデルのデプロイ時にデプロイに対して選択したカスタム名に対応します。 この値は、Azure portal の [リソース管理]>[モデル デプロイ] にあります。 |
OPENAI_API_VERSION |
API バージョンの詳細を参照してください。 コードでバージョンを変更することも、環境変数を使用することもできます。 |
注意事項
SDK で推奨されるキーレス認証を使用するには、AZURE_OPENAI_API_KEY
環境変数が設定されていないことを確認します。
オーディオ出力のテキスト
次のコードを使用して
text-in-audio-out.py
ファイルを作成します。import os import base64 import asyncio from openai import AsyncAzureOpenAI from azure.identity.aio import DefaultAzureCredential, get_bearer_token_provider async def main() -> None: """ When prompted for user input, type a message and hit enter to send it to the model. Enter "q" to quit the conversation. """ credential = DefaultAzureCredential() token_provider=get_bearer_token_provider(credential, "https://cognitiveservices.azure.com/.default") client = AsyncAzureOpenAI( azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"], azure_ad_token_provider=token_provider, api_version="2025-04-01-preview", ) async with client.beta.realtime.connect( model="gpt-4o-realtime-preview", # name of your deployment ) as connection: await connection.session.update(session={"modalities": ["text", "audio"]}) while True: user_input = input("Enter a message: ") if user_input == "q": break await connection.conversation.item.create( item={ "type": "message", "role": "user", "content": [{"type": "input_text", "text": user_input}], } ) await connection.response.create() async for event in connection: if event.type == "response.text.delta": print(event.delta, flush=True, end="") elif event.type == "response.audio.delta": audio_data = base64.b64decode(event.delta) print(f"Received {len(audio_data)} bytes of audio data.") elif event.type == "response.audio_transcript.delta": print(f"Received text delta: {event.delta}") elif event.type == "response.text.done": print() elif event.type == "response.done": break await credential.close() asyncio.run(main())
次のコマンドを使用して Azure にサインインします。
az login
Python ファイルを実行します。
python text-in-audio-out.py
ユーザー入力を求められたら、メッセージを入力し、Enter キーを押してモデルに送信します。 「q」と入力して会話を終了します。
応答が返されるまで少し時間がかかります。
出力
このスクリプトは、モデルから応答を取得して、受け取ったトランスクリプトとオーディオ データを出力します。
出力は、次のようになります。
Enter a message: Please assist the user
Received text delta: Of
Received text delta: course
Received text delta: !
Received text delta: How
Received 4800 bytes of audio data.
Received 7200 bytes of audio data.
Received 12000 bytes of audio data.
Received text delta: can
Received text delta: I
Received text delta: assist
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received text delta: you
Received text delta: today
Received text delta: ?
Received 12000 bytes of audio data.
Received 24000 bytes of audio data.
Received 36000 bytes of audio data.
Enter a message: q
前提条件
- Azure サブスクリプション - 無料アカウントを作成します
- Node.js (LTS または ESM サポート)。
- グローバルにインストールされた TypeScript。
- サポートされているリージョンのいずれかで作成された Azure OpenAI リソース。 利用できるリージョンについて詳しくは、モデルとバージョンに関するドキュメントをご覧ください。
- 次に、Azure OpenAI リソースを使って
gpt-4o-mini-realtime-preview
モデルをデプロイする必要があります。 詳細については、「Azure OpenAI を使用してリソースを作成し、モデルをデプロイする」を参照してください。
Microsoft Entra ID の前提条件
Microsoft Entra ID で推奨されるキーレス認証の場合、次のことを行う必要があります。
- Microsoft Entra ID でのキーレス認証に使われる Azure CLI をインストールします。
- ユーザー アカウントに
Cognitive Services User
ロールを割り当てます。 Azure portal の [アクセス制御 (IAM)]>[ロールの割り当ての追加] で、ロールを割り当てることができます。
リアルタイム オーディオ向けモデルのデプロイ
Azure AI Foundry ポータルで gpt-4o-mini-realtime-preview
モデルをデプロイするには:
- Azure AI Foundry ポータルに移動し、プロジェクトを作成または選択します。
- 左側のウィンドウの [マイ アセット] から [モデルとエンドポイント] を選択します。
- [+ モデルのデプロイ] を選択>ベース モデルをデプロイしてデプロイ ウィンドウを開きます。
-
gpt-4o-mini-realtime-preview
モデルを検索して選択し、[確認] を選択します。 - デプロイの詳細を確認し、[デプロイ] を選択 します。
- ウィザードに従ってモデルのデプロイを完了します。
gpt-4o-mini-realtime-preview
モデルのデプロイが済んだので、Azure AI Foundry ポータルの Audio playground または Realtime API で操作できます。
設定
realtime-audio-quickstart
新しいフォルダーを作成し、次のコマンドを使用してクイック スタート フォルダーに移動します。mkdir realtime-audio-quickstart && cd realtime-audio-quickstart
次のコマンドで
package.json
を作成します。npm init -y
次のコマンドを使用して、
package.json
を ECMAScript に更新します。npm pkg set type=module
次を使用して JavaScript 用の OpenAI クライアント ライブラリをインストールします。
npm install openai
Microsoft Entra ID で推奨されるキーレス認証の場合、次を使って
@azure/identity
パッケージをインストールします。npm install @azure/identity
リソース情報の取得
Azure OpenAI リソースでアプリケーションを認証するには、次の情報を取得する必要があります。
変数名 | 値 |
---|---|
AZURE_OPENAI_ENDPOINT |
この値は、Azure portal からリソースを調べる際の キーとエンドポイント セクションにあります。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
この値は、モデルのデプロイ時にデプロイに対して選択したカスタム名に対応します。 この値は、Azure portal の [リソース管理]>[モデル デプロイ] にあります。 |
OPENAI_API_VERSION |
API バージョンの詳細を参照してください。 コードでバージョンを変更することも、環境変数を使用することもできます。 |
注意事項
SDK で推奨されるキーレス認証を使用するには、AZURE_OPENAI_API_KEY
環境変数が設定されていないことを確認します。
オーディオ出力のテキスト
次のコードを使用して
index.ts
ファイルを作成します。import { OpenAIRealtimeWS } from "openai/beta/realtime/ws"; import { AzureOpenAI } from "openai"; import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity"; async function main(): Promise<void> { // You will need to set these environment variables or edit the following values const endpoint = process.env.AZURE_OPENAI_ENDPOINT || "AZURE_OPENAI_ENDPOINT"; // Required Azure OpenAI deployment name and API version const deploymentName = process.env.AZURE_OPENAI_DEPLOYMENT_NAME || "gpt-4o-mini-realtime-preview"; const apiVersion = process.env.OPENAI_API_VERSION || "2025-04-01-preview"; // Keyless authentication const credential = new DefaultAzureCredential(); const scope = "https://cognitiveservices.azure.com/.default"; const azureADTokenProvider = getBearerTokenProvider(credential, scope); const azureOpenAIClient = new AzureOpenAI({ azureADTokenProvider, apiVersion: apiVersion, deployment: deploymentName, endpoint: endpoint, }); const realtimeClient = await OpenAIRealtimeWS.azure(azureOpenAIClient); realtimeClient.socket.on("open", () => { console.log("Connection opened!"); realtimeClient.send({ type: "session.update", session: { modalities: ["text", "audio"], model: "gpt-4o-mini-realtime-preview", }, }); realtimeClient.send({ type: "conversation.item.create", item: { type: "message", role: "user", content: [{ type: "input_text", text: "Please assist the user" }], }, }); realtimeClient.send({ type: "response.create" }); }); realtimeClient.on("error", (err) => { // Instead of throwing the error, you can log it // and continue processing events. throw err; }); realtimeClient.on("session.created", (event) => { console.log("session created!", event.session); console.log(); }); realtimeClient.on("response.text.delta", (event) => process.stdout.write(event.delta)); realtimeClient.on("response.audio.delta", (event) => { const buffer = Buffer.from(event.delta, "base64"); console.log(`Received ${buffer.length} bytes of audio data.`); }); realtimeClient.on("response.audio_transcript.delta", (event) => { console.log(`Received text delta:${event.delta}.`); }); realtimeClient.on("response.text.done", () => console.log()); realtimeClient.on("response.done", () => realtimeClient.close()); realtimeClient.socket.on("close", () => console.log("\nConnection closed!")); } main().catch((err) => { console.error("The sample encountered an error:", err); }); export { main };
TypeScript コードをトランスパイルするために
tsconfig.json
ファイルを作成して、ECMAScript 向けの次のコードをコピーします。{ "compilerOptions": { "module": "NodeNext", "target": "ES2022", // Supports top-level await "moduleResolution": "NodeNext", "skipLibCheck": true, // Avoid type errors from node_modules "strict": true // Enable strict type-checking options }, "include": ["*.ts"] }
TypeScript から JavaScript にトランスパイルします。
tsc
次のコマンドを使用して Azure にサインインします。
az login
次のコマンドを使用して、コードを実行します。
node index.js
応答が返されるまで少し時間がかかります。
出力
このスクリプトは、モデルから応答を取得して、受け取ったトランスクリプトとオーディオ データを出力します。
出力は次のようになります。
Received text delta:Of.
Received text delta: course.
Received text delta:!.
Received text delta: How.
Received text delta: can.
Received 4800 bytes of audio data.
Received 7200 bytes of audio data.
Received text delta: I.
Received 12000 bytes of audio data.
Received text delta: help.
Received text delta: you.
Received text delta: today.
Received text delta:?.
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
Received 26400 bytes of audio data.
Connection closed!
関連するコンテンツ
- Realtime API の使用方法の詳細を確認する
- Realtime API リファレンスを参照する
- Azure OpenAI のクォータと制限の詳細を確認する
- Speech サービスの言語と音声のサポートの詳細を確認する