你当前正在访问 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
模型,请执行以下操作:
- 转到 Azure AI Foundry 门户,确保使用包含 Azure OpenAI 服务资源(含或不含模型部署均可)的 Azure 订阅登录。
- 在左侧窗格的“操场”下选择“实时音频”操场。
- 选择“创建新部署”以打开部署窗口。
- 搜索并选择
gpt-4o-realtime-preview
模型,然后选择“确认”。 - 在部署向导中,请选择
2024-12-17
模型版本。 - 按照向导完成模型部署。
部署了 gpt-4o-realtime-preview
模型后,你可以在 Azure AI Foundry 门户“实时音频”操场或实时 API 与其进行实时交互。
使用 GPT-4o 实时音频
若要在 Azure AI Foundry 实时音频操场中与已部署的 gpt-4o-realtime-preview
模型聊天,请按照以下步骤操作:
转到 Azure AI Foundry 门户中的“Azure OpenAI 服务”页。 请确保使用包含 Azure OpenAI 服务资源且已部署
gpt-4o-realtime-preview
模型的 Azure 订阅登录。在左侧窗格的“操场”下选择“实时音频”操场。
从“部署”
gpt-4o-realtime-preview
下拉列表中选择部署的 模型。选择“启用麦克风”以允许浏览器访问麦克风。 如果已授予权限,则可以跳过此步骤。
(可选)你可以在“为模型提供指令和上下文”文本框中编辑内容。 为模型提供有关它应该如何运行以及在生成回复时应引用的任何上下文的说明。 你可以描述助手的个性,告诉它应该回答什么和不应该回答什么,并告诉它如何设置回复的格式。
(可选)更改阈值、前缀填充和静音持续时间等设置。
选择“开始收听”以启动会话。 可以对着麦克风说话来开始聊天。
可以随时通过说话来中断聊天。 可以通过选择“停止收听”按钮来结束聊天。
先决条件
- Azure 订阅 - 免费创建订阅
- Node.js LTS 或 ESM 支持。
- 在美国东部 2 或瑞典中部区域创建的 Azure OpenAI 资源。 请参阅区域可用性。
- 然后,你需要使用 Azure OpenAI 资源部署
gpt-4o-realtime-preview
模型。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
Microsoft Entra ID 先决条件
若要使用 Microsoft Entra ID 进行推荐的无密钥身份验证,你需要:
- 安装使用 Microsoft Entra ID 进行无密钥身份验证所需的 Azure CLI。
- 将
Cognitive Services User
角色分配给用户帐户。 你可以在 Azure 门户的“访问控制(IAM)”>“添加角色分配”下分配角色。
为实时音频部署模型
若要在 Azure AI Foundry 门户中部署 gpt-4o-realtime-preview
模型,请执行以下操作:
- 转到 Azure AI Foundry 门户,确保使用包含 Azure OpenAI 服务资源(含或不含模型部署均可)的 Azure 订阅登录。
- 在左侧窗格的“操场”下选择“实时音频”操场。
- 选择“创建新部署”以打开部署窗口。
- 搜索并选择
gpt-4o-realtime-preview
模型,然后选择“确认”。 - 在部署向导中,请选择
2024-12-17
模型版本。 - 按照向导完成模型部署。
部署了 gpt-4o-realtime-preview
模型后,你可以在 Azure AI Foundry 门户“实时音频”操场或实时 API 与其进行实时交互。
设置
创建一个新文件夹
realtime-audio-quickstart
以包含该应用程序,并在该文件夹中使用以下命令打开 Visual Studio Code:mkdir realtime-audio-quickstart && code realtime-audio-quickstart
使用以下命令创建
package.json
:npm init -y
使用以下命令将
package.json
更新为 ECMAScript:npm pkg set type=module
使用以下命令安装适用于 JavaScript 的实时音频客户端库:
npm install https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/js/v0.5.2/rt-client-0.5.2.tgz
若要使用 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
环境变量。
音频输出中的文本
使用以下代码创建
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();
使用以下命令登录到 Azure:
az login
运行 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 上的存储库。
如果未安装 Node.js,请下载并安装 LTS 版本的 Node.js。
将存储库克隆到本地计算机:
git clone https://github.com/Azure-Samples/aoai-realtime-audio-sdk.git
转到首选代码编辑器中的
javascript/samples/web
文件夹。cd ./javascript/samples
运行
download-pkg.ps1
或download-pkg.sh
来下载所需的包。从
./javascript/samples
文件夹中转到web
文件夹。cd ./web
运行
npm install
以安装包依赖项。运行
npm run dev
以启动 Web 服务器,根据需要导航任何防火墙权限提示。在浏览器中,从控制台输出(如
http://localhost:5173/
)转到提供的任何 URI。在 Web 界面中输入以下信息:
- 终结点:Azure OpenAI 资源的资源终结点。 无需追加
/realtime
路径。 示例结构可能是https://my-azure-openai-resource-from-portal.openai.azure.com
。 - API 密钥:Azure OpenAI 资源的相应 API 密钥。
- 部署:在上一部分中部署的
gpt-4o-realtime-preview
模型的名称。 - 系统消息:(可选)可以提供系统消息,例如“你说话总是像个友好的海盗”。
- 温度:(可选)可以提供自定义温度。
- 语音:(可选)可以选择语音。
- 终结点:Azure OpenAI 资源的资源终结点。 无需追加
选择“录制”按钮以开始会话。 如果系统提示,请接受使用麦克风的权限。
主输出中应会显示
<< Session Started >>
消息。 然后,可以对着麦克风说话来开始聊天。可以随时通过说话来中断聊天。 可以通过选择“停止”按钮来结束聊天。
先决条件
- Azure 订阅。 免费创建一个。
- Python 3.8 或更高版本。 建议使用 Python 3.10 或更高版本,但至少需要 Python 3.8。 如果未安装合适的 Python 版本,则可以按照 VS Code Python 教程中的说明操作,这是在操作系统上安装 Python 的最简单方法。
- 在美国东部 2 或瑞典中部区域创建的 Azure OpenAI 资源。 请参阅区域可用性。
- 然后,你需要使用 Azure OpenAI 资源部署
gpt-4o-realtime-preview
模型。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
Microsoft Entra ID 先决条件
若要使用 Microsoft Entra ID 进行推荐的无密钥身份验证,你需要:
- 安装使用 Microsoft Entra ID 进行无密钥身份验证所需的 Azure CLI。
- 将
Cognitive Services User
角色分配给用户帐户。 你可以在 Azure 门户的“访问控制(IAM)”>“添加角色分配”下分配角色。
为实时音频部署模型
若要在 Azure AI Foundry 门户中部署 gpt-4o-realtime-preview
模型,请执行以下操作:
- 转到 Azure AI Foundry 门户,确保使用包含 Azure OpenAI 服务资源(含或不含模型部署均可)的 Azure 订阅登录。
- 在左侧窗格的“操场”下选择“实时音频”操场。
- 选择“创建新部署”以打开部署窗口。
- 搜索并选择
gpt-4o-realtime-preview
模型,然后选择“确认”。 - 在部署向导中,请选择
2024-12-17
模型版本。 - 按照向导完成模型部署。
部署了 gpt-4o-realtime-preview
模型后,你可以在 Azure AI Foundry 门户“实时音频”操场或实时 API 与其进行实时交互。
设置
创建一个新文件夹
realtime-audio-quickstart
以包含该应用程序,并在该文件夹中使用以下命令打开 Visual Studio Code:mkdir realtime-audio-quickstart && code realtime-audio-quickstart
创建虚拟环境。 如果已安装 Python 3.10 或更高版本,则可以使用以下命令创建虚拟环境:
激活 Python 环境意味着当通过命令行运行
python
或pip
时,你将使用应用程序的.venv
文件夹中包含的 Python 解释器。 可以使用deactivate
命令退出 python 虚拟环境,并在需要时重新激活它。提示
建议你创建并激活一个新的 Python 环境,用于安装本教程所需的包。 请勿将包安装到你的全局 Python 安装中。 安装 Python 包时,请务必使用虚拟或 Conda 环境,否则可能会中断 Python 的全局安装。
使用以下命令安装适用于 Python 的实时音频客户端库:
pip install "https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/py%2Fv0.5.3/rtclient-0.5.3.tar.gz"
若要使用 Microsoft Entra ID 进行推荐的无密钥身份验证,请使用以下命令安装
azure-identity
包:pip install azure-identity
检索资源信息
需要检索以下信息才能使用 Azure OpenAI 资源对应用程序进行身份验证:
变量名称 | 值 |
---|---|
AZURE_OPENAI_ENDPOINT |
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
此值将对应于在部署模型时为部署选择的自定义名称。 Azure 门户中的“资源管理”>“模型部署”下提供了此值。 |
OPENAI_API_VERSION |
详细了解 API 版本。 |
音频输出中的文本
使用以下代码创建
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())
运行该 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.
先决条件
- Azure 订阅 - 免费创建订阅
- Node.js LTS 或 ESM 支持。
- 全局安装的 TypeScript。
- 在美国东部 2 或瑞典中部区域创建的 Azure OpenAI 资源。 请参阅区域可用性。
- 然后,你需要使用 Azure OpenAI 资源部署
gpt-4o-realtime-preview
模型。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
Microsoft Entra ID 先决条件
若要使用 Microsoft Entra ID 进行推荐的无密钥身份验证,你需要:
- 安装使用 Microsoft Entra ID 进行无密钥身份验证所需的 Azure CLI。
- 将
Cognitive Services User
角色分配给用户帐户。 你可以在 Azure 门户的“访问控制(IAM)”>“添加角色分配”下分配角色。
为实时音频部署模型
若要在 Azure AI Foundry 门户中部署 gpt-4o-realtime-preview
模型,请执行以下操作:
- 转到 Azure AI Foundry 门户,确保使用包含 Azure OpenAI 服务资源(含或不含模型部署均可)的 Azure 订阅登录。
- 在左侧窗格的“操场”下选择“实时音频”操场。
- 选择“创建新部署”以打开部署窗口。
- 搜索并选择
gpt-4o-realtime-preview
模型,然后选择“确认”。 - 在部署向导中,请选择
2024-12-17
模型版本。 - 按照向导完成模型部署。
部署了 gpt-4o-realtime-preview
模型后,你可以在 Azure AI Foundry 门户“实时音频”操场或实时 API 与其进行实时交互。
设置
创建一个新文件夹
realtime-audio-quickstart
以包含该应用程序,并在该文件夹中使用以下命令打开 Visual Studio Code:mkdir realtime-audio-quickstart && code realtime-audio-quickstart
使用以下命令创建
package.json
:npm init -y
使用以下命令将
package.json
更新为 ECMAScript:npm pkg set type=module
使用以下命令安装适用于 JavaScript 的实时音频客户端库:
npm install https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/js/v0.5.2/rt-client-0.5.2.tgz
若要使用 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
环境变量。
音频输出中的文本
使用以下代码创建
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();
创建
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"] }
从 TypeScript 转译到 JavaScript。
tsc
使用以下命令登录到 Azure:
az login
使用以下命令运行代码:
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.
相关内容
- 详细了解如何使用实时 API
- 请参阅实时 API 参考
- 详细了解 Azure OpenAI 配额和限制