次の方法で共有


音声とオーディオ用の GPT-4o Realtime API (プレビュー)

現在、この機能はパブリック プレビュー段階にあります。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、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 モデルをデプロイするには:

  1. Azure AI Foundry ポータルに移動し、プロジェクトを作成または選択します。
  2. 左側のウィンドウの [マイ アセット] から [モデルとエンドポイント] を選択します。
  3. [+ モデルのデプロイ] を選択>ベース モデルをデプロイしてデプロイ ウィンドウを開きます。
  4. gpt-4o-mini-realtime-preview モデルを検索して選択し、[確認] を選択します。
  5. デプロイの詳細を確認し、[デプロイ] を選択 します
  6. ウィザードに従ってモデルのデプロイを完了します。

gpt-4o-mini-realtime-preview モデルのデプロイが済んだので、Azure AI Foundry ポータルの Audio playground または Realtime API で操作できます。

GPT-4o リアルタイム オーディオを使用する

デプロイされた gpt-4o-mini-realtime-preview モデルと Azure AI Foundry[リアルタイム オーディオ] プレイグラウンド内でチャットするには、次の手順に従います。

  1. Azure AI Foundry ポータルに移動し、gpt-4o-mini-realtime-preview モデルがデプロイされているプロジェクトを選択します。

  2. 左側のウィンドウから [プレイグラウンド ] を選択します。

  3. オーディオプレイグラウンド>オーディオプレイグラウンドを試すを選択。

    チャットプレイグラウンドは、gpt-4o-mini-realtime-preview モデルをサポートしていません。 このセクションの説明に従って 、オーディオプレイグラウンド を使用します。

  4. gpt-4o-mini-realtime-preview ドロップダウンから、デプロイした モデルを選びます。

    デプロイされたモデルが選択されているオーディオプレイグラウンドのスクリーンショット。

  5. 必要に応じて、[モデルに指示とコンテキストを与える] テキスト ボックスの内容を編集できます。 ふるまいに関する指示と、応答の生成時に参照する必要があるコンテキストをモデルに与えます。 アシスタントのパーソナリティを記述したり、答えるべきことと答えるべきでないことを指示したり、応答のフォーマットを指示したりすることができます。

  6. 必要に応じて、しきい値、プレフィックスの埋め込み、無音時間などの設定を変更します。

  7. [聞き取りを開始] を選んでセッションを始めます。 マイクに向かって話してチャットを開始できます。

  8. 話すことで、いつでもチャットを中断できます。 [聞き取りを停止する] ボタンを選ぶと、チャットを終了できます。

前提条件

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 モデルをデプロイするには:

  1. Azure AI Foundry ポータルに移動し、プロジェクトを作成または選択します。
  2. 左側のウィンドウの [マイ アセット] から [モデルとエンドポイント] を選択します。
  3. [+ モデルのデプロイ] を選択>ベース モデルをデプロイしてデプロイ ウィンドウを開きます。
  4. gpt-4o-mini-realtime-preview モデルを検索して選択し、[確認] を選択します。
  5. デプロイの詳細を確認し、[デプロイ] を選択 します
  6. ウィザードに従ってモデルのデプロイを完了します。

gpt-4o-mini-realtime-preview モデルのデプロイが済んだので、Azure AI Foundry ポータルの Audio playground または Realtime API で操作できます。

設定

  1. realtime-audio-quickstart新しいフォルダーを作成し、次のコマンドを使用してクイック スタート フォルダーに移動します。

    mkdir realtime-audio-quickstart && cd realtime-audio-quickstart
    
  2. 次のコマンドで package.json を作成します。

    npm init -y
    
  3. 次を使用して JavaScript 用の OpenAI クライアント ライブラリをインストールします。

    npm install openai
    
  4. 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 環境変数が設定されていないことを確認します。

オーディオ出力のテキスト

  1. 次のコードを使用して 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 };
    
  2. 次のコマンドを使用して Azure にサインインします。

    az login
    
  3. 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!

