使用 GPT-4O 实时对结构化与非结构化数据进行语音 RAG

关于GPT-4O实时API的所有内容以及使用实用Python示例实现Voice RAG的逐步指南

Photo from oneusefulthing.org

这个教程的相关代码是:这里

简介

在人工智能不断发展的领域中,Azure OpenAI GPT-4o实时API的推出标志着一个重要的里程碑。作为一名人工智能爱好者和开发者,我对探索这一尖端技术及其潜在应用感到兴奋。本博客深入探讨了GPT-4o实时API的复杂性,探讨了其功能、能力和实际用途。无论您是经验丰富的开发者还是人工智能爱好者,这个综合指南将为您提供如何利用GPT-4o实时API来创建沉浸式、实时语音对话体验的详细理解。

什么是GPT-4o实时?🤔

GPT-4o Realtime旨在让开发者能够在他们的应用程序中构建低延迟、多模态体验。想象一下与AI助手进行自然、无缝的对话,它们能够实时理解并回应。与传统方法不同,传统方法需要多个模型来处理语音识别、文本处理和语音合成,GPT-4o Realtime API简化了这个过程,只需一个API调用,显著减少延迟,提高交互的自然性。

演示😱

关键功能和能力

低延迟的语音对话交互

GPT-4o实时API支持快速的实时语音对话互动。这是通过一个持久的WebSocket连接实现的,允许用户与模型之间进行异步流式通信。这种设置确保响应迅速生成,保持自然对话的流畅进行。

多模式支持

API能够处理各种输入和输出方式,包括文字、音频和函数调用。这种灵活性使开发人员能够创建丰富、互动式的体验,能够以多种格式响应用户的输入。

调用函数

GPT-4o实时API的突出功能之一是支持函数调用。这使得语音助手能够根据用户请求执行操作或检索特定上下文的信息。例如,语音助手可以下订单或获取客户详细信息以个性化响应。

语音活动检测(VAD)

API 包括先进的语音活动检测功能,可以自动处理中断并管理对话流程。 这确保系统可以适时回应用户的输入,避免不必要的延迟。

与现有工具集成

GPT-4o实时API旨在与现有工具和服务无缝协作。例如,可以与Twilio的语音API集成,构建并部署与客户通过语音电话互动的人工智能虚拟代理。

实际应用和使用案例

GPT-4o实时API为不同领域的开发人员开辟了大量可能性。以下是一些实际应用:

顾客服务

通过集成GPT-4o实时API,企业可以利用AI驱动的语音助手来增强他们的客户支持系统,为客户查询提供快速准确的回答。这可以显著提高客户满意度,并减少人工代理的工作量。

语言学习

语言学习应用程序可以利用API创建交互式角色扮演场景,用户可以在其中练习用新语言进行对话。实时反馈和自然互动可以使学习过程更加有趣和有效。

保健医疗

在医疗保健领域,API可用于开发虚拟健康助手,为患者提供及时信息和支持。例如,一个营养和健身辅导程序可以使用API与AI辅导员进行自然对话,提供个性化建议和激励。

可达性

GPT-4o实时API也可以改变游戏规则,提高辅助功能。它可以用于开发帮助残障人士的工具,例如用于控制智能家居设备的语音激活界面或聋人的实时转录服务。

个性化购物助手

电子商务平台可以部署虚拟购物助手来帮助客户查找产品,回答问题,并根据其偏好和过往购买历史提供个性化推荐。

交互式语音应答(IVR)系统

传统的IVR系统可以通过GPT-4o Realtime进行增强,以提供更自然和直观的交互。客户无需浏览一系列菜单选项,只需直接说出他们的请求,系统就能理解并做出相应的回应。

使用GPT-4o实时API入门

要开始使用GPT-4o实时API,开发者需要在支持的区域(如eastus2或swedencentral)创建一个Azure OpenAI资源,并部署gpt-4o-realtime-preview模型。该API需要一个安全的WebSocket连接,可以使用以下URI格式进行建立:

