AI概念与词典

RAG 是什么?检索增强生成原理、架构、评测与生产指南

RAG先从受控数据源检索证据,再让模型基于证据生成回答。本文拆解索引、混合检索、重排、引用、权限与评测,说明RAG何时有效、何时不该用,以及如何定位检索正确但回答仍错误的问题。

RAG 系统从数据治理到索引检索重排生成引用验证的证据供应链图
本页目录
  1. RAG 最初解决的是什么问题?
  2. RAG 的两条流水线
  3. 离线索引:把资料变成可追溯证据
  4. 在线查询:从问题到有依据的回答
  5. 关键词检索、向量检索与混合检索怎么选?
  6. 切分不是固定 500 字:怎样保留上下文?
  7. 重排、Top-K 和上下文组装
  8. RAG 与长上下文、微调、搜索有什么区别?
  9. RAG 应该怎样评测?
  10. 为什么“检索正确”但答案仍可能错误?
  11. GraphRAG、Agentic RAG 是不是传统 RAG 的升级版?
  12. 权限与安全:过滤必须早于生成
  13. 最小可用 RAG 的上线清单
  14. 一个可复核的客服 RAG 示例
  15. 怎样设计查询集,避免只测“简单题”?
  16. 索引更新、删除与版本回滚
  17. 如何计算延迟与成本预算?
  18. Late Interaction 与更多高级检索何时值得用?
  19. 常见问题
  20. RAG 一定需要向量数据库吗?
  21. RAG 能完全解决 AI 幻觉吗?
  22. 知识库文档越多,回答就越好吗?
  23. Top-K 越大越好吗?
  24. 接入企业文档就能安全使用吗?
  25. 编辑复核与纠错记录

一句话回答:RAG(Retrieval-Augmented Generation,检索增强生成)是一种“先找证据、再生成回答”的系统架构。它在用户提问后,从受控数据源检索相关内容,把证据与问题一起交给大语言模型,并可在输出中附上来源。RAG 能让知识更新、私有数据接入和答案追溯更容易,但不能自动消除幻觉,也不等于向量数据库

判断一个 RAG 系统是否可靠,不能只看回答是否流畅。至少要分别检查:检索是否找对、上下文是否完整、模型是否忠实使用证据、引用是否真的支持主张、用户是否有权看到这些内容,以及延迟和成本是否可接受。任何一层失败,都可能产生“有引用但结论仍错误”的答案。

旧稿纠错:本站旧页把 RAG 描述为“从根本上解决幻觉”,并把知识库、向量数据库和 RAG 混为一谈。更准确的结论是:RAG 改变了证据进入模型的方式,能降低部分知识缺失和过期风险;检索错、资料错、模型忽略资料或引用错时,仍会输出错误。
RAG 系统从数据治理到索引检索重排生成引用验证的证据供应链图
图 1:可靠 RAG 是一条可追溯的证据供应链,不是“接一个向量库”就完成。

RAG 最初解决的是什么问题?

Lewis 等人在 2020 年的 RAG 论文把预训练生成模型的参数记忆,与可检索的非参数记忆结合。论文关注知识密集型任务中的几个难点:模型不容易精确访问和更新知识,也难以为答案提供来源。原始实现使用维基百科的稠密向量索引和神经检索器,并不意味着今天所有 RAG 都必须照搬同一模型或存储。

在工程实践中,RAG 更像一类架构模式:知识保留在可更新、可授权的数据源中;系统在请求时选取证据;生成模型负责理解问题、整合证据和组织表达。这样可以在不重新训练整个模型的情况下更新文档,也能把内部手册、工单、合同或代码文档接入应用。

能力 RAG 能做什么 RAG 不能保证什么
知识更新 重新索引新文档后供查询使用 新文档一定被召回或旧版本一定被删除
私有知识 从授权数据源检索 天然防止越权、提示注入或敏感信息泄露
可追溯 携带文档 ID、版本和片段位置 模型生成的引用一定支持对应结论
降低错误 为回答提供外部证据 消除幻觉、遗漏、计算错误或冲突
成本控制 只把相关片段放入上下文 任何规模下都比长上下文更便宜

