你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于语音和音频的 GPT-4o 实时 API(预览版)

注意

此功能目前处于公开预览状态。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

适用于语音和音频的 Azure OpenAI GPT-4o 实时 API 是 GPT-4o 模型系列的一部分,该系列支持低延迟的“语音传入,语音传出”对话交互。 GPT-4o 音频 realtime API 旨在处理实时、低延迟的对话交互,非常适合涉及用户与模型之间的实时交互的用例,例如客户支持代理、语音助理和实时翻译。

实时 API 的大多数用户都需要实时传送和接收来自最终用户的音频,包括使用 WebRTC 或电话系统的应用程序。 实时 API 未设计为直接连接到最终用户设备,而是依靠客户端集成来终止最终用户音频流。

支持的模型

GPT 4o 实时模型可用于美国东部 2 和瑞典中部地区的全局部署。

  • gpt-4o-realtime-preview (2024-12-17)
  • gpt-4o-realtime-preview (2024-10-01)

有关详细信息,请参阅模型和版本文档

API 支持

首次在 API 版本 2024-10-01-preview 中添加了对实时 API 的支持。

注意

有关 API 和体系结构的详细信息,请参阅 GitHub 上的 Azure OpenAI GPT-4o 实时音频存储库

为实时音频部署模型

若要在 Azure AI Foundry 门户中部署 gpt-4o-realtime-preview 模型,请执行以下操作:

  1. 转到 Azure AI Foundry 门户,确保使用包含 Azure OpenAI 服务资源(含或不含模型部署均可)的 Azure 订阅登录。
  2. 在左侧窗格的“操场”下选择“实时音频”操场。
  3. 选择“创建新部署”以打开部署窗口。
  4. 搜索并选择 gpt-4o-realtime-preview 模型,然后选择“确认”。
  5. 在部署向导中,请选择 2024-12-17 模型版本。
  6. 按照向导完成模型部署。

部署了 gpt-4o-realtime-preview 模型后,你可以在 Azure AI Foundry 门户“实时音频”操场或实时 API 与其进行实时交互。

使用 GPT-4o 实时音频

若要在 Azure AI Foundry 实时音频操场中与已部署的 gpt-4o-realtime-preview 模型聊天,请按照以下步骤操作:

  1. 转到 Azure AI Foundry 门户中的“Azure OpenAI 服务”页。 请确保使用包含 Azure OpenAI 服务资源且已部署 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 门户的“访问控制(IAM)”>“添加角色分配”下分配角色。

为实时音频部署模型

若要在 Azure AI Foundry 门户中部署 gpt-4o-realtime-preview 模型,请执行以下操作:

  1. 转到 Azure AI Foundry 门户,确保使用包含 Azure OpenAI 服务资源(含或不含模型部署均可)的 Azure 订阅登录。
  2. 在左侧窗格的“操场”下选择“实时音频”操场。
  3. 选择“创建新部署”以打开部署窗口。
  4. 搜索并选择 gpt-4o-realtime-preview 模型,然后选择“确认”。
  5. 在部署向导中,请选择 2024-12-17 模型版本。
  6. 按照向导完成模型部署。

部署了 gpt-4o-realtime-preview 模型后,你可以在 Azure AI Foundry 门户“实时音频”操场或实时 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 资源对应用程序进行身份验证:

变量名称
AZURE_OPENAI_ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。
AZURE_OPENAI_DEPLOYMENT_NAME 此值将对应于在部署模型时为部署选择的自定义名称。 Azure 门户中的“资源管理”>“模型部署”下提供了此值。
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 实时 API 与模型进行实时交互。 示例代码包括一个简单的 Web 界面,该界面从用户的麦克风捕获音频,并将其发送到模型进行处理。 模型使用文本和音频进行响应,示例代码在 Web 界面中呈现。

可以按照以下步骤在计算机本地运行示例代码。 有关最新说明,请参阅 GitHub 上的存储库

  1. 如果未安装 Node.js,请下载并安装 LTS 版本的 Node.js

  2. 将存储库克隆到本地计算机:

    git clone https://github.com/Azure-Samples/aoai-realtime-audio-sdk.git
    
  3. 转到首选代码编辑器中的 javascript/samples/web 文件夹。

    cd ./javascript/samples
    
  4. 运行 download-pkg.ps1download-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 模型的名称。
    • 系统消息:(可选)可以提供系统消息,例如“你说话总是像个友好的海盗”。
    • 温度:(可选)可以提供自定义温度。
    • 语音:(可选)可以选择语音。
  10. 选择“录制”按钮以开始会话。 如果系统提示,请接受使用麦克风的权限。

  11. 主输出中应会显示 << Session Started >> 消息。 然后,可以对着麦克风说话来开始聊天。

  12. 可以随时通过说话来中断聊天。 可以通过选择“停止”按钮来结束聊天。

先决条件

Microsoft Entra ID 先决条件

若要使用 Microsoft Entra ID 进行推荐的无密钥身份验证,你需要:

  • 安装使用 Microsoft Entra ID 进行无密钥身份验证所需的 Azure CLI
  • Cognitive Services User角色分配给用户帐户。 你可以在 Azure 门户的“访问控制(IAM)”>“添加角色分配”下分配角色。

为实时音频部署模型

若要在 Azure AI Foundry 门户中部署 gpt-4o-realtime-preview 模型,请执行以下操作:

  1. 转到 Azure AI Foundry 门户,确保使用包含 Azure OpenAI 服务资源(含或不含模型部署均可)的 Azure 订阅登录。
  2. 在左侧窗格的“操场”下选择“实时音频”操场。
  3. 选择“创建新部署”以打开部署窗口。
  4. 搜索并选择 gpt-4o-realtime-preview 模型,然后选择“确认”。
  5. 在部署向导中,请选择 2024-12-17 模型版本。
  6. 按照向导完成模型部署。

部署了 gpt-4o-realtime-preview 模型后,你可以在 Azure AI Foundry 门户“实时音频”操场或实时 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 环境意味着当通过命令行运行 pythonpip 时,你将使用应用程序的 .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 资源对应用程序进行身份验证:

变量名称
AZURE_OPENAI_ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。
AZURE_OPENAI_DEPLOYMENT_NAME 此值将对应于在部署模型时为部署选择的自定义名称。 Azure 门户中的“资源管理”>“模型部署”下提供了此值。
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 门户的“访问控制(IAM)”>“添加角色分配”下分配角色。

为实时音频部署模型

若要在 Azure AI Foundry 门户中部署 gpt-4o-realtime-preview 模型,请执行以下操作:

  1. 转到 Azure AI Foundry 门户,确保使用包含 Azure OpenAI 服务资源(含或不含模型部署均可)的 Azure 订阅登录。
  2. 在左侧窗格的“操场”下选择“实时音频”操场。
  3. 选择“创建新部署”以打开部署窗口。
  4. 搜索并选择 gpt-4o-realtime-preview 模型,然后选择“确认”。
  5. 在部署向导中,请选择 2024-12-17 模型版本。
  6. 按照向导完成模型部署。

部署了 gpt-4o-realtime-preview 模型后,你可以在 Azure AI Foundry 门户“实时音频”操场或实时 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 资源对应用程序进行身份验证:

变量名称
AZURE_OPENAI_ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。
AZURE_OPENAI_DEPLOYMENT_NAME 此值将对应于在部署模型时为部署选择的自定义名称。 Azure 门户中的“资源管理”>“模型部署”下提供了此值。
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. 创建 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 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.