共用方式為


適用於語音和音訊的 GPT-4o 即時 API (預覽)

注意

此功能目前處於公開預覽。 此預覽版本沒有服務等級協定,不建議將其用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

適用於語音和音訊的 Azure OpenAI GPT-4o 即時 API 是 GPT-4o 模型系列的一部分,可支援低延遲、「語音輸入、語音輸出」交談互動。

您可以透過 WebRTC 或 WebSocket 使用即時 API,將音訊輸入傳送至模型,並即時接收音訊回應。

請遵循本文中的指示,透過 WebSocket 開始使用即時 API。 在不需要低延遲的伺服器對伺服器案例中,透過 WebSocket 使用即時 API。

提示

在大部分情況下,我們建議 透過 WebRTC 使用即時 API ,在用戶端應用程式中,例如 Web 應用程式或行動應用程式等用戶端應用程式中的即時音訊串流。 WebRTC 是專為低延遲、即時音訊串流所設計,是大部分使用案例的最佳選擇。

支援的模型

GPT 4o 即時模型可用於全域部署。

  • gpt-4o-realtime-preview (版本 2024-12-17
  • gpt-4o-mini-realtime-preview (版本 2024-12-17

如需詳細資訊, 請參閱模型和版本檔

API 支援

在 API 版本 2024-10-01-preview (已淘汰)中首次新增對即時 API 的支援。 使用版本 2025-04-01-preview 來存取最新的即時 API 功能。

部署即時音訊的模型

若要在 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 入口網站 音訊 遊樂場或即時 API 中與其互動。

使用 GPT-4o 即時音訊

若要在 Azure AI Foundry gpt-4o-mini-realtime-preview遊樂場中與您的部署模型聊天,請遵循下列步驟:

  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 的建議無金鑰驗證,您需要:

部署即時音訊的模型

若要在 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 入口網站 音訊 遊樂場或即時 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 入口網站查看資源時,您可以在 [金鑰和端點] 區段中找到此值。
AZURE_OPENAI_DEPLOYMENT_NAME 此值會對應至您在部署模型時為部署選擇的自訂名稱。 此值可在 Azure 入口網站 中的資源管理找到。
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 的建議無金鑰驗證,您需要:

部署即時音訊的模型

若要在 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 入口網站 音訊 遊樂場或即時 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 環境表示,當您命令列執行 pythonpip,將會使用應用程式的 .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 入口網站查看資源時,您可以在 [金鑰和端點] 區段中找到此值。
AZURE_OPENAI_DEPLOYMENT_NAME 此值會對應至您在部署模型時為部署選擇的自訂名稱。 此值可在 Azure 入口網站 中的資源管理找到。
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 的建議無金鑰驗證,您需要:

部署即時音訊的模型

若要在 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 入口網站 音訊 遊樂場或即時 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 入口網站查看資源時,您可以在 [金鑰和端點] 區段中找到此值。
AZURE_OPENAI_DEPLOYMENT_NAME 此值會對應至您在部署模型時為部署選擇的自訂名稱。 此值可在 Azure 入口網站 中的資源管理找到。
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. 建立檔案 tsconfig.json 以轉譯 TypeScript 程式代碼,並複製 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!