⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

扩展:RAG 系统的诊断与优化 ​

在线 Notebook

对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。

所属章节: 第 6 章:LLM 应用

前置阅读: 6.3 RAG(检索增强生成)

RAG 优化不是不断增加组件,而是先定位答案在哪一步丢失。可以把系统拆成五个可测环节:候选召回、候选排序、上下文组装、答案生成和引用核验。

先建立可复现的评测集 ​

每条样本至少包含:

  • 查询;
  • 能支持答案的文档或片段标识;
  • 参考答案或必须出现的事实;
  • 无法回答时的预期行为;
  • 时间、权限或来源等过滤条件。

评测集应包含正常查询、关键词查询、需要跨片段组合的查询、知识库中没有答案的查询。没有这组样本,调整分块大小或 top_k 只能得到个别案例的观感。

E6.1 候选召回 ​

向量检索适合语义相近但措辞不同的查询;关键词检索适合编号、专有名词、错误码等精确词项。混合检索可以分别得到两个排序,再用倒数排名融合(RRF)合并:

RRF(d)=∑i1c+ranki(d).

c 是平滑常数,不是固定为某个值的规则。还可以使用带权融合,但权重需要在评测集上调整。

这一阶段关注“支持答案的文档是否进入候选集合”,常用指标是 Recall@K。若召回已经失败,后续更强的生成模型也无法补回缺失证据。

元数据过滤应表达查询中的真实约束,例如产品版本、文档生效日期和用户权限。它会缩小搜索范围,但错误或过严的过滤也会直接删除正确答案,因此要单独记录过滤前后的召回率。

E6.2 候选排序 ​

双编码器可以预先计算文档向量,适合大范围召回。交叉编码器同时读取查询和候选文本,通常只用于较小候选集的重排序,因为每个查询—文档对都要重新计算。

重排序是否值得加入,应比较:

  • Recall@K 或 nDCG 等排序指标;
  • 端到端答案正确率;
  • 单次查询延迟和计算成本。

不要预设交叉编码器必然提高最终答案质量。若召回集合缺少正确文档,或重排序模型与领域不匹配,它也可能没有收益。

E6.3 分块与上下文组装 ​

分块决定检索单元。较小的块容易定位局部事实,但可能切断定义、条件和例外;较大的块保留上下文,却可能混入无关内容。可从以下策略中选择实验起点:

  • 按标题和段落等原始结构切分;
  • 固定长度切分,并保留适量重叠;
  • 用小块检索,再返回它所属的较大父块;
  • 为表格、代码和问答对设计专门的切分规则。

上下文预算可以显式写成:

Bretrieval=Bmodel−Bsystem−Bhistory−Bquery−Boutput reserve.

在预算内选择片段时,同时考虑相关性、来源覆盖和重复内容。top_k、块大小和重叠长度都应通过评测集确定,不存在脱离语料和模型的通用最佳值。

长上下文模型也可能对不同位置的信息利用不均。可以比较相关证据放在开头、中间和结尾时的答案变化,但不要把某一种固定排列当作所有模型的规则。

E6.4 生成与引用核验 ​

生成阶段要明确三种行为:有证据时回答并引用来源;证据冲突时指出冲突;证据不足时拒绝猜测。输出中的引用标识应能回溯到实际送入模型的片段,而不是由模型自行编造。

“答案听起来正确”不足以说明 RAG 有效。至少分别检查:

层级要回答的问题可用证据
检索支持答案的片段是否被找到Recall@K、命中片段列表
排序正确片段是否排在可用预算内nDCG、MRR、上下文命中率
生成答案是否覆盖问题人工标注的答案正确率
忠实度每个事实是否有上下文支持事实—引用对齐检查
系统质量提升是否值得成本延迟、token、失败率

LLM 评审可以扩大评测规模,但应先用人工样本检查其判断标准和偏差,不能把单个自动分数直接当作事实。

E6.5 用消融实验确定收益来源 ​

一次只改变一个环节。例如保持生成模型和提示词不变,按以下顺序比较:

  1. 向量检索;
  2. 向量检索 + 关键词检索;
  3. 混合检索 + 重排序;
  4. 在最佳检索方案上调整分块和上下文预算。

每组实验保存配置、检索结果、最终答案和错误类型。这样可以区分“召回增加”与“生成碰巧答对”,也能发现质量提高是否伴随不可接受的延迟。

最低实践任务 ​

从自己的文档中准备至少 20 条查询,其中包含 3 条知识库无法回答的问题。固定生成模型,完成两组对比:

  1. 只用向量检索;
  2. 向量与关键词混合检索。

记录每条查询的命中文档、答案、引用和耗时,统计 Recall@K 与答案正确数,并人工归类至少三个失败案例。完成标准是能说明失败来自召回、排序、上下文还是生成,而不是只报告一个总分。

延伸阅读 ​

  • Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks。
  • Karpukhin et al., Dense Passage Retrieval for Open-Domain Question Answering。
  • Liu et al., Lost in the Middle: How Language Models Use Long Contexts。

返回: 第 6 章:LLM 应用

本教程采用 CC BY-NC-SA 4.0 许可协议