RAG和向量索引
为特定用例设计代理时需要确保语言模型已建立基础并使用与用户所需内容相关的事实信息。虽然语言模型针对大量数据进行了训练但它们可能无权访问你想要向用户提供的知识。 若要确保代理基于特定数据提供准确且特定于域的响应可使用检索增强生成 (RAG)。RAGRAG 是一种可用于建立语言模型基础的技术。 换句话说它是检索与用户的初始提示相关的信息的过程。 一般情况下RAG 模式包含以下步骤根据用户输入的初始提示检索基础数据。使用基础数据增强提示。使用语言模型生成有根据的响应。通过从指定数据源检索上下文确保语言模型在响应时使用相关信息而不是依赖其训练数据。在很多情况下你想要建立自己的语言模型的基础并提高生成式 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 中创建搜索索引时系统会引导你配置最适合与语言模型结合使用的索引。 将搜索结果用在生成式 AI 应用程序中时混合搜索会提供最准确的结果。混合搜索是关键字和全文与矢量搜索的组合用户可以选择向其添加语义排名。 创建与混合搜索兼容的索引时如果可以获得精确匹配使用关键字则检索到的信息是精确的而如果只能找到概念上相似的信息使用矢量搜索则检索到的信息虽然不精确但仍然相关。为了使用索引中的数据来为提示提供根据Azure OpenAI SDK 支持通过索引的连接详细信息来扩展请求。针对索引的搜索基于关键字- 换句话说查询由用户提示中的文本组成这些文本与索引文档中的文本匹配。 使用支持它的索引时另一种方法是使用基于矢量的查询其中索引和查询使用数字向量来表示文本标记。 使用矢量进行搜索可以根据语义相似性和文本匹配进行匹配。若要使用基于矢量的查询可以修改 Azure AI 搜索数据源详细信息的规范以包含嵌入模型;然后用于向量化查询文本。参见https://learn.microsoft.com/zh-cn/training/modules/build-copilot-ai-studio/2-ground-language-model