本文介绍了一种简单的语音生成式 AI 应用架构,通过结合新的 gpt-4o-realtime-preview 模型和 Azure AI Search,实现了 RAG 模式。新的 Azure OpenAI gpt-4o-realtime-preview 模型以其语音到语音的功能,为更自然的应用程序用户界面打开了大门。这种新的基于语音的界面也带来了一个有趣的新挑战:如何在使用音频作为输入和输出的系统中实现检索增强生成 (RAG)?

RAG 是一种将语言模型与您自己的数据相结合的流行模式。我们将介绍一种简单的语音生成式 AI 应用架构,该架构支持在实时音频 API 之上进行 RAG,并支持来自客户端设备的全双工音频流,同时安全地处理对模型和检索系统的访问。

stage1

支持 RAG 工作流程

我们使用两个关键构建块来使语音与 RAG 一起工作:

  • 函数调用: gpt-4o-realtime-preview 模型支持 函数调用,允许我们在会话配置中包含用于搜索和基础的工具。模型监听音频输入,并直接使用描述它要从知识库中检索内容的参数调用这些工具。
  • 实时中间层: 我们需要区分客户端需要做什么和不能在客户端做的事情。全双工、实时音频内容需要发送到客户端设备的扬声器和麦克风。另一方面,模型配置(系统消息、最大令牌、温度等)和 RAG 对知识库的访问需要在服务器上处理,因为我们不希望客户端拥有这些资源的凭据,也不希望要求客户端具有对这些组件的网络视线。为了实现这一点,我们引入了一个中间层组件,该组件代理音频流量,同时将模型配置和函数调用等各个方面完全保留在后端。

stage2

这两个构建块协同工作:实时 API 知道如果有未完成的函数调用,则不会继续进行对话。当模型需要来自知识库的信息来响应输入时,它会发出一个 “搜索” 函数调用。我们将该函数调用转换为 Azure AI Search “混合” 查询(向量 + 混合 + 重新排序),获取与模型需要了解的内容最相关的文档段落,并将其作为函数的输出发送回模型。一旦模型看到该输出,它就会通过音频通道响应,从而继续对话。

在这个场景中,一个关键元素是快速准确的检索。搜索调用发生在用户回合和音频通道中的模型响应之间,这是一个延迟敏感的时间点。Azure AI Search 是完美的选择,因为它具有低延迟的向量和混合查询以及支持语义重新排序以最大限度地提高响应的相关性。

生成基础响应

使用函数调用解决了如何协调针对知识库的搜索查询的问题,但这种控制反转又带来了一个新的问题:我们不知道从知识库检索到的哪些段落用于为每个响应提供基础。典型的 RAG 应用程序与模型 API 进行交互,可以要求在提示中生成带有特殊符号的引文,以便在用户体验中适当地呈现,但当模型生成音频时,我们不希望它大声说出文件名或 URL。由于生成式 AI 应用程序必须对其用于响应任何给定输入的基础数据的来源保持透明,因此我们需要一种不同的机制来识别和显示用户体验中的引文。

我们也使用函数调用来实现这一点。我们引入了第二个名为 “report_grounding” 的工具,并将以下指令作为系统提示的一部分包含在内。 使用以下逐步说明使用知识库提供简短明了的答案:

  • 步骤 1 - 在回答问题之前,始终使用 “search” 工具检查知识库。
  • 步骤 2 - 始终使用 “report_grounding” 工具报告来自知识库的信息来源。
  • 步骤 3 - 生成尽可能简短的答案。如果答案不在知识库中,请说你不知道。

我们尝试了不同的方式来制定此提示,并发现将此过程明确列为逐步执行特别有效。

有了这两个工具,我们现在拥有一个系统,可以将音频流传输到模型,使模型能够回调到后端的应用程序逻辑,既可以进行搜索,也可以告诉我们哪些基础数据被使用,然后将音频流传输回客户端,并带有额外的消息,让客户端知道基础信息(您可以在 UI 中看到这些信息,作为答案被说出时出现的文档引用)。

使用任何支持实时 API 的客户端

请注意,中间层完全抑制了与工具相关的交互,并覆盖了系统配置选项,但除此之外,它保留了相同的协议。这意味着任何直接针对 Azure OpenAI API 工作的客户端都将 “正常” 针对实时中间层工作,因为 RAG 过程完全封装在后端。

创建安全的生成式 AI 应用

我们将所有配置元素(系统提示、最大令牌等)和所有凭据(用于访问 Azure OpenAI、Azure AI Search 等)保留在后端,并将其与客户端安全地分离。此外,Azure OpenAI 和 Azure AI Search 包含广泛的安全功能,以进一步增强后端的安全性,包括网络隔离,使模型和搜索索引的 API 端点无法通过互联网访问,Entra ID 避免跨服务使用密钥进行身份验证,以及为索引内容提供多层加密的选项。

参考

本文中讨论的所有代码和数据都可在 GitHub 存储库 Azure-Samples/aisearch-openai-rag-audio 中获得。您可以按原样使用它,也可以轻松地将数据更改为您自己的数据并与之交谈。该存储库中的代码和本文中的描述更像是一种范式,而不是具体的解决方案。您需要尝试正确设置提示,可能需要扩展 RAG 工作流程,并需要评估其安全性和 AI 安全性。

要了解有关 Azure OpenAI gpt-4o-realtime-preview 模型和实时 API 的更多信息,请参阅https://learn.microsoft.com/azure/ai-services/openai/overview。有关 Azure AI Search,您可以在https://aka.ms/azureaisearch找到大量资源,文档位于https://learn.microsoft.com/azure/search/