wss://<your-resource-name>.openai.azure.com/openai/realtime?api-version=2024-10-01-preview&deployment=gpt-4o-realtime-preview

身份验证可以使用承载令牌(用于托管身份)或 API 密钥来处理。一旦进行了身份验证,开发人员可以配置会话,以定制输入和输出行为,比如音频格式、转录模型和轮廓检测设置。

在这个示例实现中,我们涵盖了结构化和非结构化数据以及GPT-4o实时的功能。让我们一起走过实现实时语音助手的过程。这个例子将使用Azure OpenAI的gpt-4o-realtime-preview模型和GPT-4O用于Text-SQL。

这是高级别的设计:

Image by Author

我们将按照4个步骤在您自己的环境中运行此示例: 先决条件、创建索引(用于非结构化数据)、设置具有数据的SQL、设置环境,然后运行应用程序。

1. 先决条件

您将需要以下Azure服务的实例。您可以重用您已有的服务实例或创建新的实例。

  1. Azure OpenAI,具有3个模型部署,其中一个是gpt-4o-realtime-preview模型,一个用于嵌入(例如text-embedding-3-large,text-embedding-3-small或text-embedding-ada-002)和一个GPT 4O.
  2. Azure AI搜索,任何基本或以上的层级都可以使用,最好启用语义搜索。
  3. Azure Blob 存储,带有包含代表您知识库的内容的容器(如果您想要一个简单的起点,我们在此存储库中包含一些示例数据)。
  4. Azure SQL,请查看此存储库中的 data/structured/SQL DDL 和 Sample Data.txt 文件,获取 DDL 和 SQL 插入语句。

2. 为非结构化数据创建索引

RAG 应用程序使用检索系统为LLM获取正确的基础数据。 我们使用Azure AI搜索作为我们的检索系统,因此我们需要将我们的知识库(例如文件或您希望应用程序能够讨论的任何其他内容)导入Azure AI搜索索引中。

如果您已经拥有 Azure AI 搜索索引

您可以直接使用现有的索引。如果您是在门户中使用“导入和向量化数据”选项创建该索引,那么就不需要进行进一步的更改。否则,您需要更新代码中的字段名称,以匹配您的文本/向量字段。

创建一个带有示例数据或您自己的新索引.

按照以下步骤创建一个新索引。我们将创建一个设置,一旦创建后,您可以在 Blob 存储中添加、删除或更新您的文档,索引将自动跟随这些更改。

  1. 将您的文档上传到 Azure Blob 存储容器。一个简单的方法是使用 Azure 门户网站:转到容器,然后使用上传选项移动您的内容(例如 PDF、Office 文档等)。
  2. 在Azure门户中,转到您的Azure AI搜索服务并选择“导入和向量化数据”,选择Blob存储,然后指向您的容器并按照屏幕上的其余步骤操作。
  3. 一旦索引过程完成,您将拥有一个准备好用于向量和混合搜索的搜索索引。

要了解如何在Azure AI Search中使用“导入和向量化数据”注入数据的更多详细信息,请查看快速入门指南。

2.1 准备结构化数据

您可以使用这里的SQL语句:audio-rag-structured-unstructured-data/data/structured at main · navintkr/audio-rag-structured-unstructured-data (github.com),并准备结构化演示。

3. 设置环境

应用程序需要知道要使用的Azure OpenAI和Azure AI Search的服务端点。以下变量可以设置为环境变量,或者您可以在“app/backend/”目录中创建一个包含此内容的“.env”文件。

AZURE_OPENAI_ENDPOINT=wss://<your instance name>.openai.azure.com
AZURE_OPENAI_DEPLOYMENT=gpt-4o-realtime-preview
AZURE_OPENAI_API_KEY=<your api key>
AZURE_SEARCH_ENDPOINT=https://<your service name>.search.windows.net
AZURE_SEARCH_INDEX=<your index name>
AZURE_SEARCH_API_KEY=<your api key>
OPENAI_CHAT_MODEL=gpt-4o
AZURE_SQL_SERVER=<your-SQL-Server-Name>
AZURE_SQL_DB=<your-SQL-DB-Name>
AZURE_SQL_USERNAME=<your-SQL-Server-Username>
AZURE_SQL_PWD=<your-SQL-Server-Password>

