次の方法で共有


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

Note

現在、この機能はパブリック プレビュー段階にあります。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

音声とオーディオ用 Azure OpenAI GPT-4o Realtime API は、GPT-4o モデル ファミリの一部であり、低待機時間の "音声入力、音声出力" の会話をサポートします。 GPT-4o オーディオ realtime API は、リアルタイムで低遅延の会話操作を処理するように設計されており、カスタマー サポート エージェント、音声アシスタント、リアルタイム翻訳ツールなど、ユーザーとモデルの間のライブ対話を含むユース ケースに最適です。

Realtime API のほとんどのユーザーは、WebRTC またはテレフォニー システムを使用するアプリケーションを含め、エンドユーザーからリアルタイムでオーディオを配信して受信する必要があります。 Realtime API はエンド ユーザー デバイスに直接接続するようには設計されておらず、クライアント統合に依存してエンド ユーザーのオーディオ ストリームを終了します。

サポートされているモデル

現在 gpt-4o-realtime-preview バージョン: 2024-10-01-preview のみでリアルタイム オーディオがサポートされています。

gpt-4o-realtime-preview モデルは、米国東部 2 リージョンとスウェーデン中部リージョンのグローバル デプロイで使用できます。

重要

制限付き例外が適用されない場合を除き、システムは、Azure OpenAI Service のサービス固有な製品条件の「不正使用監視のためのデータの使用とアクセス」セクションの説明に従って、プロンプトと入力候補を格納します。 gpt-4o-realtime-preview API の使用については、修正された不正使用監視では承認されるお客様に対しても、不正使用監視が有効になります。

API のサポート

Realtime API のサポートは、API バージョン 2024-10-01-preview で最初に追加されました。

Note

API とアーキテクチャの詳細については、GitHub の Azure OpenAI GPT-4o リアルタイム オーディオ リポジトリを参照してください。

リアルタイム オーディオ向けモデルのデプロイ

Azure AI Foundry ポータルで gpt-4o-realtime-preview モデルをデプロイするには:

  1. Azure AI Foundry ポータルに移動し、(モデルのデプロイの有無にかかわらず) Azure OpenAI Service リソースが含まれる Azure サブスクリプションを使ってサインインしていることを確認します。
  2. 左側のペインの [プレイグラウンド] で、[リアルタイム オーディオ] プレイグラウンドを選びます。
  3. [新しいデプロイの作成] を選んで、デプロイ ウィンドウを開きます。
  4. gpt-4o-realtime-preview モデルを検索して選択し、[確認] を選択します。
  5. デプロイ ウィザードで、2024-10-01 モデルのバージョンを選択します。
  6. ウィザードに従ってモデルのデプロイを完了します。

これで gpt-4o-realtime-preview モデルをデプロイしたので、Azure AI Foundry ポータルの [リアルタイム オーディオ] プレイグラウンドまたは Realtime API で、リアルタイムにそれを操作できます。

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

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

  1. Azure AI Foundry ポータルの Azure OpenAI Service ページに移動します。 Azure OpenAI Service リソースとデプロイされた gpt-4o-realtime-preview モデルを持つ Azure サブスクリプションでサインインしていることを確認します。

  2. 左側のペインの [プレイグラウンド] で、[リアルタイム オーディオ] プレイグラウンドを選びます。

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

  4. [マイクを有効にする] を選んで、ブラウザーがマイクにアクセスできるようにします。 既にアクセス許可を付与している場合は、このステップをスキップできます。

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

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

  1. Azure AI Foundry ポータルに移動し、(モデルのデプロイの有無にかかわらず) Azure OpenAI Service リソースが含まれる Azure サブスクリプションを使ってサインインしていることを確認します。
  2. 左側のペインの [プレイグラウンド] で、[リアルタイム オーディオ] プレイグラウンドを選びます。
  3. [新しいデプロイの作成] を選んで、デプロイ ウィンドウを開きます。
  4. gpt-4o-realtime-preview モデルを検索して選択し、[確認] を選択します。
  5. デプロイ ウィザードで、2024-10-01 モデルのバージョンを選択します。
  6. ウィザードに従ってモデルのデプロイを完了します。

これで gpt-4o-realtime-preview モデルをデプロイしたので、Azure AI Foundry ポータルの [リアルタイム オーディオ] プレイグラウンドまたは Realtime API で、リアルタイムにそれを操作できます。