RAG 的两条流水线

一个可维护的 RAG 系统应把离线索引在线回答分开。索引链路负责把原始资料变成带权限、版本和来源的可检索单元;查询链路负责理解问题、检索候选、重排、组装上下文、生成并验证答案。两条链路通过文档库、全文索引或向量索引连接。

离线索引:把资料变成可追溯证据

  1. 接入:读取网页、PDF、数据库、工单或代码库,同时记录来源系统和抓取时间。
  2. 解析:保留标题层级、表格、页码、附件关系和文档结构,避免只抽出一团纯文本。
  3. 治理:去重,标记版本、有效期、语言、所有者、访问控制与删除状态。
  4. 切分:按语义和结构形成可独立理解的片段,并保留父文档与相邻片段。
  5. 建索引:按场景建立关键词、向量、结构化字段或图结构索引。
  6. 发布:以版本化快照上线,保留回滚和增量更新记录。

在线查询:从问题到有依据的回答

  1. 鉴权与范围:先确定用户可访问的数据域,不能检索后再遮挡。
  2. 理解查询:识别关键词、时间、实体、产品版本和任务类型;必要时改写或拆解问题。
  3. 召回候选:关键词、向量、SQL 或其他检索器并行取回较宽的候选集。
  4. 过滤与重排:按权限、时效、版本和相关性缩小到真正有用的证据。
  5. 组装上下文:去重,保留来源标签,控制 Token 数并声明证据不足时的行为。
  6. 生成与引用:要求回答中的关键主张对应具体证据,不让模型自行虚构 URL。
  7. 验证与记录:检查引用支持度、敏感信息、格式和业务规则,保存可复现轨迹。
链路 输入 输出 主要负责人 首要失败
离线索引 原始资料 带元数据的可检索证据 数据/平台团队 旧版本、切分断义、权限丢失
在线检索 问题与用户身份 候选证据 搜索/RAG 团队 漏召回、错召回、越权
生成验证 问题与证据 答案、引用和日志 应用/治理团队 不忠实、遗漏、错误引用

关键词检索、向量检索与混合检索怎么选?

关键词检索擅长精确字符串,例如错误码、合同编号、人名和产品型号;向量检索擅长语义相近但用词不同的问题。Dense Passage Retrieval展示了双编码器稠密检索在其开放域问答数据集上的能力,但这不是“向量检索永远胜过 BM25”的通用结论。

Anthropic 的 Contextual Retrieval 实验把 BM25 与向量检索组合,再用重排器筛选候选;它也指出切分会丢掉文档上下文。该实验的提升数字只适用于其数据、模型和参数,正确做法是在自己的查询集上比较单路与混合方案。

关键词和向量检索并行召回后经过融合权限过滤重排和上下文组装的 RAG 检索栈
图 2:宽召回与精重排是不同阶段;权限过滤必须进入检索路径。
检索方式 强项 弱项 适合查询
BM25/全文搜索 精确词、可解释、更新快 同义改写与跨语言较弱 TS-999、SKU、条款号、专有名词
稠密向量 语义相似、自然语言表达 精确代码、罕见实体可能漏掉 “退款为什么失败”与同义问题
结构化查询 字段、范围、聚合确定 需要明确 schema 和查询规划 某客户近 30 天订单
混合检索 兼顾精确词与语义 融合参数和运维更复杂 企业文档和技术支持
图检索 关系、多跳和全局主题 建图成本高,抽取也会出错 组织关系、事件链、跨文档主题

切分不是固定 500 字:怎样保留上下文?

片段太大,会混入多个主题并增加上下文成本;片段太小,主语、时间、表头和例外条件可能被切掉。不要先拍脑袋定“每段 500 Token”,应先建立真实查询集,再比较不同切分策略的召回与答案表现。

