简介:面对海量本地文档,如何让大模型在不超出上下文窗口的前提下,基于真实资料给出可追溯、可复核的结论?本文将系统介绍检索增强生成(RAG)的定义、核心组成、工作原理、典型场景与使用注意事项,并结合本地试验报告知识库的构建过程,说明其工程化落地方法。
检索增强生成,英文为 Retrieval-Augmented Generation,通常简称为 RAG。从技术视角看,它是一种将信息检索系统与生成式语言模型结合的架构模式;从使用视角看,它是一套“先查资料、再回答问题”的工作流程。
其核心逻辑可以概括为:当用户提出问题时,系统并不直接让生成模型凭空作答,而是先从预先构建好的知识库中检索出与问题最相关的若干文本片段,再把这些片段作为参考依据交给生成模型,由模型基于这些资料组织答案,并在可能的情况下标注引用来源。
更简单地说,RAG 把生成模型的角色从“全知全能的答题者”调整为“基于指定资料作答的分析者”。这一调整并不降低模型的能力,反而让输出结果更容易被验证和追溯。
从技术视角、业务视角和使用视角分别理解,RAG 可以有三层含义:
在工程研发、技术管理、质量分析等场景中,大量知识以文档形式存在:检测报告、设计说明、试验记录、故障分析、会议纪要等。这些文档往往数量庞大、格式多样、内容复杂,人工阅读和归纳成本极高。
一个常见问题是:能否把这些文档全部交给大模型,让它直接阅读并回答问题?理论上可以,但实践中会遇到几个明显障碍。
生成式语言模型在处理输入时存在上下文长度限制。即便当前模型窗口不断扩大,当面对数百份、每份数十页的文档时,全文塞入仍然不现实。以 300 份报告、每份平均 40 页计算,仅文本量就可能达到数十万甚至上百万 token,容易超出窗口承载能力。
即使上下文窗口足够大,模型对超长输入中间段落的注意力也并不均匀。研究表明,当输入极长时,模型对首尾部分的关注度通常更高,对中间部分的细节把握可能下降。对于“哪几个转速点最容易出异常”这类需要跨文档精细比较的问题,注意力衰减会直接影响答案质量。
如果模型直接阅读全文并输出结论,用户很难判断结论具体来自哪份报告、哪个段落。而在研发、质量或合规场景中,结论的可追溯性与结论本身同样重要。
RAG 的引入正是针对这几点。它不要求模型一次处理全部资料,而是按需检索最相关的片段;它将回答依据限定在检索结果中,使结论来源清晰;它把长文档处理转化为“切分—索引—检索—生成”的流水线,从而让大规模私有知识库的问答成为可能。
一个典型的 RAG 系统由三个核心模块组成:资料预处理与索引、查询编码与检索、上下文增强生成。以下分别说明。
这是 RAG 系统的基础环节。它的任务是把原始文档转变成可供检索的结构化形式。
分块是第一项工作。原始文档通常较长,直接以整份文件作为检索单元粒度过大,不利于精确定位。常见做法是按照语义边界或结构边界把文档切分为较小的文本片段。例如,在工程报告场景中,可以按“报告标题 + 试验项目 + 数据区段”进行切分,每个片段控制在数百字以内。分块策略的选择会影响检索精度:块太大,检索结果可能包含噪声;块太小,又可能导致语义不完整。
向量化是第二项工作。每个文本片段需要通过嵌入模型转换为数值向量。向量的作用是把语义相似度转化为数学上的距离或相似度计算。语义相近的文本,在向量空间中距离更近。嵌入模型可以在本地运行,也可以使用云服务。对于数据敏感性要求高的场景,本地嵌入推理可以避免资料外传。
存储与索引是第三项工作。生成的向量需要存入向量数据库或支持向量检索的存储系统。当资料规模扩大时,索引结构决定了检索效率。常见的检索方式包括余弦相似度、欧氏距离等相似度度量。
用户提出问题后,系统需要把自然语言问题转换为与资料片段相同的向量表示,这称为查询编码。随后,系统在向量库中查找与查询向量最接近的 top-K 个文本片段。
这里的“K”是一个可调参数。K 值太小,可能缺少足够信息支持回答;K 值太大,又会引入不相关内容,增加生成模型的阅读负担。在实际使用中,K 值通常需要结合分块大小、文档特点和问题类型进行调试。
检索完成后,系统把 top-K 个相关片段与用户问题一起组装为提示词,交给生成模型。生成模型的输入不再只是问题本身,而是“问题 + 参考资料”。输出由此受到检索结果的约束,答案内容更贴近资料库中的真实信息。
理想情况下,RAG 系统还会在输出中附带引用标记,说明答案的哪些部分参考了哪个来源片段。这样用户就可以回查原文,验证答案的准确性。
RAG 的工作流程可以拆解为两个阶段:离线建库阶段和在线问答阶段。
离线建库阶段的主要步骤是:
在线问答阶段的主要步骤是:
以本地试验报告场景为例:假设用户提问“哪些样件在 3600 转段存在共性振动偏高”,系统首先将问题向量化,然后在本地向量库中找到与“3600 转”“振动”“样件”等语义相近的文本块。这些文本块可能来自不同报告的不同章节,但都包含相关试验数据。生成模型拿到这些片段后,综合归纳出若干结论,并标注结论依据来自哪些报告。
整个过程没有把 300 份报告全文一次性交给模型,而是只处理了最相关的若干片段,既控制了输入长度,又提高了信息密度。
RAG 的核心价值在于“让生成模型基于特定资料作答”,因此它特别适合对答案来源有要求、知识更新频繁或数据保密度高的场景。
研发团队积累的大量试验报告、测试记录和问题分析文档,是质量回溯和设计改进的重要依据。RAG 可以支持跨文档查询,例如“近一年哪些型号在某转速区间出现异常温升”,帮助工程师从历史数据中快速定位规律。
企业内部的制度、流程、技术规范、运维手册等文档,适合构建 RAG 知识库。员工通过自然语言提问,系统基于内部文档回答,避免翻阅大量资料。
技术支持人员面对大量产品手册、故障案例和维修指南。RAG 可以辅助快速定位与用户描述最相近的案例段落,提升响应效率。
在合规审查中,结论必须对应具体条款或记录。RAG 的引用能力使回答具备可追溯性,便于审计复核。
为了更准确理解 RAG,需要将其与几个容易混淆的概念进行区分。
微调是通过在特定数据集上继续训练模型,改变模型权重,使其更适应某一领域。RAG 不改变模型权重,而是在推理阶段动态引入外部资料。微调更适合风格、格式或领域术语的长期适配;RAG 更适合知识频繁更新、需要引用来源的问答。二者并不互斥,可以组合使用。
长上下文直接输入是把更多文档直接放入提示词。RAG 则是先检索、再输入,只放相关片段。前者实现简单,但受窗口和注意力限制明显;后者需要额外的索引和检索环节,但在大规模文档场景中更稳定高效。
知识图谱以结构化三元组表示实体和关系,擅长逻辑推理和关系查询。RAG 基于非结构化或半结构化文本的向量检索,擅长语义匹配和自然语言问答。两者也可以结合:知识图谱提供精确的实体关系约束,RAG 提供灵活的语义覆盖。
在实际接入 RAG 系统时,有几个方面需要重点考虑。
分块是 RAG 系统中容易被低估却影响重大的环节。分块过大,检索结果可能包含多条不相关信息;分块过小,语义割裂,模型难以获得完整上下文。合适的块大小与文档结构、问题粒度有关。对于结构清晰的报告,可以按照章节、试验项目或数据段落分块;对于结构松散的文本,可以采用滑动窗口方式保留上下文重叠。
不同嵌入模型对多语言、专业术语的处理能力不同。在中文工程技术文档场景中,应选择对中文语义理解较好的模型。如果处理内容涉及大量专业缩写和术语,需要评估模型是否具备相应的语义表示能力。数据敏感场景还应优先考虑本地部署的嵌入模型。
RAG 系统上线后,检索质量需要通过样例问题进行评估。常见指标包括:检索结果是否与问题语义相关、top-K 中有效信息的比例、答案是否正确引用了来源等。如果检索质量不理想,需要回溯检查分块策略、嵌入模型或向量库索引参数是否合理。
当知识库包含敏感数据时,需要在系统设计阶段考虑访问控制。向量库和文档库应实施与原始资料一致的权限策略,避免不同权限级别的用户获得越权信息。本地部署可以在一定程度上减少资料外传风险,但仍需关注存储和访问链路的安全。
RAG 虽然提供了引用来源,但生成模型仍可能出现归纳错误或过度推断。关键场景下,应建立人工复核机制,对重要结论回查原始文档。引用功能是辅助验证的工具,不能完全替代人工判断。
回到最核心的问题:RAG 是什么?它是一种先通过检索从外部知识库中获取相关信息、再由生成模型基于这些信息组织答案的架构模式。它的价值不在于让模型“知道更多”,而在于让模型的回答“有据可依”。
RAG 解决了大规模私有文档问答中的三个关键问题:上下文窗口有限、长文本注意力衰减和结果来源不明确。它通过“分块—向量化—检索—生成”的流水线,把复杂的长文档处理转化为可控的片段级问答流程。
但 RAG 并非万能方案。它的效果依赖于分块策略、嵌入模型质量和检索结果的相关性;它的应用范围更适合需要引用来源、知识更新频繁或数据不宜外传的场景。对于需要深度逻辑推理、跨文档复杂关系推导的任务,RAG 可能需要与其他方法结合使用。
对于研发和工程技术团队而言,RAG 提供了一种切实可行的路径:让沉淀在本地文档中的试验数据、检测结论和问题记录,真正成为可以对话、可以查询、可以追溯的知识资产。搭建一套本地 RAG 系统的成本并不高,但它对工作效率和决策质量的改善,可能远超预期。