設定

  1. アプリケーションを含める新しいフォルダー realtime-audio-quickstart を作成し、次のコマンドを使用してそのフォルダー内で Visual Studio Code を開きます。

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

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

    npm pkg set type=module
    
  4. 次を使って、JavaScript 用のリアルタイム オーディオ クライアント ライブラリをインストールします。

    npm install https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/js/v0.5.2/rt-client-0.5.2.tgz
    
  5. Microsoft Entra ID で推奨されるキーレス認証の場合、次を使って @azure/identity パッケージをインストールします。

    npm install @azure/identity
    

リソース情報の取得

変数名
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.js ファイルを作成します。

    import { DefaultAzureCredential } from "@azure/identity";
    import { LowLevelRTClient } from "rt-client";
    import dotenv from "dotenv";
    dotenv.config();
    async function text_in_audio_out() {
        // Set environment variables or edit the corresponding values here.
        const endpoint = process.env["AZURE_OPENAI_ENDPOINT"] || "yourEndpoint";
        const deployment = "gpt-4o-realtime-preview";
        if (!endpoint || !deployment) {
            throw new Error("You didn't set the environment variables.");
        }
        const client = new LowLevelRTClient(new URL(endpoint), new DefaultAzureCredential(), { deployment: deployment });
        try {
            await client.send({
                type: "response.create",
                response: {
                    modalities: ["audio", "text"],
                    instructions: "Please assist the user."
                }
            });
            for await (const message of client.messages()) {
                switch (message.type) {
                    case "response.done": {
                        break;
                    }
                    case "error": {
                        console.error(message.error);
                        break;
                    }
                    case "response.audio_transcript.delta": {
                        console.log(`Received text delta: ${message.delta}`);
                        break;
                    }
                    case "response.audio.delta": {
                        const buffer = Buffer.from(message.delta, "base64");
                        console.log(`Received ${buffer.length} bytes of audio data.`);
                        break;
                    }
                }
                if (message.type === "response.done" || message.type === "error") {
                    break;
                }
            }
        }
        finally {
            client.close();
        }
    }
    await text_in_audio_out();
    
  2. 次のコマンドを使用して Azure にサインインします。

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

    node text-in-audio-out.js
    

応答が返されるまで少し時間がかかります。

出力

このスクリプトは、モデルから応答を取得して、受け取ったトランスクリプトとオーディオ データを出力します。

出力は次のようになります。

Received text delta: Hello
Received text delta: !
Received text delta:  How
Received text delta:  can
Received text delta:  I
Received 4800 bytes of audio data.
Received 7200 bytes of audio data.
Received text delta:  help
Received 12000 bytes of audio data.
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 24000 bytes of audio data.

Web アプリケーションのサンプル

GitHub にある JavaScript の Web サンプルでは、GPT-4o Realtime API を使ってモデルとリアルタイムで対話する方法が示されています。 サンプル コードには、ユーザーのマイクからオーディオをキャプチャし、処理のためにモデルに送信する単純な Web インターフェイスが含まれています。 モデルはテキストとオーディオで応答し、サンプル コードは Web インターフェイスでレンダリングされます。