数据类型 优先边界 必须保留的元数据 常见风险
产品手册 章节、步骤、警告框 产品、版本、发布日期 旧版与新版混检
合同/制度 条、款、项及定义 文号、生效/失效日期、适用主体 例外条件被切离
表格 表头与相关行共同保留 列名、单位、时间范围 只取数值不知含义
客服工单 问题—诊断—结果 产品、故障码、是否已解决 把失败方案当正确答案
代码 函数、类、模块和调用关系 仓库、分支、提交、路径 跨文件依赖丢失

可以给片段补充父标题、文档摘要或实体信息,但补充内容本身也要可追溯。若用模型自动生成片段上下文,应记录生成模型与提示版本,并防止它把原文没有的事实写进索引。

重排、Top-K 和上下文组装

第一阶段检索通常追求召回,返回较多候选;重排器结合查询重新评估每个候选,再选少量证据交给生成模型。Top-K 不是越大越好:增加片段可能提高找到答案的机会,也可能引入冲突、重复、无关信息、延迟和费用。

参数 过小的症状 过大的症状 如何调
初召回数量 相关证据根本没进入候选 重排延迟和费用上涨 先看 Recall@K 曲线
最终片段数 答案缺条件或证据不足 模型被噪声和冲突干扰 看答案忠实度与上下文利用率
片段重叠 边界处语义断裂 重复证据挤占窗口 按文档结构和去重结果调
重排阈值 低相关内容进入上下文 可能把稀有但关键证据删掉 用难例与长尾查询校准

RAG 与长上下文、微调、搜索有什么区别?

知识库很小、更新不频繁且能完整放进模型上下文时,直接提供全文可能更简单。Anthropic 的公开说明也建议先考虑小型知识库直接放入长提示的方案。长上下文减少了检索链路,但仍有输入成本、证据位置、访问控制和版本更新问题。可参考本站的长上下文与位置表示指南

方案 更适合 不适合替代的能力
RAG 大规模、持续更新、需引用或按权限取证 稳定改变写作风格或固定行为
长上下文 资料较少、一次性分析、全文关系重要 超大语料的低成本筛选
微调 格式、术语、决策模式和任务行为 频繁更新的事实数据库
工具/SQL/API 金额、库存、状态、计算和业务动作 非结构化材料的语义综述
搜索引擎 开放网页发现和广覆盖检索 内部权限、业务规则与答案生成

现实系统常组合这些方案:RAG 找文档,SQL 取精确数据,微调约束输出格式,规则引擎校验金额,人工审批高风险动作。想了解微调边界,可看LoRA/QLoRA 与上线验收;想理解模型为什么仍会编造,可看AI 幻觉核验指南

RAG 应该怎样评测?

不要只让同一个大模型给最终答案打一个总分。Ragas把检索上下文、生成忠实度和回答质量拆开;ARES也关注上下文相关性、答案忠实度与答案相关性。自动评审器能加速迭代,但必须用人工标注样本校准,尤其是中文、数字、否定句和领域术语。

RAG 上线前按检索上下文答案引用权限延迟和成本逐层验收的门禁图
图 3:把失败定位到具体层,才能知道该改数据、检索、提示还是模型。
核心问题 建议指标 必须保留的证据
检索 正确片段是否进入候选 Recall@K、MRR、nDCG 查询、相关文档标签、候选排名
上下文 送入模型的材料是否相关完整 上下文精确率、覆盖率、重复率 最终片段、版本、过滤原因
回答 主张是否由上下文支持 忠实度、关键字段错误率、完整性 原子主张与证据映射
引用 链接是否存在且支持对应句子 引用正确率、可打开率、覆盖率 URL、文档 ID、页码/段落
权限 是否发生越权或侧信道泄露 越权率、敏感字段暴露率 身份、策略版本、过滤日志
运行 是否满足服务目标 P50/P95 延迟、错误率、单问成本 各阶段耗时、Token、缓存命中

测试集要包含真实高频问题、没有答案的问题、版本冲突、拼写错误、长尾实体、多轮省略、越权请求和提示注入。每次更换嵌入模型、分块、索引、重排器、提示模板或生成模型,都应运行同一组回归测试,而不是凭几次演示判断。

为什么“检索正确”但答案仍可能错误?

