为特定用例设计代理时,需要确保语言模型已建立基础并使用与用户所需内容相关的事实信息。

虽然语言模型针对大量数据进行了训练,但它们可能无权访问你想要向用户提供的知识。 若要确保代理基于特定数据提供准确且特定于域的响应,可使用检索增强生成 (RAG)。

RAG

RAG 是一种可用于建立语言模型基础的技术。 换句话说,它是检索与用户的初始提示相关的信息的过程。 一般情况下,RAG 模式包含以下步骤:

检索增强生成模式的关系图。

  1. 根据用户输入的初始提示检索基础数据。
  2. 使用基础数据增强提示。
  3. 使用语言模型生成有根据的响应。

通过从指定数据源检索上下文,确保语言模型在响应时使用相关信息,而不是依赖其训练数据。

在很多情况下,你想要建立自己的语言模型的基础并提高生成式 AI 应用的响应的事实准确性,此时使用 RAG 是一种强大且易用的方法。

当你想要创建一个使用你自己的数据生成准确答案的代理时,你需要能够有效地搜索数据。 使用 Microsoft Foundry 生成代理时,可以使用与 Azure AI 搜索 的集成来检索聊天流中的相关上下文。

Azure AI 搜索是一个检索器,你可以在生成某个具有提示流的语言模型应用程序时包含它。 使用 Azure AI 搜索,你可以自带数据、为数据建立索引,以及查询索引来检索所需的任何信息。

示意图显示了正在查询某个索引来检索基础数据。

使用矢量索引

虽然基于文本的索引可以提高搜索效率,但通常可以使用基于向量的索引(包含表示数据源中的文本标记的嵌入)来实现更好的数据检索解决方案。

嵌入是一种特殊的数据表示格式,搜索引擎可以使用它轻松查找相关信息。 更具体地说,嵌入是浮点数的矢量。

例如,假设你有两个包含以下内容的文档:

  • 孩子们在公园里快乐地玩耍。
  • 孩子们快乐地在操场上跑来跑去。

这两个文档包含语义上相关的文本,尽管使用了不同的单词。 通过为文档中的文本创建矢量嵌入,可以用数学方法计算文本中单词之间的关系。

想象一下从文档中提取关键字并在多维空间中将其绘制为矢量:

矢量嵌入的示意图。

矢量之间的距离可以通过测量两个矢量之间的角度的余弦(也称为余弦相似性)来计算。 换句话说,余弦相似性计算文档和查询之间的语义相似性。

通过用矢量表示单词及其含义,即使数据以不同的格式(文本或图像)和语言进行存储,也可以从数据源中提取相关上下文。

当你希望能够使用矢量搜索来搜索数据时,你需要在创建搜索索引时创建嵌入。 若要为搜索索引创建嵌入内容,可以使用 Microsoft Foundry 中提供的 Azure OpenAI 嵌入模型。

示意图显示了包含嵌入的矢量索引。

 提示

详细了解 Foundry 模型中 Azure OpenAI 中的嵌入

创建搜索索引

在 Azure AI 搜索中,搜索索引描述如何组织内容以使其可供搜索。 想象一个包含许多书籍的图书馆。 你希望能够轻松高效地搜索图书馆并检索相关书籍。 为了使图书馆可供搜索,请创建一个目录(其中包含有关书籍的任何相关数据),以便轻松查找任何书籍。 图书馆的目录充当搜索索引。

尽管创建索引的方法不同,但 Microsoft Foundry 中的 Azure AI 搜索集成使你可以轻松地创建适合语言模型的索引。 可以将数据添加到 Microsoft Foundry,之后可以使用 Azure AI 搜索通过嵌入模型在 Microsoft Foundry 门户中创建索引。 索引资产存储在 Azure AI 搜索中,并在聊天流中使用时由 Microsoft Foundry 查询。

在 Microsoft Foundry 中创建索引的屏幕截图。

如何配置搜索索引取决于你拥有的数据以及你希望语言模型使用的上下文。 例如,使用关键字搜索,你可以检索与搜索查询完全匹配的信息。 语义搜索则更进一步,使用语义模型检索与查询含义匹配的信息,而不是与确切的关键字匹配的信息。 目前,最先进的技术是矢量搜索,它创建嵌入来表示数据。

搜索索引

可通过多种方式在索引中查询该信息:

  • 关键字搜索:根据作为输入提供的特定关键字或术语,标识相关文档或段落。
  • 语义搜索:通过了解查询的含义并将其与语义相关的内容进行匹配(而不是仅依赖于确切的关键字匹配项)来检索文档或段落。
  • 矢量搜索:使用文本(矢量)的数学表示形式以根据其语义含义或上下文查找类似的文档或段落。
  • 混合搜索:合并任何或所有其他搜索技术。 查询并行执行,并在统一的结果集中返回。

在 Microsoft Foundry 中创建搜索索引时,系统会引导你配置最适合与语言模型结合使用的索引。 将搜索结果用在生成式 AI 应用程序中时,混合搜索会提供最准确的结果。

混合搜索是关键字(和全文)与矢量搜索的组合,用户可以选择向其添加语义排名。 创建与混合搜索兼容的索引时,如果可以获得精确匹配(使用关键字),则检索到的信息是精确的,而如果只能找到概念上相似的信息(使用矢量搜索),则检索到的信息虽然不精确,但仍然相关。

 为了使用索引中的数据来为提示提供根据,Azure OpenAI SDK 支持通过索引的连接详细信息来扩展请求。

针对索引的搜索 基于关键字 - 换句话说,查询由用户提示中的文本组成,这些文本与索引文档中的文本匹配。 使用支持它的索引时,另一种方法是使用 基于矢量 的查询,其中索引和查询使用数字向量来表示文本标记。 使用矢量进行搜索可以根据语义相似性和文本匹配进行匹配。

若要使用基于矢量的查询,可以修改 Azure AI 搜索数据源详细信息的规范,以包含嵌入模型;然后,用于向量化查询文本。

参见:https://learn.microsoft.com/zh-cn/training/modules/build-copilot-ai-studio/2-ground-language-model

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