你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
RAG 准备阶段
Retrieval-Augmented 代(RAG)开发与实验的第一阶段是准备阶段。 在此阶段,为解决方案定义业务域。 定义域后,将收集文档、执行文档分析,并收集与域相关的示例问题。 你并行执行这些步骤,因为它们是相互关联的。 例如,文档分析可帮助你确定应收集的测试文档和测试查询。 您提出的问题必须由文档中的内容回答,文档必须回答相关问题。
本文是系列文章的一部分。 阅读简介。
确定解决方案域
此过程的第一步是明确定义解决方案或用例的业务要求。 这些要求可帮助你确定解决方案应回答的问题类型,以及哪些源数据或文档有助于回答这些问题。 在后期阶段,解决方案领域有助于指导嵌入模型策略。
文档分析
文档分析的目标是收集有关文档集合的足够信息,以帮助你了解:
文档的不同分类。 例如,你可能具有产品规格、季度报告、汽车保险合同或健康保险合同。
不同类型的文档。 例如,你可能具有 PDF、Markdown 文件、HTML 文件或 DOCX 文件。
安全约束。 例如,可能需要身份验证和授权才能访问文档,具体取决于文档是否可公开访问。
文档的结构。 例如,文档长度可能会有所不同。 或者它们可能具有主题分隔、上下文相关的图像或表格数据。
以下部分介绍了此信息如何帮助你选择加载和分块策略。
文档分类
你需要了解文档的不同分类,以帮助确定所需的测试文档数。 分析的这一部分应该告诉你高级分类,如保险或财务。 它还应该告诉你有关子分类的信息,例如医疗保险文档或汽车保险文件。 你还想知道子分类是否有不同的结构或内容。
目标是了解你拥有的所有不同文档变体。 然后,可以确定所需测试文档的数量和细分。 你不希望在试验中过度或低估特定文档分类。
文档类型
了解集合中的不同文件格式有助于确定测试文档的数量和细分。 例如,如果有季度报表的 PDF 和 Open XML 文档类型,则需要测试每个文档类型的文档。 了解文档类型还有助于了解加载和分块文档的技术要求。 这些技术要求包括可处理这些文件格式的特定库。
安全约束
了解安全约束对于确定加载和分块策略至关重要。 例如,需要确定部分文档或所有文档是否需要身份验证、授权或网络可见性。 如果文档位于安全外围内,请确保代码可以访问它们或实现一个进程,以安全地将文档复制到处理代码的可访问位置。
文档有时引用多媒体,如图像或音频,这些图像或音频对文档上下文很重要。 该媒体也可能受到与文档本身类似的访问控制。 如果该媒体需要身份验证或网络可达性,您需要确保代码能够访问媒体,或者您具有一个能够访问并复制内容的进程。
如果工作负荷要求不同的用户仅有权访问不同的文档或文档段,请确保了解如何在分块解决方案中保留这些访问权限。
文档结构
你需要了解文档的结构,包括文档的布局和内容类型。 了解文档的结构和内容有助于你做出以下决定:
文档是否需要预处理以清理干扰、提取媒体、重新格式化内容或标记要忽略的项目
是想忽视还是排除文档中的内容?
您想要捕获文档的哪些部分?
如何对文档进行分块
你想如何处理图像、表格、图形及其他嵌入式媒体
以下部分列出了可用于帮助你做出其中一些决定的分类问题。
确定可以忽略的项
某些结构元素可能不会向文档添加含义,在分块时可以安全地忽略。 在某些情况下,这些元素可以添加有价值的上下文,并改进查询与索引的相关性,但并非全部。 询问以下有关常见文档功能的问题,以查看它们是添加相关性还是应忽略。
文档是否包含目录?
是否有页眉或页脚?
是否有版权或免责声明?
是否有脚注或尾注?
是否有水印?
是否有批注或注释?
确定预处理和分块策略
以下有关文档结构的问题可以帮助你决定是否需要预处理文档,以便更轻松地处理文档。 它们还有助于选择分块策略。
是否存在多列数据或多列段落? 你不希望以与单列内容相同的方式解析多列内容。
文档的结构如何? 例如,HTML 文件有时使用需要与嵌入式表格数据区分开来的表格。
有多少段落? 段落有多长? 段落长度是否相似?
文档中有哪些语言、语言变体或方言?
文档是否包含 Unicode 字符?
数字的格式如何? 它们是否包含逗号或小数? 它们是否一致?
文档的哪些部分是统一的,哪些部分不统一?
是否有可以提取语义含义的标头结构?
是否有项目符号或有意义的缩进?
确定图像处理要求
了解文档中的图像有助于选择图像处理策略。 你需要知道你拥有的映像类型、它们是否有足够的分辨率来处理,以及图像是否包含所有必需的信息。 以下问题可帮助你了解图像处理要求。
文档是否包含图像?
图像的分辨率是多少?
图像中是否嵌入了文本?
有没有不增加价值的抽象图像? 例如,图标可能不会添加任何语义值。 为图标添加说明可能会对解决方案造成不利影响,因为该图标通常与文档的内容无关。
图像与周围文本之间的关系是什么? 请确定图像是具有独立内容,还是在传递给语言模型时需要使用其周围的上下文。 标题是周围文本的一个示例,该文本可能具有图像中不包含的有价值的上下文。
是否有丰富的文本描述,比如对图像的无障碍说明?
确定表格、图表和其他媒体处理要求
了解表、图表和其他媒体中封装的信息可帮助你确定处理信息的方式。 以下问题可帮助你了解表格、图表和其他媒体处理要求。
文档是否包含包含数字的图表?
文档是否包含表?
表格是复杂的(例如嵌套表),还是非复杂的?
是否有表格标题?
这些表格的长度是多少? 长表可能需要在区块中重复标头。
是否有其他类型的嵌入式媒体,如视频或音频?
文档中是否有数学公式或科学表示法?
收集具有代表性的测试文档
在此步骤中,收集最能代表您在解决方案中使用的文档的材料。 文档必须解决定义的用例,并回答在问题收集并行阶段中收集的问题。
注意事项
评估潜在代表性测试文档时,请考虑以下方面:
相关性: 文档必须满足会话应用程序的业务需求。 例如,如果构建可帮助客户执行银行操作的聊天机器人,则文档必须满足该要求。 例如,文档应显示如何打开或关闭银行帐户。 文档必须能够解决你在并行步骤中收集的测试问题。 如果文档没有与问题相关的信息,则解决方案无法生成有效的响应。
表示形式: 文档应表示解决方案使用的不同类型的文档。 例如,汽车保险文档包含的信息与健康保险或人寿保险文档不同。 假设用例需要解决方案来支持这三种保险类型,但你只有汽车保险文档。 你的解决方案可能会在健康和人寿保险业务中表现不佳。 每个变体至少应有两个文档。
物理文档质量: 文档需要处于可用状态。 例如,扫描的图像可能无法提取可用信息。
文档内容质量: 文档必须具有高质量的内容。 它们不应包含拼写错误或语法错误。 如果你为语言模型提供质量不佳的内容,则语言模型性能不佳。
若要成功收集测试文档,应定性的自信测试文档完全准确地表示你的特定域。
测试文档指南
选择真实文档而不是合成文档。 实际文档必须经过清理过程以去除个人数据。
考虑选择性地使用综合数据扩充文档。 此过程有助于确保文档涵盖各种方案,包括预测的未来方案。 如果必须使用综合数据,请尽最大努力使其尽可能类似于实际数据。
确保文档可以解决你收集的问题。
每个文档变体至少应有两个文档。
使用语言模型或其他工具来帮助评估文档的质量。
收集测试查询
在这一步中,要收集测试查询,用来评估分块、搜索解决方案和提示工程。 收集代表性文档时执行此步骤。 应收集查询并确定代表性文档如何同时处理这些查询。 通过同时拥有示例查询以及应对这些查询的示例文档的相应部分,可以在尝试不同策略和方法时,评估 RAG 解决方案的每一个阶段。
收集测试查询输出
此阶段的输出包括来自 收集代表性测试查询 步骤的内容,收集代表性测试文档 步骤。 输出是包含以下数据的集合:
查询:问题,表示合法用户的潜在提示。
上下文: 处理查询的文档中所有实际文本的集合。 对于每一段上下文,都应包括页面和实际文本。
答案: 对查询的有效响应。 响应可以是可以直接来自文档的内容,也可以是根据一个或多个上下文重新表述。
创建综合查询
对于特定领域的主题专家(SME)来说,为用例整理出一个全面的问题列表常常是具有挑战性的任务。 战胜这一挑战的办法之一是根据收集到的代表性测试文档来生成合成问题。 以下步骤介绍了从代表性文件生成综合问题的实际方法:
对文档进行分块。 将文档分解成区块。 不要对整体解决方案使用分块策略。 使用此一次性步骤生成综合查询。 如果文档数量合理,则可以手动执行分块。
为每个区块生成查询。 对于每个区块,请手动或使用语言模型生成查询。 使用语言模型时,通常首先为每个区块生成两个查询。 还可以使用语言模型创建答案。 以下示例演示了为区块生成问题和答案的提示。
Please read the following CONTEXT and generate two question and answer JSON objects in an array based on the CONTEXT provided. The questions should require deep reading comprehension, logical inference, deduction, and connecting ideas across the text. Avoid simplistic retrieval or pattern-matching questions. Instead, focus on questions that test the ability to reason about the text in complex ways, draw subtle conclusions, and combine multiple pieces of information to arrive at an answer. Ensure that the questions are relevant, specific, and cover the key points of the CONTEXT. Provide concise answers to each question, and directly quote the text from the provided context. Provide the array output in strict JSON format as shown in the output format. Ensure that the generated JSON is completely structurally correct, including proper nesting, comma placement, and quotation marks. There shouldn't be a comma after the last element in the array. Output format: [ { "question": "Question 1", "answer": "Answer 1" }, { "question": "Question 2", "answer": "Answer 2" } ] CONTEXT:
验证输出。 验证问题是否与用例相关,以及答案是否解决了问题。 SME 应执行此验证。
未处理的查询
重要的是,要收集文档未能解决的查询和可以解决的查询。 测试解决方案时,尤其是测试语言模型时,需要确定解决方案应如何响应它没有足够的上下文来回答的查询。 若要响应解决方案无法解决的查询,解决方案可以:
指出它不知道答案。
声明它不知道答案并提供一个链接,用户可以在其中找到更多信息。
收集嵌入式媒体的测试查询
与文本一样,应收集一组涉及使用嵌入式媒体生成高度相关的答案的各种问题。 如果有包含图形、表或屏幕截图的图像,请确保存在涵盖所有用例的问题。 如果您在进行文档分析的 图像部分(步骤)时确定图像前后的文本需要回答某些问题,请确保在测试查询中包含这些问题。
收集测试查询指南
确定是否有一个包含真实客户问题的系统可供使用。 例如,如果构建聊天机器人来回答客户问题,则可能能够使用技术支持、常见问题解答或票证系统中的客户问题。
用例的客户或 SME 应充当质量把关人,确定收集的文档、相关的测试查询以及文档中的查询答案是否全面、具有代表性且正确无误。
定期查看问题和答案正文,确保它们继续准确反映源文档。