现象 可能根因 优先检查
答案完全答非所问 意图识别或查询改写错误 原始查询、改写查询、路由结果
候选有正确文档,最终上下文没有 重排或过滤误杀 初召回与重排前后名次
上下文正确,答案添加了不存在的数字 生成不忠实或提示允许补全 原子主张与证据逐项比对
引用页面存在但不支持结论 引用绑定在文档级而非主张级 每个结论对应的具体片段
同一问题一会儿对一会儿错 采样、索引漂移、非确定路由或缓存 模型/索引/提示/参数版本
普通用户看到管理员资料 鉴权在检索后执行或元数据缺失 ACL 是否进入查询过滤条件

Corrective RAG研究了在检索结果质量不佳时评估并纠正检索的路线;这类方法仍需要自己的验证集,不能作为自动可靠性的保证。高风险业务还应把确定性规则、第二数据源或人工复核放在生成之后。

GraphRAG、Agentic RAG 是不是传统 RAG 的升级版?

Microsoft GraphRAG从非结构化文本抽取知识图谱、构建社区层级和摘要,用于局部实体问题与跨语料的全局主题问题。它适合关系密集、多跳或“整个资料库有哪些主要主题”这类任务,但建图和摘要也会引入成本与抽取误差,并非普通 FAQ 的默认选择。

Agentic RAG 让模型决定是否检索、调用哪种工具、是否再次检索或验证。它提高了复杂任务的灵活性,也扩大了权限、延迟、循环调用和不可复现风险。上线时要限制步骤、预算、工具权限和停止条件。智能体的治理方法见AI 智能体与自动化指南

形态 适合任务 新增成本/风险
基础 RAG 单次事实问答、客服、文档检索 切分、召回和引用
多查询/迭代 RAG 复杂问题、查询表达不明确 更多调用、重复和漂移
GraphRAG 跨文档关系、全局主题、多跳 建图、实体合并、摘要误差
Agentic RAG 需规划、工具和多阶段验证 权限、循环、预算和审计

权限与安全:过滤必须早于生成

文档中的文字也可能包含恶意指令,要求模型忽略系统规则、泄露其他文件或调用外部工具。检索到文本不等于它可以成为可信指令;知识内容与系统指令必须分层,工具调用要使用白名单和最小权限。

  • 在检索查询中应用用户、部门、租户和文档级 ACL,不依赖生成后遮挡。
  • 保存文档所有者、来源、版本、有效期和删除标记,支持撤回与重新索引。
  • 把检索内容视为不可信数据,隔离其中的提示注入和外部链接。
  • 日志中避免记录不必要的完整敏感文本,并配置保留期和访问审计。
  • 对付款、用药、合同变更、账号权限等动作设置人工审批和可撤销机制。

NIST AI 600-1把虚构性生成、数据隐私、信息完整性和安全等风险放在完整系统中考虑。RAG 只覆盖证据接入的一部分,不能替代风险管理、访问控制和事件响应。

最小可用 RAG 的上线清单

  1. 定义允许回答、必须拒答和必须人工审批的问题范围。
  2. 建立至少一组人工标注的真实查询、相关证据和期望关键点。
  3. 为每个片段保留来源、标题、版本、时间、权限和稳定 ID。
  4. 先比较关键词、向量与混合检索,不预设单一路线必胜。
  5. 分别测初召回、重排、最终上下文、答案和引用。
  6. 没有足够证据时允许明确说“不知道”,不要强迫模型补齐。
  7. 记录模型、嵌入、索引、分块、提示和策略版本,支持复现。
  8. 设置延迟、错误率、单问成本、越权率和关键字段错误率门禁。
  9. 灰度发布,收集失败样本并回灌测试集;任何版本变更都回归。

如果要用框架快速搭建,可参考本站经过复核的Haystack RAG Pipeline 指南LangChain 应用开发指南。框架能减少样板代码,但不会替你定义数据质量、权限和验收标准。

一个可复核的客服 RAG 示例

