news 2026/9/27 1:54:23

【RAG 学习笔记 05】怎么证明你的 RAG 好用:评测、排查与三个进阶架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【RAG 学习笔记 05】怎么证明你的 RAG 好用:评测、排查与三个进阶架构

这是 RAG 学习笔记的第 5 篇,也是最后一篇。前几篇都在讲"怎么搭",这一篇讲**“怎么证明它好用、坏了怎么查、还能怎么升级”**。


本系列导航

  • 00 开篇:用「开卷考试」理解 RAG 与我的学习方法
  • 01 Chunking 切块与 Embedding 选型
  • 02 在线链路七步走与混合检索 RRF
  • 03 Rerank 与查询改写
  • 04 工程化:延迟、缓存、成本与权限
  • 05 评测调优与三个进阶架构(本篇)

一、评测集怎么建:来源按价值排序

优先级来源为什么
1真实生产查询(近 30–90 天分层采样)最贴近真实分布
2客服升级工单人工介入的问题正是难题
3事故报告边界案例已知会翻车的地方
4合成问题仅作兜底,且要标记区分

必须覆盖的问法:事实查找、总结、多文档推理、否定式提问、时效性问题、无答案样本。

举例:200 条评测集的构成——

  • 120 条真实查询
  • 50 条客服工单
  • 20 条边界案例
  • 10 条合成问题

关键:无答案样本占 10–15%,用来测拒答能力。

为什么必须有无答案样本?因为如果评测集里全是有答案的问题,系统就会"学会"编答案——它永远不需要说"我不知道"。这一条我印象极深。


二、Faithfulness vs Answer Relevance:两个指标别混

指标在问什么公式 / 含义
Faithfulness(忠实度)答案是否完全由检索上下文支持受支持声明数 / 总声明数
Answer Relevance(答案相关性)答案是否真正回应用户问题答案与问题的相关程度

举例:法律合同 RAG,用户问"合同解除后违约金怎么算"

  • 模型答"违约金按合同总额的20%计算",上下文里有这个条款 →Faithfulness = 1.0
  • 模型答"违约金按合同总额的30%计算",上下文里没有 →Faithfulness = 0

关键组合判断:

Faithfulness 高但 Relevance 低 → 说明检索内容偏题。

举例:用户问"退款要几天",模型回答"会员年卡权益包括……"——它说的都对(忠于上下文),但没回答问题,所以问题出在检索(召回的内容偏了)。

门槛:受监管行业(法律 / 医疗 / 金融)设0.98,低于则替换为拒答。

这两条我最后是这么记的:**Faithfulness 管"有没有编",Relevance 管"有没有答到点上"。**一个查生成、一个查检索。


三、效果差怎么排查:七问链路

按链路从上到下逐段排查:

  1. 资料库里有没有答案?(源头问题,最容易被忽略)
  2. Chunk 切分有没有切断关键信息?
  3. 召回 Top-K 里有没有正确文档?
  4. Rerank 后正确文档还在不在前面?
  5. 上下文有没有超长被截断?
  6. Prompt 是否约束了"只根据上下文回答"?
  7. LLM 是否忽略了上下文?

举例:技术文档 RAG,正确文档在召回 Top-50 里排第 35,Rerank 后仍未进 Top-10 → 定位为Rerank 模型不敏感→ 换领域微调 Reranker 后提升到第 2 名。

核心逻辑:

先查上游,再查下游。上游问题会传导到下游。

这七问是我觉得整份文档里"最像工程手册"的一部分。它把"效果不好"这种模糊抱怨,变成了七个可验证的假设——这是可以背下来直接用在面试里的东西。


四、三个进阶架构(加分项)

4.1 GraphRAG:解决多跳推理

问题:传统 RAG 是扁平检索,难以回答需要多跳推理的问题。

举例:用户问"张三的上级的上级是谁"

  • 传统 RAG:检索"张三的上级"→ 李四,再检索"李四的上级"→ 王五,需要两次;
  • GraphRAG:沿"汇报关系"边遍历两跳,直接返回王五。

代价:构图成本高、维护复杂。

4.2 Agentic RAG:让模型自己决定怎么检索

固定流水线Agentic RAG
行为检索一次 → 生成一次模型动态决定何时检索、检索什么、检索几次
举例(技术客服)正确率 0.78,延迟 1.2 秒先判断需要检索 → 发现质量低 → 自动改写查询 → 重新检索 → 正确率 0.89,延迟 2.5 秒

权衡:正确率+11 个百分点,但延迟翻倍。所以:

简单问题用固定流水线,复杂问题用 Agentic RAG。

4.3 多模态 RAG:CLIP 管图片,BGE 管文字

实现:

  • 索引:图片用CLIP做 Embedding,文本用BGE做 Embedding;
  • 检索:同时检索文本和图片;
  • 生成:多模态 LLM(GPT-4V、Qwen-VL)同时接收文本和图片。

CLIP 和 BGE 分别是什么?

  • CLIP:OpenAI 出的多模态模型,能把图片和文字映射到同一个向量空间。一张"按钮"的截图和文字"按钮"在向量空间里很接近,所以能用文字搜图片;
  • BGE:文本Embedding 模型,把文字变成向量。

举例:产品手册 RAG,用户问"这个按钮在哪"

  • 纯文本 RAG:正确率0.62
  • 多模态 RAG:检索到包含该按钮的截图 → 正确率0.85

五、实习面试速成路径(文档给的四周计划)

