Retrieval-Augmented 生成(RAG)模式是一种行业标准方法,用于构建使用语言模型来处理模型尚不知道的特定或专有数据的应用程序。 该体系结构非常简单,但设计、试验和评估适合此体系结构的 RAG 解决方案涉及许多复杂的注意事项,这些注意事项受益于严格的科学方法。
本文介绍一系列。 本系列中的每个文章都涵盖 RAG 解决方案设计中的特定阶段。
本系列中的其他文章介绍了以下注意事项:
- 如何确定在评估期间要使用的测试文档和查询
- 如何选择分块策略
- 如何确定应扩充哪些区块以及如何扩充它们
- 如何选择正确的嵌入模型
- 如何配置搜索索引
- 如何确定哪些搜索(如矢量、全文、混合和手动多个搜索),应执行
- 如何评估每个步骤
RAG 体系结构
RAG 应用程序流
以下工作流描述了 RAG 应用程序的高级别流。
- 用户在智能应用程序用户界面上发出查询。
- 智能应用程序向业务流程协调程序调用 API。 可以使用语义内核、Azure 机器学习提示流或 LangChain 等工具或平台实现业务流程协调程序。
- 业务流程协调程序确定要对 Azure AI 搜索执行哪些搜索并发出查询。
- 业务流程协调程序将查询中的前 N 个 结果打包。 它将顶部结果和查询打包为提示中的上下文,并将提示发送到语言模型。 业务流程协调程序将响应返回给智能应用程序,以供用户阅读。
RAG 数据管道流
以下工作流描述了为 RAG 应用程序提供地面数据的数据管道的高级流。
- 文档被推送或拉取到数据管道中。
- 数据管道通过完成以下步骤单独处理每个文档:
- 区块文档:将文档分解为语义上相关的部分,理想情况下具有单个想法或概念。
- 扩充区块:添加管道基于区块中的内容创建的元数据字段。 数据管道将元数据分类为离散字段,例如标题、摘要和关键字。
- 嵌入区块:使用嵌入模型向量化区块以及用于矢量搜索的任何其他元数据字段。
- 保留区块:将区块存储在搜索索引中。
RAG 设计和评估注意事项
在设计 RAG 解决方案时,必须做出各种实现决策。 下图说明了在做出这些决定时应提出的一些问题。
以下列表简要介绍了在 RAG 解决方案开发的每个阶段应执行的操作。
在 准备阶段,应:
- 确定解决方案域。 明确定义 RAG 解决方案的业务要求。
- 收集具有代表性的测试文档。 收集代表文档集合的 RAG 解决方案的测试文档。
- 收集测试查询。 收集信息和测试查询,并生成文档未涵盖的合成查询和查询。
在 分块阶段,应:
- 了解分块经济学。 了解在评估文本集合分块解决方案的总体成本时要考虑的因素。
- 执行文档分析。 提出以下问题,帮助你在分析文档类型时做出决策:
- 文档中要忽略或排除哪些内容?
- 要在区块中捕获哪些内容?
- 如何对内容进行分块?
- 了解分块方法。 了解分块的不同方法,包括基于句子、固定大小和自定义方法,或者通过使用语言模型扩充、文档布局分析和机器学习模型。
- 了解文档结构如何影响分块。 根据文档具有的结构程度选择分块方法。
在 区块扩充阶段期间,应:
- 清理区块。 实现清理方法,消除不影响文本含义的差异。 此方法支持接近匹配。
- 扩充区块。 请考虑使用常见元数据字段扩充区块数据,并了解其在搜索中的潜在用途。 了解用于生成元数据内容的常用工具或技术。
在 嵌入阶段中,应:
- 了解嵌入模型的重要性。 嵌入模型可能会显著影响矢量搜索结果的相关性。
- 为用例选择正确的嵌入模型。
- 评估嵌入模型。 通过可视化嵌入和计算嵌入距离来评估嵌入模型。
在 信息检索阶段期间,应:
- 创建搜索索引。 将适当的矢量搜索配置应用于矢量字段。
- 了解搜索选项。 考虑不同类型的搜索,包括矢量、全文、混合和手动多个搜索。 了解如何将查询拆分为子查询和筛选查询。
- 评估搜索。 使用检索评估方法评估搜索解决方案。
在 语言模型端到端评估阶段期间,应:
- 了解语言模型评估指标。 可以使用多种指标(包括基础性、完整性、利用率和相关性)来评估语言模型的响应。
- 了解相似性和评估指标。 可以使用相似性和评估指标来评估 RAG 解决方案。
- 了解文档、报告和聚合的重要性。 记录超参数和评估结果。 聚合来自多个查询的结果并可视化结果。
- 使用 RAG 试验加速器。 可以使用 RAG 试验加速器 GitHub 存储库,通过运行多个试验、持久化和评估结果,帮助团队找到 RAG 实现的最佳策略。
结构化方法
由于步骤和变量的数量,请务必遵循 RAG 解决方案的结构化评估过程。 评估每个步骤的结果,并根据要求进行更改。 应单独评估每个步骤进行优化,但请记住,最终结果是客户体验。 在确定每个步骤的接受条件之前,请确保先了解此过程中的所有步骤。
供稿人
本文由Microsoft维护。 它最初由以下参与者编写。
主要作者:
- Raouf Aliouat |软件工程师 II
- Rob Bagby |主要体系结构中心内容主管
- Prabal Deb |首席软件工程师
- 查德·基特尔 |首席软件工程师
- Ritesh Modi |首席工程师
- 瑞安·普法尔茨 |高级技术项目经理
- 兰迪·瑟曼 |首席 AI 云解决方案架构师
若要查看非公共LinkedIn配置文件,请登录到LinkedIn。