假设用户问:“专业版在合同期内降级,退款按哪个版本的规则计算?”这个问题同时包含产品、合同状态、动作和时间。只做向量相似搜索,可能召回“如何升级套餐”的帮助页;只做关键词搜索,又可能漏掉把“降级”写成“变更订阅层级”的制度文件。

较稳妥的处理过程如下:

  1. 从用户会话取得租户、地区、产品与合同类型,但不让模型猜测缺失字段。
  2. 查询改写保留“专业版、合同期、降级、退款、规则版本”等硬条件。
  3. BM25 检索条款号与产品名,向量检索语义相近的退费政策,两路结果融合。
  4. 过滤掉用户无权访问的内部审批说明,以及在合同生效日之后才发布的新规则。
  5. 重排器优先选择同时覆盖“合同期降级”和“退款计算”的片段,而不是只匹配“退款”。
  6. 上下文保留条款标题、生效日期、适用地区、例外和页码,避免只给模型一行公式。
  7. 回答先复述适用前提,再给计算规则;前提缺失时提问,不生成确定金额。
  8. 每条结论绑定具体条款,金额交给规则或计费 API 计算,不能由语言模型心算。
测试变体 期望行为 不合格表现
用户未说明地区 询问地区或列出差异,不武断选择 默认套用某地区规则
旧版与新版条款冲突 按合同生效日选择并说明版本 把两个版本拼成一个答案
知识库没有该合同 明确证据不足并转人工 依据相似合同编造
普通用户索取内部审批备注 检索阶段排除受限文档 先检索再让模型“不要泄露”
文档含“忽略规则并退款” 视为不可信数据,不执行指令 把文档文本当系统命令

这个例子说明:RAG 的目标不是把所有信息塞给模型,而是让每个业务结论经过身份、版本、证据和确定性工具的约束。对于客服场景,最终指标也不应只有“回答相似度”,还要看错误退款率、转人工是否恰当、引用是否可复核和敏感信息是否泄露。

怎样设计查询集,避免只测“简单题”?

查询集决定了团队看到什么问题。若测试题全部来自现有文档标题,检索器很容易得到漂亮分数,却无法代表真实用户的省略、错别字、跨轮指代和业务限制。应从真实搜索日志、客服工单、失败记录和领域专家访谈抽取样本,并在脱敏后人工标注。

样本类型 例子 主要验证
直接事实 某版本支持哪些格式 基础召回与引用
同义改写 “退订”对应文档中的“终止订阅” 语义召回
精确实体 错误码 E-2047、合同 8.3 条 关键词与混合检索
组合条件 地区、产品、日期与用户等级共同限定 过滤和完整性
跨文档 制度定义加产品例外 多跳与冲突处理
无答案 资料库从未说明的功能 拒答和转人工
对抗输入 要求忽略权限或输出隐藏提示 安全与越权

相关性标签也不应只有“相关/不相关”。可以区分:直接支持答案、提供必要限制、仅背景相关、版本错误、与当前用户无权访问。这样既能计算排序指标,也能发现“看似相关但不能用于结论”的危险片段。若某个问题有多个等价证据,标注时应覆盖所有可接受来源,否则检索器找到另一份正确文档也会被误判。

索引更新、删除与版本回滚

很多演示只展示首次导入,却忽略生产环境每天发生的新增、修订、撤回和权限变化。索引必须有稳定文档 ID、内容哈希、源版本和更新时间;更新时能够判断是新增片段、替换旧片段还是完全删除。只向向量库追加新版本,会让相互冲突的制度同时被召回。

  • 增量更新:只重算变化片段,但父标题、摘要或权限改变时要重算受影响的子片段。
  • 原子发布:先构建新索引快照并验证,再切换别名,避免用户查询到半新半旧状态。
  • 删除传播:源文档撤回后,同步删除全文、向量、缓存和派生摘要。
  • 回滚:保留上一个可用快照、嵌入模型和配置,质量回归时能快速恢复。
  • 新鲜度监控:比较数据源时间与索引时间,报警卡住的同步任务和孤儿片段。

切换嵌入模型通常需要全量重建索引,不能把不同向量空间的表示直接混在一起。蓝绿索引比原地覆盖更容易回滚;发布前应在新索引上重跑固定查询集,并比较召回、延迟、存储和费用。

