>新引入的OpenAI实时API使我们能够将快速,低延迟,多模式体验集成到我们的应用程序中。使用此API,我们可以在用户和大型语言模型(LLMS)之间创建无缝的语音到语音交互。
>>此API消除了多个模型以实现语音驱动体验的需求,因为它在一个集成的API中提供了完整的解决方案。它不仅旨在减少潜伏期,而且还保留了对话的情感细微差别和自然流动。 在本文中,我们将学习如何使用OpenAI实时API来构建语音控制的AI助手。我们将使用node.js创建持久的Websocket连接,以及如何在终端中使用它来与API通信。此外,我将指导您部署使用此API功能的React应用程序。
使用WebSockets使用实时API与OpenAI API的其他组件不同,实时API使用Websockets。 WebSockets是一种通信协议,可以在客户端和服务器之间建立双向通信渠道。与HTTP使用的常规请求响应模型相反,Websockets支持正在进行的实时交互。这使Websocket特别适合实时应用程序,例如语音聊天。
>我们将使用node.js,因此我们需要确保将其安装在计算机上。如果没有,我们可以从其官方网站下载和安装node.js。
>初始化脚本>跟随,我们建议使用上面创建的.env文件创建一个文件夹。在该文件夹中,运行以下命令以初始化脚本:
npm init -y && touch index.js
从安装两个软件包开始:
通过运行命令安装这些:
上面的代码创建了与API的Web套接字连接,但尚未对其进行任何作用。
npm install ws dotenv
添加事件侦听器的通用语法如下:
>npm init -y && touch index.js
替换< event>带有包含事件名称的字符串和< function>发生事件发生时要执行的函数。
这是一旦连接准备就可以显示文本的方法:
>npm install ws dotenv
要运行此代码,我们使用命令:
// Import the web socket library const WebSocket = require("ws"); // Load the .env file into memory so the code has access to the key const dotenv = require("dotenv"); dotenv.config(); function main() { // Connect to the API const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01"; const ws = new WebSocket(url, { headers: { "Authorization": "Bearer " + process.env.OPENAI_API_KEY, "OpenAI-Beta": "realtime=v1", }, }); } main();
接收到消息时设置操作
现在运行脚本也应显示会话。在初始化会话时API发送的创建事件。
ws.on(<event>, <function>);
>上面,我们学会了如何将事件听众添加到“开放”和“消息”事件中。 WebSocket支持我们在示例中不会使用的两个其他事件。
发生错误时,错误事件用于添加回调:
>
// Add inside the main() function of index.js after creating ws async function handleOpen() { console.log("Connection is opened"); } ws.on("open", handleOpen);
进行通信
>使用Websockets需要我们以事件驱动的方式进行编程。消息是在通信渠道上来回发送的,我们无法控制何时传递或接收这些消息。node index.js
> 在即将到来的示例中,我们将使用以下代码作为起点。大多数更改涉及更新handingopen()和handlemessage()。
>使用实时API发送和接收文本
通过使用事件,与实时API进行通信。 OpenAI实时文档API列出了其支持的事件。我们使用对话。事件表示为JSON对象,其字段在文档中描述。
这是对话的示例。这个事件告诉API我们要启动文本对话。这是在内容字段中使用的“ input_text”类型在内容字段中指定的。
>我们使用ws.send()方法发送消息。 Web套接字包期望字符串作为参数,因此我们需要使用JSON.STRINGIFY()函数将JSON事件转换为字符串。将这些放在一起,这是我们可以发送上述事件的方式:
npm init -y && touch index.js
>这将启动对话,但不会触发API自动向我们发送响应。为了触发响应,我们发送响应。创建事件。这是一个示例:
npm install ws dotenv
此事件使用模式响应参数请求文本响应。说明是最重要的部分,描述了我们希望该模型要做的事情,在这种情况下,要求为用户提供帮助。
>我们将这两个事件发送到handleopen()函数中,以便在建立连接后立即启动对话。这是此示例中的全部实现:>
// Import the web socket library const WebSocket = require("ws"); // Load the .env file into memory so the code has access to the key const dotenv = require("dotenv"); dotenv.config(); function main() { // Connect to the API const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01"; const ws = new WebSocket(url, { headers: { "Authorization": "Bearer " + process.env.OPENAI_API_KEY, "OpenAI-Beta": "realtime=v1", }, }); } main();
>响应.text.delta事件包含响应分解为三角洲字段中的块。当我们想提供实时体验时,它们很重要,因为它们允许我们立即通过块串出响应块。
>
要运行此示例,我们将这些函数粘贴到上面的模板代码中,并使用命令运行:ws.on(<event>, <function>);
>这将在终端中生成一个响应,以提示“在一个句子中解释Web套接字是什么”,类似于我们使用ChatGpt时。
// Add inside the main() function of index.js after creating ws async function handleOpen() { console.log("Connection is opened"); } ws.on("open", handleOpen);
使用实时API发送和接收音频
>上一个示例显示了我们如何处理文本数据。但是,对实时API的真正兴趣是创建一个实时回复的语音助手。> 处理音频数据比处理文本数据要复杂得多。我们将跳过一些针对音频工作方式的细节,因为它们会分散我们从本文的主要主题中注意到我们的注意力。
首先,我们安装了两个软件包:npm init -y && touch index.js
>安装了这些软件包,我们将它们导入并添加一个函数Startrecording(),以记录用户的音频提示。我们不会详细解释该功能,因为它会使我们从主要主题中脱颖而出。
加载环境后,将以下代码添加到index.js文件:> StarTrecording()函数从麦克风记录音频,并等待按下“ Enter”。
接下来,我们通过初始化用于播放AI响应的speaker()来更新main()函数:
npm install ws dotenv
>以此为止,我们可以实现handingopen()和handlemessage()来处理音频。
>在handingopen()函数中,我们只需要调用StarTrecording()函数即可记录用户的音频提示。我们还需要稍微更新事件:
// Import the web socket library const WebSocket = require("ws"); // Load the .env file into memory so the code has access to the key const dotenv = require("dotenv"); dotenv.config(); function main() { // Connect to the API const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01"; const ws = new WebSocket(url, { headers: { "Authorization": "Bearer " + process.env.OPENAI_API_KEY, "OpenAI-Beta": "realtime=v1", }, }); } main();
>更新createConversationEvent的内容以使用“ input_audio”而不是“ input_text”,然后用音频替换文本字段:base64audiodata。
>将“音频”添加到createresponseevent中的响应方式中。>
ws.on(<event>, <function>);
>
// Add inside the main() function of index.js after creating ws async function handleOpen() { console.log("Connection is opened"); } ws.on("open", handleOpen);
麦克风将开始录制。我们可以说我们的请求,然后按“ Enter”发送。然后,AI的响应将在扬声器上发挥作用(确保麦克风没有静音并且扬声器的音量)。
node index.js
>
>函数调用// Add inside the main() function of index.js async function handleMessage(messageStr) { const message = JSON.parse(messageStr); console.log(message); } ws.on("message", handleMessage);
openai文档提供了以下图,以说明函数呼叫的生命周期: 来源:OpenAi 从图中,我们看到客户端必须提供LLM可以调用功能的定义。此外,函数执行将在客户端端进行; AI将发送一个事件,要求调用该函数及其参数。然后,我们有责任寄回结果。 >让我们通过将两个数字添加在一起的函数授权我们的助手。我们将通过扩展上面的音频示例来构建此示例。 >要指定可用功能,我们必须为LLM提供工具列表。每个工具都是JSON对象,该对象指定有关该功能的信息。这是我们可以为总和函数定义工具的方法:
> sumtool和函数常数可以添加到index.js的顶部,在导入之后和main()函数之前。
发送函数调用的结果。 此示例的完整代码可在此处找到。 >
他们的应用在此存储库中托管。要设置它,请使用以下git命令克隆开始:
要安装该应用程序,我们使用以下NPM(节点软件包管理)命令: 安装完成后,在项目的根文件夹中创建一个名为.env的文件,然后粘贴以下内容: 替换&lt; openai_api_key&gt;使用OpenAI API键。
一个由应用程序的Web用户界面组成的React前端。
启动React前端使用命令: 完成加载后,将在浏览器上打开一个选项卡,并在其上运行该应用程序。
我们首先单击“连接”按钮。这将向实时API发送“ Hello”消息,我们将收到一个问候。
>使用它,按和交谈而无需释放按钮。释放按钮时发送消息。 该应用程序还具有VAD(语音活动检测)模式,在该模式中,我们不需要按任何按钮。在此模式下,应用程序将不断收听,使我们能够与助手进行积极的对话。要使用它,只需按“ VAD”按钮并说话。
了解客户端 >
在此useFect()调用中定义了与API的集成。最初呈现控制台页面时,执行此useFect()中的代码。与我们的node.js脚本类似,它概述了如何响应API事件。主要的区别是其使用RealtimeClient客户端包装器。
npm init -y && touch index.js
类型指定我们正在定义函数。
>
npm install ws dotenv
// Import the web socket library
const WebSocket = require("ws");
// Load the .env file into memory so the code has access to the key
const dotenv = require("dotenv");
dotenv.config();
function main() {
// Connect to the API
const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01";
const ws = new WebSocket(url, {
headers: {
"Authorization": "Bearer " + process.env.OPENAI_API_KEY,
"OpenAI-Beta": "realtime=v1",
},
});
}
main();
请求响应。
>
>今天建立MLOPS技能
从头开始并获得职业生涯的MLOPS技能。使用OpenAI实时API
> OpenAI团队提供了一个演示React应用程序来展示实时API。在这里,我们将学习如何进行设置并探索其工作原理。这是构建一个更复杂应用程序的绝佳起点。
不需要React知识才能使其启动并运行。但是,您需要熟悉反应以修改或扩展它。
>
npm init -y && touch index.js
npm install ws dotenv
// Import the web socket library
const WebSocket = require("ws");
// Load the .env file into memory so the code has access to the key
const dotenv = require("dotenv");
dotenv.config();
function main() {
// Connect to the API
const url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview-2024-10-01";
const ws = new WebSocket(url, {
headers: {
"Authorization": "Bearer " + process.env.OPENAI_API_KEY,
"OpenAI-Beta": "realtime=v1",
},
});
}
main();
>在前端和OpenAI API之间实现继电器服务器的主要目的是安全地存储API键。没有此键,与API互动是不可能的。
但是,如果键存储在前端,则任何用户都可以访问它。因此,该解决方案涉及建立一个安全存储密钥并促进API和前端之间的数据交换的服务器。在这种特定情况下,安全问题是最小的,因为该应用程序仅在本地运行。 >要启动应用程序,有必要同时启动继电器服务器和前端。要启动继电器服务器,请使用以下命令:
ws.on(<event>, <function>);
// Add inside the main() function of index.js after creating ws
async function handleOpen() {
console.log("Connection is opened");
}
ws.on("open", handleOpen);
函数
正如我们了解到的那样,实时API提供了一项功能,使AI能够执行特定的功能。该演示展示了两个功能:一个用于查询特定位置的天气预报,另一个用于添加记忆项目以个性化助手。 >有时我请求天气报告,而响应表明当时无法访问它。但是,这些信息始终显示在右侧。作为演示应用程序,它并不是要成为功能齐全的产品,而是用于展示API的功能。
本节需要对REACT的高级了解才能遵循,因为我们介绍了应用程序的一些实现详细信息。
我们将查看consolePage.tsx文件。这是定义大多数应用程序逻辑的地方。演示应用程序不像我们在node.js命令行应用程序示例中那样使用RAW WebSocket。他们建立了一个帮助与API互动的实时客户端。这就是文件顶部导入的内容:npm init -y && touch index.js
要执行的函数。
请注意,该应用程序使用Typescript,因此需要在功能定义中的类型规范。
npm init -y && touch index.js
要收听事件,使用realtimeclient.on()函数。它接受两个参数:
事件的名称。
实时事件,这里用于保留所有事件的日志。
此处的错误事件只需将错误记录到控制台以进行调试目的。gpt-4o视觉微调:带有示例的指南
>以上是Openai实时API:指南示例的详细内容。更多信息请关注PHP中文网其他相关文章!