前提条件

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 モデルをデプロイするには:

  1. Azure AI Foundry ポータルに移動し、プロジェクトを作成または選択します。
  2. 左側のウィンドウの [マイ アセット] から [モデルとエンドポイント] を選択します。
  3. [+ モデルのデプロイ] を選択>ベース モデルをデプロイしてデプロイ ウィンドウを開きます。
  4. gpt-4o-mini-realtime-preview モデルを検索して選択し、[確認] を選択します。
  5. デプロイの詳細を確認し、[デプロイ] を選択 します
  6. ウィザードに従ってモデルのデプロイを完了します。

gpt-4o-mini-realtime-preview モデルのデプロイが済んだので、Azure AI Foundry ポータルの Audio playground または Realtime API で操作できます。

設定

  1. realtime-audio-quickstart新しいフォルダーを作成し、次のコマンドを使用してクイック スタート フォルダーに移動します。

    mkdir realtime-audio-quickstart && cd realtime-audio-quickstart
    
  2. 仮想環境を作成します。 Python 3.10 以降が既にインストールされている場合は、次のコマンドを使用して仮想環境を作成できます:

    py -3 -m venv .venv
    .venv\scripts\activate
    

    Python 環境をアクティブ化するということは、コマンド ラインから python または pip を実行する際に、アプリケーションの .venv フォルダーに含まれている Python インタープリターを使用するということを意味します。 deactivate コマンドを使用して Python 仮想環境を終了し、必要に応じて、それを後で再アクティブ化できます。

    ヒント

    新しい Python 環境を作成してアクティブにし、このチュートリアルに必要なパッケージのインストールに使うことをお勧めします。 グローバルな Python インストールにパッケージをインストールしないでください。 Python パッケージをインストールするときは、常に仮想または Conda 環境を使う必要があります。そうしないと、Python のグローバル インストールが損なわれる可能性があります。

  3. 次を使用して、OpenAI Python クライアント ライブラリをインストールします。

    pip install openai[realtime]
    

    このライブラリは、OpenAI によって保持されます。 このライブラリの最新の更新を追跡するには、リリース履歴を参照してください。

  4. 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 環境変数が設定されていないことを確認します。

オーディオ出力のテキスト

  1. 次のコードを使用して 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())
    
  2. 次のコマンドを使用して Azure にサインインします。

    az login
    
  3. Python ファイルを実行します。

    python text-in-audio-out.py
    
  4. ユーザー入力を求められたら、メッセージを入力し、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

前提条件

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 モデルをデプロイするには:

  1. Azure AI Foundry ポータルに移動し、プロジェクトを作成または選択します。
  2. 左側のウィンドウの [マイ アセット] から [モデルとエンドポイント] を選択します。
  3. [+ モデルのデプロイ] を選択>ベース モデルをデプロイしてデプロイ ウィンドウを開きます。
  4. gpt-4o-mini-realtime-preview モデルを検索して選択し、[確認] を選択します。
  5. デプロイの詳細を確認し、[デプロイ] を選択 します
  6. ウィザードに従ってモデルのデプロイを完了します。

gpt-4o-mini-realtime-preview モデルのデプロイが済んだので、Azure AI Foundry ポータルの Audio playground または Realtime API で操作できます。

設定

  1. realtime-audio-quickstart新しいフォルダーを作成し、次のコマンドを使用してクイック スタート フォルダーに移動します。

    mkdir realtime-audio-quickstart && cd realtime-audio-quickstart
    
  2. 次のコマンドで package.json を作成します。

    npm init -y
    
  3. 次のコマンドを使用して、package.json を ECMAScript に更新します。

    npm pkg set type=module
    
  4. 次を使用して JavaScript 用の OpenAI クライアント ライブラリをインストールします。

    npm install openai
    
  5. 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 環境変数が設定されていないことを確認します。

オーディオ出力のテキスト

  1. 次のコードを使用して 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 };
    
  2. 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"]
    }
    
  3. TypeScript から JavaScript にトランスパイルします。

    tsc
    
  4. 次のコマンドを使用して Azure にサインインします。

    az login
    
  5. 次のコマンドを使用して、コードを実行します。

    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!