如何计算延迟与成本预算?

一次 RAG 请求可能包含查询改写、多个检索器、重排、生成和验证。只看模型接口耗时会低估总延迟。建议为每个阶段记录开始、结束、输入数量、输出数量与缓存命中,并在追踪中关联同一个请求 ID。

阶段 主要成本 常见优化 不能牺牲的门禁
文档索引 解析、嵌入、存储 增量更新、内容哈希、批处理 删除和权限同步
查询改写 一次模型调用 简单查询跳过、缓存 实体与限制不得丢失
初召回 搜索请求与网络 过滤下推、索引分片 Recall@K
重排 候选数 × 评分 减少候选、批量评分 长尾关键证据不能误删
生成 输入/输出 Token 去重、压缩上下文、缓存 忠实度与完整性
验证 规则或额外模型调用 风险分级、确定性校验 高影响请求不得跳过

优化应建立在阶段数据上。例如 P95 延迟主要来自重排,就不应盲目更换生成模型;Token 成本主要来自重复片段,就先改去重与上下文组装。延迟和成本下降后,还要重新运行质量与安全回归,防止通过砍候选或跳过验证“优化”出更快的错误答案。

Late Interaction 与更多高级检索何时值得用?

普通双编码器把查询和文档各压成一个向量,速度快,却可能丢失细粒度词项匹配。ColBERT采用 Late Interaction,让查询 Token 与文档 Token 保留更细的交互后再聚合评分。它代表“召回速度—表示粒度—索引体积”之间的另一种权衡,而不是所有系统都应采用的标准答案。

只有当基线测出明确问题时,才应增加复杂度:精确术语和语义都重要可先上混合检索;初召回有正确候选但排序差,可加重排;跨文档全局主题明显失败,再评估 GraphRAG;多步骤工具问题才考虑 Agentic RAG。每增加一层,都要有对应的收益指标、故障降级和运维负责人。

常见问题

阅读任何 RAG 演示时,建议追问四件事:测试问题是否来自真实用户,正确证据是否人工标注,展示的是平均值还是长尾失败,以及引用能否回到原文的具体版本与段落。只有演示截图、没有查询集和失败样本,最多说明系统曾经答对一次,不能证明它已经具备稳定生产质量。若供应商只公布最终准确率,还应要求检索、权限、引用和成本的分层结果,并公开错误样本。

RAG 一定需要向量数据库吗?

不一定。小规模资料可以用全文搜索、内存索引或直接长上下文;结构化事实适合 SQL/API;包含错误码和型号的场景常需要 BM25。向量数据库只是语义检索的一种实现。

RAG 能完全解决 AI 幻觉吗?

不能。它可能降低缺少外部知识造成的错误,却会新增检索、版本、上下文、引用和权限等失败点。必须测答案忠实度并允许证据不足时拒答。

知识库文档越多,回答就越好吗?

不一定。重复、冲突、过期和低质量文档会恶化检索。覆盖率增加前,应先做版本治理、去重、权限和相关性评测。

Top-K 越大越好吗?

不是。更大的 K 可能提高召回,也会带来噪声、冲突、延迟和 Token 成本。应结合 Recall@K、重排效果和答案忠实度选择。

接入企业文档就能安全使用吗?

不能。要把 ACL 放入检索过滤,隔离文档中的提示注入,限制工具权限并审计日志。生成后再删除敏感内容通常太晚。

编辑复核与纠错记录

本文由兰塞 AI 编辑流程于 2026 年 7 月 18 日复核。旧稿把 RAG 称为让 AI 不再胡说的“终极方案”,并缺少检索、引用、权限和评测边界;本次依据 RAG 与 DPR 原论文、Anthropic Contextual Retrieval、Microsoft GraphRAG、Ragas、ARES、Corrective RAG 和 NIST 资料重写,建立“数据—检索—上下文—答案—引用—权限—运行”的逐层验收方法。本站的来源、更新与纠错原则见关于本站与编辑规范