在本地运行时请使用 Entra ID(您的用户),在部署时请使用托管的身份验证,只需不设置密钥即可。

4. 运行该应用程序

  1. 安装所需工具:Node.js,Python 和 Powershell。
  2. 克隆仓库(git 克隆 https://github.com/navintkr/audio-rag-structured-unstructured-data)
  3. 创建一个Python虚拟环境并激活它。
  4. 该应用需要知道用于Azure OpenAI和Azure AI Search的服务端点。可以将以下变量设置为环境变量,或者您可以在“app/backend/”目录中创建一个名为“.env”的文件,并将其内容设置为以下内容。
  5. AZURE_OPENAI_ENDPOINT=wss://<your instance name>.openai.azure.com
    AZURE_OPENAI_DEPLOYMENT=gpt-4o-realtime-preview
    AZURE_OPENAI_API_KEY=<your api key>
    AZURE_SEARCH_ENDPOINT=https://<your service name>.search.windows.net
    AZURE_SEARCH_INDEX=<your index name>
    AZURE_SEARCH_API_KEY=<your api key>
    OPENAI_CHAT_MODEL=gpt-4o
    AZURE_SQL_SERVER=<your-SQL-Server-Name>
    AZURE_SQL_DB=<your-SQL-DB-Name>
    AZURE_SQL_USERNAME=<your-SQL-Server-Username>
    AZURE_SQL_PWD=<your-SQL-Server-Password>

使用 Entra ID(在本地运行时是您的用户,部署后是托管身份)只需不设置密钥。

5. 运行此命令以启动应用程序:

Windows: 窗户

cd app 
pwsh .\start.ps1

Linux/Mac: Linux/Mac:

cd app ./start.sh

该应用程序应该在http://localhost:8765上可用。

一旦应用程序运行,当您导航到上面的URL时,您应该看到应用程序的启动屏幕:

你可以使用下拉菜单在结构化数据和非结构化数据之间进行调整。

前端:使 AOAI 实时 API 可以直接进行通信

您可以让前端跳过中间层直接与WebSockets AOAI实时API交互,如果选择这样做。但是,请注意这会阻止RAG的发生,并需要在前端公开您的API密钥,这是非常不安全的。请勿在生产环境中使用这种方法。

只需向useRealtime hook传递一些额外的参数:

const { startSession, addUserAudio, inputAudioBufferClear } = useRealTime({
useDirectAoaiApi: true,
aoaiEndpointOverride: "wss://<NAME>.openai.azure.com",
aoaiApiKeyOverride: "<YOUR API KEY, INSECURE!!!>",
aoaiModelOverride: "gpt-4o-realtime-preview",
...
);

结论

Azure OpenAI GPT-4o实时API代表了人工智能领域的重大进步,为开发人员提供了创建高度响应和自然语音对话交互的工具。通过利用这项技术,企业和开发人员可以构建创新的应用程序,从客户支持和语言学习到医疗保健和可访问性,提升用户体验。

对于那些有兴趣探索GPT-4o实时API的全部潜力的人,我鼓励您深入研究GitHub上提供的详细文档和样本代码。凭借正确的方法和创造性,可能性是无限的。

开心编码!

感谢您抽出时间阅读我的故事!如果您喜欢并觉得有价值,请考虑给它鼓掌(或50个!)来表达您的支持。您的掌声有助于其他人发现这篇内容,并激励我继续创作更多。

此外,别忘记关注我以获取更多关于人工智能的见解和更新。您的支持对我来说意义重大,帮助我继续与您分享有价值的内容。谢谢!

2024-10-16 04:21:09 AI中文站翻译自原文