周目标内容
第 1 周建立框架背熟完整链路(离线 + 在线)、RAG vs 微调、Chunking / Embedding / 混合检索 / Rerank 基本概念
第 2 周深入核心RRF 公式与原因、双塔 vs 交叉、HNSW 的 M 与 ef_construction、查询改写的风险与兜底
第 3 周工程能力延迟优化、成本控制、多轮对话、权限控制、评测集建设
第 4 周模拟面试每个问题用"口述版"回答、准备 2–3 个项目举例、练习追问链应对

面试模拟(我练过的四问)

Q1:什么是 RAG?

“RAG 全称 Retrieval-Augmented Generation,核心是让大模型回答前先从外部知识库检索相关证据,再基于证据生成答案。链路分两阶段:离线做文档解析、切块、向量化、建索引;在线做查询改写、混合检索、Rerank、上下文组装、LLM 生成。我在上一家公司做企业客服 RAG,知识库 3 万篇产品文档,上线后客服人工介入率从 35% 降到 12%。”

Q2:Chunk_size 怎么定?

“没有固定最优值,必须在真实评测集上比较。常见起点 300/500/800 token,overlap 设 10–20%。我们做技术文档 RAG 时对比了固定 512、递归切分、语义切分三种策略,最终选递归切分,因为技术文档结构规整、标题边界比语义边界更可靠,Recall@10 达到 0.85。”

Q3:Rerank 为什么必要?

“召回阶段是双塔粗排,Query 和 Doc 独立编码,交互不充分;Rerank 用 Cross-Encoder 拼接后联合编码,精度更高但慢,所以只对少量候选精排。我们做法律合同 RAG 时,正确文档在召回 Top-50 里排第 35,Rerank 后提升到第 2,答案正确率从 0.62 提升到 0.89。”

Q4:检索为空怎么处理?

“三层处理:第一层放宽条件重试——降阈值、去过滤、启用 BM25 兜底;第二层明确拒答——Prompt 约束’上下文无相关信息时直接说未找到’;第三层追问用户澄清。高 stakes 领域应配置受控拒答,核心原则是宁可拒答,不可幻觉。”

最难的知识点总结(文档原表)

难点核心理解举例
RRF只看排名不看分数,避免量纲不一致BM25 和向量分数不可直接比较
Rerank双塔粗排 vs 交叉精排正确文档从第 35 名提升到第 2 名
HNSWef_construction >= 2*M否则图质量永久受损
Faithfulness受支持声明 / 总声明上下文有"20%",模型说"30%"则 = 0
查询改写把"它"还原成实体“它退款怎么算"→"会员年卡的退款条件”
多轮对话每轮 Query 必须自包含不能依赖上一轮文档
GraphRAG多跳推理“张三的上级的上级”

【此处有图:RAG 完整链路图(离线索引 + 在线检索生成 + 评测与兜底)】


六、我的下一步

文档最后给了四条动手建议,我打算照着做:

  1. 动手跑一遍:用 LangChain 或 LlamaIndex 搭一个最小 RAG,体验完整链路;
  2. 建一个小评测集:20 条问题,测 Recall@10 和 Faithfulness;
  3. 调一次 HNSW 参数:感受 M 和 ef_construction 对召回和延迟的影响;
  4. 模拟面试:找朋友问上面的问题,用"口述版"回答。

七、系列总结:RAG 到底在解决什么

回头把六篇串起来,我的整体理解是:

RAG 就是把"开卷考试"工程化:离线把书整理好(切块、索引),在线把问题问清楚(清洗、改写)、把书翻准(混合检索、Rerank)、把答案抄对(组装、生成、引用)。

而每一块的核心矛盾也很清楚:

环节核心矛盾平衡手段
切块块大→信息全但不精准;块小→精准但易断overlap、按结构切
检索字面匹配 vs 语义匹配混合检索 + RRF
排序快(双塔)vs 准(交叉)粗排 Top-50 → 精排 Top-5
生成上下文长→准但慢/贵只放 3–5 个 chunk、流式输出
安全答得多 vs 答得对拒答优先、检索期权限过滤

如果只让我记一句话,我会记这条:

上限在离线决定,效果在在线争取,可信度靠"会拒答"。

(本系列完)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 1:54:19

intj 人格解析

(一)推荐的电影1)社交网络2)模仿游戏3)教父4)黑暗骑士4.64 复制打开抖音,看看【INTJ 故弄玄徐 心理学的图文作品】五部电影让 INTJ 思维觉醒。# 歌曲独库公路G... https://v.douyin.com/o7UJvpW…

作者头像 李华
网站建设 2026/9/27 1:54:08

Ubuntu ARM64 安装向日葵远程控制的替代方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/27 1:53:41

医疗随访系统架构与落地实践:SIP+CTI驱动的院后闭环管理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/27 1:53:16

投资理财系统源码拆包实战:从环境搭建到核心模块与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/27 1:52:29

Qt串口通信实战:Keysight 34401A工业数据采集系统设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/27 1:52:27

C++17 filesystem 实战:路径拼接、目录遍历和错误处理

C17 filesystem 实战:路径拼接、目录遍历和错误处理 手工拼路径字符串容易混淆斜杠、目录和文件名。C17 的 std::filesystem 提供 path 与一组文件系统操作,让代码直接表达“路径”“文件大小”“遍历目录”等意图。最低标准:C17。下面示例只…

作者头像 李华