通过OpenAI的实时API和函数调用来增强用户体验:无缝语音对语音集成
随着人工智能技术的不断发展,我们与机器互动的方式正在发生重大变化。在最新的OpenAI的DevDay上,这家知名的ChatGPT和GPT模型背后的公司宣布推出了他们的新Realtime API的公开测试版,同时还发布了其他几项更新。
这次发布引入了一种通过实现低延迟、语音到语音交互的全新语音体验方式。一个关键优势在于将这一功能与现有的函数调用功能结合起来,从而增强了实时、响应性的用户体验。
在这篇博客文章中,我们将讨论该组合如何提高开发人员的能力和用户交互,为语音优先应用程序提供新机会。
实时语音到语音的力量:有什么新的?
之前,开发人员必须使用多个模型才能实现语音对语音的功能:使用类似Whisper的工具转录音频,将转录发送到GPT模型,然后使用文本到语音工具进行播放。这个过程经常会引入延迟,并影响对话的流畅性。
新的实时API通过流式传输音频输入和输出来解决这个问题,响应时间几乎接近人类。这样可以实现更自然的对话,用户可以在没有明显中断的情况下参与对话。该API基于GPT-4o模型,支持实时对话同时保持语音的表达特点。
输入功能调用:结构化、动态智能
现在,考虑将实时API的实时功能与OpenAI的函数调用功能结合起来。 这个功能允许开发人员根据对话的上下文定义GPT可以触发的API或函数。 预订约会,检索数据或与外部服务进行交互等任务可以实时无缝完成。
这种结合将语音助理从简单的对话机器人转变为功能更强大的虚拟代理,提供免提、以任务为驱动的体验。
如何通过函数调用和实时API来提升用户体验
通过集成实时API和函数调用,开发人员可以创建更有效地吸引用户的语音优先应用程序。以下是一些关键优势:
- 会话和任务导向:用户可以在同一对话中执行任务,例如预约或检查日程安排,无需在不同的交互之间切换。
- 无需使用双手便可完成的便利:控制智能设备或查看信息等任务可在不打断对话的情况下完成。
- 实时个性化:函数调用可以触发API来获取特定用户数据,提供实时的个性化响应。
- 零延迟集成:实时API减少延迟,提升在时间敏感情况下的交互体验,比如客户支持或远程医疗。
- 自然对话:API 允许通过管理中断和保持自然流程来进行更具人性化的对话,从而提高整体用户体验。
我的实验:建立语音助手
为了测试OpenAI的实时API和函数调用的结合,我使用了OpenAI实时控制台作为基础,通过分支进行概念验证。
想法是构建类似于这样的东西:
设置舞台:开始使用OpenAI实时控制台.
OpenAI 实时控制台是一个强大的界面,可用于实验Realtime API。它允许开发人员轻松地与语音输入交互,触发自定义功能,并管理API会话。
设置控制台 控制台是作为一个React项目构建的。只需克隆github存储库并使用npm install安装依赖项。
此外,您可能希望使用提供的中继服务器,尤其是如果您想要:
- 隐藏API凭据,如果您想要发布一个供在线使用的应用程序。
- 处理您想要保密的特定呼叫(例如指令)直接在服务器上。
- 限制客户端能接收和发送的事件类型
在这种情况下,您需要在项目的根目录下添加一个.env文件,其中包含您的OpenAI API密钥和继电器服务器URL的路径。
添加您的自定义“调用函数”工具
这个过程很简单。在src/pages下的ConsolePage.tsx文件中,查找client.addTool方法。移除现有的set_memory和get_weather函数,然后通过提供一个JSON OpenAPI定义作为自定义功能和可用参数的第一个参数,然后添加你自己的函数代码作为第二个参数。
这是代码库提供的示例工具之一。
client.addTool(
{
name: 'get_weather',
description:
'Retrieves the weather for a given lat, lng coordinate pair. Specify a label for the location.',
parameters: {
type: 'object',
properties: {
lat: {
type: 'number',
description: 'Latitude',
},
lng: {
type: 'number',
description: 'Longitude',
},
location: {
type: 'string',
description: 'Name of the location',
},
},
required: ['lat', 'lng', 'location'],
},
},
async ({ lat, lng, location }: { [key: string]: any }) => {
setMarker({ lat, lng, location });
setCoords({ lat, lng, location });
const result = await fetch(
`https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lng}¤t=temperature_2m,wind_speed_10m`
);
const json = await result.json();
const temperature = {
value: json.current.temperature_2m as number,
units: json.current_units.temperature_2m as string,
};
const wind_speed = {
value: json.current.wind_speed_10m as number,
units: json.current_units.wind_speed_10m as string,
};
setMarker({ lat, lng, location, temperature, wind_speed });
return json;
}
);
确保您的函数返回一个JSON对象,这样助手就可以根据用户的请求提供准确的答案。
提供助手指导
在conversation_config.js文件中,您可以定制聊天机器人的系统设置,包括有关其个性和行为的详细信息。
export const instructions = `System settings:
Tool use: enabled.
Instructions:
- You are an artificial intelligence agent responsible for helping test realtime voice capabilities
- Please make sure to respond with a helpful voice via audio
- Be kind, helpful, and curteous
- It is okay to ask the user questions
- Use tools and functions you have available liberally, it is part of the training apparatus
- Be open to exploration and conversation
- Remember: this is just for fun and testing!
Personality:
- Be upbeat and genuine
- Try speaking quickly as if excited
`;
运行应用程序
如果您决定使用中继服务器,请使用以下 npm run relay 命令来运行它,然后使用 npm start 命令来运行应用程序。就是这样!
警告
尽管该工具易于设置,但请记住API仍处于测试版阶段,控制台存在一些错误。例如,在撰写时,如果您使用中继服务器,您需要应用一个补丁(如GitHub问题中所述)以确保函数调用正常工作。
另一个考虑因素是当前的音频输入和输出成本。目前,音频输入估计为每分钟6美分,输出为每分钟24美分。这些成本很快就会累积起来,因此请确保您相应地定义限制。希望随着时间的推移,这些成本会降低,就像其他OpenAI API一样。
结论:提升语音应用的未来
OpenAI的实时API和功能调用为设计以语音为主的应用程序提供了新工具。借助这些功能,开发者可以创建更具交互性且面向任务的代理人,促进无缝、自然的对话。随着更多的开发者采用这些工具,我们可以期待语音驱动应用程序方面的进一步发展,提供更直观、个性化的体验。