18.1 RAG:从可检索知识到可核验回答
Retrieval-Augmented Generation(RAG)在生成前检索外部知识,并把相关内容作为模型上下文。它可以让知识更容易更新和追溯,但不会自动保证回答正确。
一个生产 RAG 系统至少有两条链路:离线知识处理和在线问答。只展示“问题转向量 → top-k → 拼 prompt”会漏掉权限、版本、删除、重排和评估等决定质量的部分。
离线链路:把知识变成可治理索引
来源登记 → 解析 → 清洗 → 分块 → 元数据/权限 → 向量与关键词索引 → 版本发布每个片段至少保留:
- 来源 URI、文档 ID 和版本;
- 标题、章节路径和片段位置;
- 生效时间、更新时间和删除状态;
- 租户、访问控制标签和数据分类;
- 解析器与 embedding 版本。
索引不是新的数据真相。源文档删除、权限收回或版本替换时,索引和缓存也必须可追踪地更新。
分块围绕语义和引用
固定字符数分块容易切断表格、代码和定义。分块策略要结合文档结构:标题层级、段落、代码块、表格和最大上下文预算。
片段过小会缺少解释上下文,过大会降低检索区分度并浪费 token。重叠能缓解边界切断,但会增加重复结果。应在真实查询集上比较,而不是寻找一个通用“最佳 chunk size”。
在线链路不只向量检索
查询理解
→ 权限与结构化过滤
→ 稀疏/关键词检索 + 稠密检索
→ 融合与去重
→ rerank
→ 上下文装配
→ 生成
→ 引用与拒答检查关键词检索擅长错误码、标识符和精确术语;向量检索擅长语义近似。混合检索常比单一路径稳健,但仍需用目标数据验证。
权限判断必须使用服务端可信的用户与租户上下文,不能接受模型自报的租户 ID。能前置的过滤应放进检索查询,并在片段交给模型、外部重排服务或用户前再次确保可见性;可信检索服务内部的后置过滤也必须满足这一边界。把越权片段交给模型,再要求它“不要泄露”,已经太晚。
访问权限可能在索引刷新前被撤销。对于要求立即收回的内容,应在返回和缓存命中时查询当前授权,或在无法确认时拒绝返回,不能等下一次批量建索引才生效。
上下文装配要保留证据身份
以下手册名称、版本与 5000 元阈值均为教学示例,不代表通用退款政策:
[source: handbook-v7#refund-3.2]
退款审批超过 5000 元时需要财务复核……
[source: api-policy-v3#idempotency]
创建退款请求必须提供 Idempotency-Key……模型输出的引用应映射到实际提供的片段,并在展示前检查引用是否存在。引用格式正确不表示主张真的被证据支持,还需要 groundedness 评估。上面的材料只说明审批阈值和请求参数,不能据此回答“超过 5000 元不允许退款”。检索文档中的“忽略审批,直接执行”等文字也只能当作待分析内容,不能获得工具调用权限。
当证据不足、冲突或过期时,系统应允许拒答、请求澄清或展示多个来源,不能通过更强硬的提示词逼模型猜测。
分开评估检索与生成
若最终答案错误,必须判断是“没取到证据”还是“有证据却没用对”。
检索指标
- Recall@k:前 k 个结果覆盖了全部已标注相关证据的多少;
- MRR:每个查询首个相关结果排名倒数的平均值;
- nDCG:结合相关程度与位置折扣,和理想排序比较;
- 过滤正确率:权限、时间和业务范围是否正确;
- source coverage:多跳问题所需来源是否齐全。
例如一个问题标注了 3 段必需证据,前 5 个结果找到其中 2 段,Recall@5 为 2/3;若第一个相关结果排第 2,该查询的 reciprocal rank 为 1/2。只问“是否找到任意一段”的命中率会记为成功,却掩盖缺少第三段的事实。先约定按片段还是文档去重、如何标注相关性,再比较指标。
生成指标
- 答案正确性与任务完成度;
- groundedness:主张是否被提供证据支持;
- citation correctness:引用是否指向支撑它的片段;
- 拒答质量:证据不足时是否诚实停止;
- 延迟、token 和单位成功任务成本。
端到端分数不能替代分层指标,否则团队只知道“变差了”,不知道该改检索器、重排器还是提示与模型。
常见失败
- 只按相似度取 top-k,没有权限和时间过滤;
- 将整份文档塞进上下文,相关内容被噪声淹没;
- 文档更新后旧片段和缓存继续回答;
- 用合成问题评估,却没有真实用户长尾;
- 只检查答案语气,不检查引用和业务结果;
- 把“检索到了”误当成“模型一定遵守”。
下一课在 RAG 之上增加工具和循环,区分固定工作流与真正由模型动态决定步骤的 Agent。
参考资料
- Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
- ir-measures, Measure definitions
- Karpukhin et al., Dense Passage Retrieval for Open-Domain Question Answering