次の手順に従って、サンプル コードをコンピューター上でローカルに実行できます。 最新の手順については、GitHub の リポジトリを参照してください。

  1. Node.js がインストールされていない場合は、Node.js の LTS バージョンをダウンロードしてインストールします。

  2. ローカル コンピューターにリポジトリを複製します。

    git clone https://github.com/Azure-Samples/aoai-realtime-audio-sdk.git
    
  3. お使いのコード エディターで javascript/samples/web フォルダ―を開きます。

    cd ./javascript/samples
    
  4. download-pkg.ps1 または download-pkg.sh を実行して、必要なパッケージをダウンロードします。

  5. ./javascript/samples フォルダーからweb フォルダーに移動します。

    cd ./web
    
  6. npm install を実行して、パッケージの依存関係をインストールします。

  7. npm run dev を実行して Web サーバーを起動し、必要に応じてファイアウォールのアクセス許可プロンプトに移動します。

  8. ブラウザーのコンソール出力 (http://localhost:5173/ など) から、指定されたいずれかの URI に移動します。

  9. Web インターフェイスで次の情報を入力します。

    • エンドポイント: Azure OpenAI リソースのリソース エンドポイント。 /realtime パスを追加する必要はありません。 構造の一例としては、https://my-azure-openai-resource-from-portal.openai.azure.com が挙げられます。
    • API キー: Azure OpenAI リソースに対応する API キー。
    • デプロイ: 前のセクションでデプロイした gpt-4o-realtime-preview モデルの名前。
    • システム メッセージ: 必要に応じて、"You always talk like a friendly pirate." などのシステム メッセージを提供できます。
    • 温度: 必要に応じて、カスタム温度を指定できます。
    • 音声: 必要に応じて、音声を選択できます。
  10. [記録] ボタンを選択してセッションを開始します。 マイクの使用許可を求められた場合は許可します。

  11. メイン出力に << Session Started >> メッセージが表示されます。 その後、マイクに向かって話すとチャットを開始できます。

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

前提条件

Microsoft Entra ID の前提条件

Microsoft Entra ID で推奨されるキーレス認証の場合、次のことを行う必要があります。

  • Microsoft Entra ID でのキーレス認証に使われる Azure CLI をインストールします。
  • ユーザー アカウントに Cognitive Services User ロールを割り当てます。 Azure portal の [アクセス制御 (IAM)]>[ロールの割り当ての追加] で、ロールを割り当てることができます。

リアルタイム オーディオ向けモデルのデプロイ

Azure AI Foundry ポータルで gpt-4o-realtime-preview モデルをデプロイするには:

  1. Azure AI Foundry ポータルに移動し、(モデルのデプロイの有無にかかわらず) Azure OpenAI Service リソースが含まれる Azure サブスクリプションを使ってサインインしていることを確認します。
  2. 左側のペインの [プレイグラウンド] で、[リアルタイム オーディオ] プレイグラウンドを選びます。
  3. [新しいデプロイの作成] を選んで、デプロイ ウィンドウを開きます。
  4. gpt-4o-realtime-preview モデルを検索して選択し、[確認] を選択します。
  5. デプロイ ウィザードで、2024-10-01 モデルのバージョンを選択します。
  6. ウィザードに従ってモデルのデプロイを完了します。

これで gpt-4o-realtime-preview モデルをデプロイしたので、Azure AI Foundry ポータルの [リアルタイム オーディオ] プレイグラウンドまたは Realtime API で、リアルタイムにそれを操作できます。

設定

  1. アプリケーションを含める新しいフォルダー realtime-audio-quickstart を作成し、次のコマンドを使用してそのフォルダー内で Visual Studio Code を開きます。

    mkdir realtime-audio-quickstart && code 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. 次を使って、Python 用のリアルタイム オーディオ クライアント ライブラリをインストールします。

    pip install "https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/py%2Fv0.5.3/rtclient-0.5.3.tar.gz"
    
  4. Microsoft Entra ID で推奨されるキーレス認証の場合、次を使って azure-identity パッケージをインストールします。

    pip install azure-identity
    

リソース情報の取得

変数名
AZURE_OPENAI_ENDPOINT この値は、Azure portal からリソースを調べる際の キーとエンドポイント セクションにあります。
AZURE_OPENAI_DEPLOYMENT_NAME この値は、モデルのデプロイ時にデプロイに対して選択したカスタム名に対応します。 この値は、Azure portal の [リソース管理]>[モデル デプロイ] にあります。
OPENAI_API_VERSION API バージョンの詳細を参照してください。

キーレス認証環境変数の設定の詳細を参照してください。

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

  1. 次のコードを使用して text-in-audio-out.py ファイルを作成します。

    import base64
    import asyncio
    from azure.identity.aio import DefaultAzureCredential
    from rtclient import (
        ResponseCreateMessage,
        RTLowLevelClient,
        ResponseCreateParams
    )
    
    # Set environment variables or edit the corresponding values here.
    endpoint = os.environ["AZURE_OPENAI_ENDPOINT"]
    deployment = "gpt-4o-realtime-preview"
    
    async def text_in_audio_out():
        async with RTLowLevelClient(
            url=endpoint,
            azure_deployment=deployment,
            token_credential=DefaultAzureCredential(),
        ) as client:
            await client.send(
                ResponseCreateMessage(
                    response=ResponseCreateParams(
                        modalities={"audio", "text"}, 
                        instructions="Please assist the user."
                    )
                )
            )
            done = False
            while not done:
                message = await client.recv()
                match message.type:
                    case "response.done":
                        done = True
                    case "error":
                        done = True
                        print(message.error)
                    case "response.audio_transcript.delta":
                        print(f"Received text delta: {message.delta}")
                    case "response.audio.delta":
                        buffer = base64.b64decode(message.delta)
                        print(f"Received {len(buffer)} bytes of audio data.")
                    case _:
                        pass
    
    async def main():
        await text_in_audio_out()
    
    asyncio.run(main())
    
  2. Python ファイルを実行します。

    python text-in-audio-out.py
    

応答が返されるまで少し時間がかかります。

出力

このスクリプトは、モデルから応答を取得して、受け取ったトランスクリプトとオーディオ データを出力します。

出力は次のようになります。

Received text delta: Hello
Received text delta: !
Received text delta:  How
Received 4800 bytes of audio data.
Received 7200 bytes of audio data.
Received text delta:  can
Received 12000 bytes of audio data.
Received text delta:  I
Received text delta:  assist
Received text delta:  you
Received 12000 bytes of audio data.
Received 12000 bytes of audio data.
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 12000 bytes of audio data.
Received 28800 bytes of audio data.

前提条件

Microsoft Entra ID の前提条件

Microsoft Entra ID で推奨されるキーレス認証の場合、次のことを行う必要があります。

  • Microsoft Entra ID でのキーレス認証に使われる Azure CLI をインストールします。
  • ユーザー アカウントに Cognitive Services User ロールを割り当てます。 Azure portal の [アクセス制御 (IAM)]>[ロールの割り当ての追加] で、ロールを割り当てることができます。

リアルタイム オーディオ向けモデルのデプロイ

Azure AI Foundry ポータルで gpt-4o-realtime-preview モデルをデプロイするには:

  1. Azure AI Foundry ポータルに移動し、(モデルのデプロイの有無にかかわらず) Azure OpenAI Service リソースが含まれる Azure サブスクリプションを使ってサインインしていることを確認します。
  2. 左側のペインの [プレイグラウンド] で、[リアルタイム オーディオ] プレイグラウンドを選びます。
  3. [新しいデプロイの作成] を選んで、デプロイ ウィンドウを開きます。
  4. gpt-4o-realtime-preview モデルを検索して選択し、[確認] を選択します。
  5. デプロイ ウィザードで、2024-10-01 モデルのバージョンを選択します。
  6. ウィザードに従ってモデルのデプロイを完了します。

これで gpt-4o-realtime-preview モデルをデプロイしたので、Azure AI Foundry ポータルの [リアルタイム オーディオ] プレイグラウンドまたは Realtime API で、リアルタイムにそれを操作できます。

設定

  1. アプリケーションを含める新しいフォルダー realtime-audio-quickstart を作成し、次のコマンドを使用してそのフォルダー内で Visual Studio Code を開きます。

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

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

    npm pkg set type=module
    
  4. 次を使って、JavaScript 用のリアルタイム オーディオ クライアント ライブラリをインストールします。

    npm install https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/js/v0.5.2/rt-client-0.5.2.tgz
    
  5. Microsoft Entra ID で推奨されるキーレス認証の場合、次を使って @azure/identity パッケージをインストールします。

    npm install @azure/identity
    

リソース情報の取得

変数名
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.ts ファイルを作成します。

    import { DefaultAzureCredential } from "@azure/identity";
    import { LowLevelRTClient } from "rt-client";
    import dotenv from "dotenv";
    dotenv.config();
    
    async function text_in_audio_out() {
        // Set environment variables or edit the corresponding values here.
        const endpoint: string = process.env["AZURE_OPENAI_ENDPOINT"] || "yourEndpoint";
        const deployment = "gpt-4o-realtime-preview";
        if (!endpoint || !deployment) {
            throw new Error("You didn't set the environment variables.");
        }
        const client = new LowLevelRTClient(
            new URL(endpoint), 
            new DefaultAzureCredential(), 
            {deployment: deployment}
        );
        try {
            await client.send({
                type: "response.create",
                response: {
                    modalities: ["audio", "text"],
                    instructions: "Please assist the user."
                }
            });
    
            for await (const message of client.messages()) {
                switch (message.type) {
                    case "response.done": {
                        break;
                    }
                    case "error": {
                        console.error(message.error);
                        break;
                    }
                    case "response.audio_transcript.delta": {
                        console.log(`Received text delta: ${message.delta}`);
                        break;
                    }
                    case "response.audio.delta": {
                        const buffer = Buffer.from(message.delta, "base64");
                        console.log(`Received ${buffer.length} bytes of audio data.`);
                        break;
                    }
                }
                if (message.type === "response.done" || message.type === "error") {
                    break;
                }
            }
        } finally {
            client.close();
        }
    }
    
    await text_in_audio_out();
    
  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 text-in-audio-out.js
    

応答が返されるまで少し時間がかかります。

出力

このスクリプトは、モデルから応答を取得して、受け取ったトランスクリプトとオーディオ データを出力します。

出力は次のようになります。

Received text delta: Hello
Received text delta: !
Received text delta:  How
Received text delta:  can
Received text delta:  I
Received 4800 bytes of audio data.
Received 7200 bytes of audio data.
Received text delta:  help
Received 12000 bytes of audio data.
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 24000 bytes of audio data.