>新引入的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特别适合实时应用程序,例如语音聊天。
>本文将介绍Webockets的工作方式,并包括与实时API进行交互的几个示例。
>我们将使用node.js,因此我们需要确保将其安装在计算机上。如果没有,我们可以从其官方网站下载和安装node.js。
>初始化脚本>跟随,我们建议使用上面创建的.env文件创建一个文件夹。在该文件夹中,运行以下命令以初始化脚本:
>完成此命令后,这些文件应在文件夹中:>
npm init -y && touch index.js安装依赖项
从安装两个软件包开始:
> dotenv:一个从.env文件加载API键的实用程序软件包。
通过运行命令安装这些:
- 连接到实时API
- >要启动与实时API的连接,我们创建了一个新的WebSocket对象,传递API URL和标头,并带有所需的信息以连接到它:
上面的代码创建了与API的Web套接字连接,但尚未对其进行任何作用。
npm install ws dotenv>
Websockets允许我们在某些事件发生时设置操作。我们可以使用开放事件来指定一些我们要执行连接后要执行的代码。
添加事件侦听器的通用语法如下:
>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键,我们将在终端中看到“连接是打开”消息。脚本将继续运行,因为连接仍然开放,因此我们必须手动停止它。
接收到消息时设置操作
>在使用WebSockets时我们可以响应的另一个事件是消息事件。每次从服务器接收消息时,都会触发这一点。让我们添加一个显示每个收到消息的函数:
>现在运行脚本也应显示会话。在初始化会话时API发送的创建事件。
ws.on(<event>, <function>);</function></event>其他WebSocket事件
>上面,我们学会了如何将事件听众添加到“开放”和“消息”事件中。 WebSocket支持我们在示例中不会使用的两个其他事件。
>
关闭套接字时,可以使用关闭事件来添加回调:发生错误时,错误事件用于添加回调:
>
// Add inside the main() function of index.js after creating ws async function handleOpen() { console.log("Connection is opened"); } ws.on("open", handleOpen);与实时API
进行通信
>使用Websockets需要我们以事件驱动的方式进行编程。消息是在通信渠道上来回发送的,我们无法控制何时传递或接收这些消息。node index.js
启动通信的代码应在handingopen()中添加。 o否则,将发生错误,因为该代码可以在创建Web套接字通信频道之前执行。
>对于代码处理消息也是如此。所有逻辑都应进入handlemessage()函数。> 在即将到来的示例中,我们将使用以下代码作为起点。大多数更改涉及更新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,Response.text.done和wendesp.done。
>响应.text.delta事件包含响应分解为三角洲字段中的块。当我们想提供实时体验时,它们很重要,因为它们允许我们立即通过块串出响应块。
- 响应.text.done事件标记了文本响应的终点,并包含文本字段中的完整答案。
> 响应。事件标记了响应的终点。 - 我们可以使用handlemessage()函数中的switch语句来指定我们的脚本如何对这些事件进行响应:
>
要运行此示例,我们将这些函数粘贴到上面的模板代码中,并使用命令运行:ws.on(<event>, <function>);</function></event>
>这将在终端中生成一个响应,以提示“在一个句子中解释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中的响应方式中。>
- 这是更新的handleopen()函数:
- >要实现handlemessage()函数,我们修改“ response.audio.delta”事件以更新音频缓冲区并播放新的声音delta:
ws.on(<event>, <function>);</function></event>handlemessage()函数的最终实现如下:
>
// 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 API的一个不错的功能是执行功能调用的功能。我们可以向助手添加功能,如果它检测到其中一个功能对于提供答案很有用,它将发送一个事件,要求调用特定功能。
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>);</function></event>
使用该应用// 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
工具定义JSON对象。
要执行的函数。
- 此方法简化了工具的集成,因为客户端已经配备了处理事件和自动化功能调用。这里定义了内存工具,而天气工具的定义是在此处定义的。例如,要添加先前定义的总和工具,我们可以执行以下操作:
> npm init -y && touch index.js
聆听事件事件的名称。
- 要执行的回调函数。
- 此方法类似于先前使用的WebSocket.on()函数,除非它实现了不同的事件集。他们的github页面提供了支持事件的列表。
实时事件,这里用于保留所有事件的日志。
此处的错误事件只需将错误记录到控制台以进行调试目的。- 对话。中断的事件在此中断转换时取消请求。
- >最后,当新的Chuck从API进入时,此处的对话。
- 结论
- 在本教程中,我们探索了OpenAI实时API及其如何使用Websocket进行实时通信。我们介绍了Node.js环境的设置,以与API进行交互,发送和接收文本和音频消息,并实现函数,要求提高功能。 >我们还探索了OpenAI Demo React应用程序,演示了如何部署基本语音助手应用程序。
- >要了解有关最新的OpenAI开发工具的更多信息,我建议这些教程:
> OpenAI型号蒸馏:带有示例的指南
gpt-4o视觉微调:带有示例的指南
>
以上是Openai实时API:指南示例的详细内容。更多信息请关注PHP中文网其他相关文章!

本文探讨了“人工智能代理机构衰败”日益增长的关注 - 我们独立思考和决定的能力逐渐下降。 这对于越来越自动化世界的业务领袖尤其至关重要

有没有想过像Siri和Alexa这样的AI代理商是如何工作的?这些智能系统在我们的日常生活中变得越来越重要。本文介绍了反应模式,这种方法通过结合推理来增强AI代理

芝加哥大学校长Paul Alivisatos在一月份达沃斯论坛上接受德勤Nitin Mittal采访时表示:“我认为人工智能工具正在改变大学生的学习机会。我们坚信以核心课程培养学生,但越来越多的人也希望获得计算和统计思维的视角。” 他认为,人们将不得不成为人工智能的创造者和共同创造者,这意味着学习和其他方面都需要适应一些重大变化。 数字智能与批判性思维 乔治·华盛顿大学的Alexa Joubin教授在Phys.org发表的一篇文章中,将人工智能描述为人文科学的“启发式工具”,并探讨了它如何改变

Langchain是用于构建复杂AI应用程序的强大工具包。 它的代理体系结构特别值得注意,使开发人员能够创建能够独立推理,决策和行动的智能系统。这个咨询

径向基函数神经网络(RBFNNS):综合指南 径向基函数神经网络(RBFNN)是利用径向基础功能激活的强大类型的神经网络体系结构。 它们独特的结构使

脑部计算机界面(BCIS)将大脑直接连接到外部设备,将大脑冲动转化为没有身体运动的动作。 该技术利用植入传感器捕获大脑信号,将其转换为数字订票

这一“带有数据的领先”情节以Ines Montani,爆炸AI的联合创始人兼首席执行官Ines Montani,以及Spacy and Prodigy的共同开发者。 INE提供了有关这些工具发展的专家见解,爆炸的独特商业模式以及TR

本文探讨了检索增强发电(RAG)系统以及AI代理如何增强其功能。 传统的抹布系统虽然可用于利用自定义企业数据,但仍受诸如缺乏实时dat之类的限制


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

WebStorm Mac版
好用的JavaScript开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中