检索扩充生成 (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 应充当质量大门,以确定收集的文档、关联的测试查询以及来自文档的查询答案是否全面、具有代表性和正确性。
定期查看问题和答案正文,确保它们继续准确反映源文档。
下一步
相关资源
使用 Python 自己的数据示例开始聊天