RAG 与向量数据库 · B 检索质量
0 / 8 章 ← 首页
贯穿案例 · 一家公司的客服知识库 序幕 · 十篇文档的原型 第二幕 · 答得不准,调质量 第三幕 · 一千万篇,扛规模 第四幕 · 上线,选型与实战 第五幕 · 活下去,更新与治理
01

切块 —— 别把答案切成两半

原型上线一周,客服反馈:企业版退款的问题经常答一半。排查发现不是模型的问题,是手册在切块时被拦腰截断,关键的「但是……不适用」落在了另一块里。

切块(chunking)是 RAG 里最不起眼、却最影响上限的一步:检索的最小单位是块。块太小,答案被切碎,每块都缺上下文;块太大,一块里混了好几件事,向量变成「平均意思」,检索变模糊,还多花 token。没有万能尺寸,要在自己的数据上量。

LAB 1.1 · 切块实验台问题:企业版订阅退款有什么条件?
橙色竖带 = 完整答案所在位置。「检索」用的是真实 BM25(对块集合重新算 IDF),取 top-2 块;覆盖率 = 这两块合起来盖住了多少比例的答案字符。

主流切法怎么选 —— 从单层到解耦

切法做法代表实现(如 LlamaIndex)什么时候用
固定长度每 N 个字符/token 一刀,保留前后重叠SentenceSplitter起步基线;结构混乱的纯文本
递归(结构感知)优先按标题、段落切,超长再按标点、换行切MarkdownNodeParser绝大多数 Markdown、手册的默认选择
语义 / 按主题相邻句子 Embedding 差异大处下刀,动态聚类SemanticSplitterNodeParser长篇叙述、访谈转录;计算慢,需权衡收益
句子窗口(解耦)单句做向量索引,元数据挂载前后 N 句上下文SentenceWindowNodeParser事实型问答、精准条款;高命中 + 完整语境
父子层级(解耦)多级切块(2048/512/128),小块命中向上合并HierarchicalNodeParser复杂合同、长篇规章;彻底根治跨段落逻辑割裂
进阶深潜现代 RAG 进阶切分全景:句子窗口、父子层级与 Late Chunking 架构图解 ▾

传统切分逼迫我们在「块太大检索不准」与「块太小上下文残缺」之间做两难妥协。以 LlamaIndex、Jina AI 为代表的现代工业界实践,通过解耦检索与生成单元以及颠倒嵌入时序打破了这一死局:

模式 1 · 单层一刀切 (Naive) 原始文档 (10K tokens) 物理切块 (Fixed/Recursive) 块 1 块 2 块 3 向量库与生成共用同一切片 送入 LLM 上下文 原样传递命中块 (200-500t) ⚠️ 困境:小了缺因果,大了搜不准 模式 2 · 句子窗口 (Sentence Window) 单句极精索引 (VectorStore) 每单句独立向量化 (30-60 字符) 元数据挂载周围窗口 (Metadata) 前文 [S1, S2] + 命中句 [S3] + 后文 [S4, S5] 命中单句只负责触发高灵敏召回 动态替换后送入 LLM 自动扩展为 5-7 句完整段落 ✓ 收益:检索极敏锐,阅读有语境 模式 3 · 父子层级 (Hierarchical) 父节点 Parent (2048 token) 存储于 DocumentStore (原稿) 叶子子节点 Leaf (128 token) c1(中) c2(中) c3 c4 同一父节点下多子块命中时... AutoMerging 向上合并 直接将完整父节点 Parent 送入 LLM ✓ 收益:兼顾段落严谨与宏观脉络
图 1.1 · 检索单元(向量索引)与生成单元(送入 LLM 上下文)的三种组织架构对比
1. 句子窗口检索(Sentence Window)

解决痛点:单句做 Embedding 时语义密度最高,不会被段落其他杂质稀释;但大模型答题只看一句往往断章取义。

LlamaIndex 实践:用 SentenceWindowNodeParser(window_size=3) 将单句存入向量库,前后各 3 句存入元数据。检索召回后,后处理器 MetadataReplacementPostProcessor 自动将单句替换成 7 句连续窗口送入提示词。

2. 父子层级切分(Hierarchical / Auto-Merging)

解决痛点:本页开篇“企业版退款关键限制落在另一块”,正属于跨段落长程依赖,单纯扩大滑动窗口极易爆 token 且引入噪声。

LlamaIndex 实践:用 HierarchicalNodeParser(chunk_sizes=[2048, 512, 128]) 构建多层树。向量库仅存 128 token 的叶子节点。当检索命中同一父节点的多个子块时,AutoMergingRetriever 自动折叠并向上传递完整的 2048 token 大块。

传统先切后嵌 (Early Chunking) · 注意力被物理阻断 块 1: 「张三是架构师...」 块 2: 「她审核退款申请...」 独立向量 1 独立向量 2 (失联) ❌ 跨块上下文断裂 两块分别通过模型,Transformer 的 注意力无法跨越物理块,「她」指代丢失 延迟切块 (Late Chunking · Jina AI) · 先全篇 Attention,再切片 Pooling 长文本整体输入 (8K Token Transformer,全局自注意力) Token 1:「张三」⟷ ⟷ ⟷ Token N:「她」(注意力深度交互) 切片 1 Mean-Pooling 向量 切片 2 向量 (自带前文语境!) ✓ 全局语境无损继承 切块发生在模型隐藏层输出之后, 保持短小向量的高检索精度, 却永久解决了跨块指代与断章取义
图 1.2 · 传统切块(物理阻断注意力)vs 延迟切块(全篇 Attention 后再 Pooling)机制对比
3. 延迟切块(Late Chunking · Jina AI 提出)—— 颠覆切分时序

机制颠覆:传统方法是「先切块,再单独计算各块 Embedding」,导致第二块中的“她”、“这项免责声明”与第一块的主语彻底绝缘。Late Chunking 利用现代长上下文 Embedding 模型(如 jina-embeddings-v3),先把整篇文档(如 8192 token)完整输入 Transformer;所有 Token 在多层自注意力机制中完成全局信息交互后,最后才在 Token 输出向量层按切块边界做 Mean Pooling。

核心收益:输出的依然是短小精准的切块向量,但每一个向量都天生浸润了全篇上下文,彻底治愈跨块代词指代丢失,且完全不需要调用大模型写背景摘要的额外开销。

让每一块自己说清「我是谁」

块一旦脱离原文,就失去了「我在哪份文件、哪一节」的信息。「但是已开通超过 5 个席位的账号不适用」单独看,不知道是什么产品的什么政策。解决这个问题的现代方案有两条主流路径:

路径 A · 外部补写语境(Contextual Retrieval):最便宜的版本是拼上标题路径(上面实验台的开关,不需要模型);更强的版本是让模型为每块前置写一两句背景说明,这就是 Anthropic 2024 年提出的 Contextual Retrieval,评测显示它把检索失败率降低了约 49%,叠加重排降低约 67%(代价是建库时每块多一次 LLM 调用)。

路径 B · 模型原生全局注意力(Late Chunking):如上方进阶架构所示,直接使用支持长上下文的嵌入模型整篇编码后再切片 Pooling,零额外 LLM 提示词调用成本,依靠模型内部注意力机制守住上下文。

✦ 本章通关条件
✓
能说出块太大和太小各自的代价,并让实验台里「完整答案落入同一块」且被检索到
查看参考答案
大白话

块太小像把一页纸剪成碎条,每条都读不懂;块太大像一整章当一张卡片,翻到它也不知道重点在哪。试着选「递归」、块大小 120~200,答案就在同一块里了。

专业版

小块:语义不完整、召回碎片化;大块:向量被稀释、噪声多、占用上下文预算。结构感知切分按文档层级优先保持语义单元完整;重叠用来缓冲边界损失但会膨胀索引。块前缀(标题路径或 LLM 生成的背景)同时改善 BM25 与向量两路。

02

嵌入模型 —— 2026 年怎么选

块切好了,下一步是选「翻译官」:把文字变成向量的嵌入模型。它决定了「意思相近」这件事被量得准不准。

过去两年最大的变化有两个。一是开源追上并超过了不少闭源 API:Qwen3-Embedding-8B 曾在 MTEB 多语言榜上排第一,开源嵌入不再只是「省钱的备选」。二是大模型底座的嵌入更强但更贵:参数量上去,质量涨,延迟和存储成本也跟着涨(2026 年有论文专门讨论这个取舍,见参考资料)。选型的核心就是在质量、语言、长度、成本、部署方式之间找平衡点。

开源 · 多语言Qwen3-Embedding 系列

阿里通义,提供 0.6B / 4B / 8B 多种尺寸。8B 曾登顶 MTEB 多语言榜。小尺寸适合自部署控成本,大尺寸追质量。

开源 · 三合一BGE-M3

智源出品,支持 100+ 语言、8192 token 输入,一次前向同时输出稠密、稀疏、多向量(ColBERT 式)三种表示,混合检索可以只用一个模型。

闭源 APIOpenAI text-embedding-3 等

开箱即用、按量计费。text-embedding-3 支持用 dimensions 参数截断维度。Cohere、Voyage、Google 等厂商也有各自的嵌入服务,以官方文档为准。

评测榜单MTEB 与你的数据

榜单只能帮你缩小候选范围。榜上第一的模型在你的业务语料上不一定第一:用 50~100 条真实问题自己标注一遍,比读十篇评测更可靠。

选型清单(按顺序问)

  • 语言:中文为主的语料,优先看对中文有专门优化或多语言榜靠前的模型。
  • 最大输入长度:块比模型上限长,尾部会被悄悄截掉(和重排器的坑同一类)。
  • 查询与文档是否需要不同前缀:不少模型要求给查询加指令、给文档加另一种前缀,漏了不报错,只是悄悄变差。
  • 能否自部署、许可是否允许商用:数据不能出境或量很大时,自部署才划算。
  • 维度与存储:直接决定向量库的内存账(下面的实验和 C 页第 1 章)。
LAB 2.1 · 维度的存储账Matryoshka:模型训练成「前 N 维也能用」,可以截断
只算向量本身(float32 = 4 字节/维),不含索引和元数据,HNSW 图索引通常再多出可观的内存。截断维度后质量会下降多少取决于模型和数据,必须自己测;并且只有训练时做过 Matryoshka 的模型才能安全截断。
✦ 本章通关条件
✓
能列出选嵌入模型时要问的 4 个问题,并估算 1000 万条 1024 维向量的原始大小
查看参考答案
大白话

先问会不会说中文、能读多长的块、要不要特殊的提问格式、能不能放在自己机房里。再算账:1000 万条 × 1024 个数 × 每个数 4 字节,大约 41 GB,光放着就要这么多内存。

专业版

语言覆盖、最大 token 长度、查询/文档指令前缀、部署与许可、维度与存储。10⁷ × 1024 × 4 B ≈ 40.96 GB(不含索引与元数据)。榜单分数只作候选筛选,最终以自有标注集的 recall@k 为准。

03

混合检索与 RRF —— 两份名单怎么合并

A 页已经看到:BM25 和向量各有盲区,必须双路并进。但 BM25 吐出的分数是 14.8,向量吐出的余弦是 0.89,两份完全不同量纲的名单,怎么合才不失真?

直接把两路分数相加绝对行不通:这就像让两位打分风格迥异的评委共同评审一场歌手比赛:

  • 评委 A(BM25 · 严苛粗放):按关键词词频算分。命中生僻错误码可以打出 35 分的高分,普通词只给 1.2 分,分数上不封顶、大起大落;
  • 评委 B(向量 · 内敛保守):按余弦相似度算分,所有候选文档的分数往往全挤在 0.81 到 0.89 之间,差 0.01 都隔着好几个身位。

如果把分数直接相加,BM25 会完全淹没向量;如果做 Min-Max 归一化(缩放到 0~1),只要 BM25 某次只查出一条孤立结果,那一条就会被直接拉到满分 1.0,导致排名极度脆弱。RRF(Reciprocal Rank Fusion,倒数排名融合)的大智慧是:不问评委各自打了多少分,只看在各自眼里排第几名!

疑问 01 为什么不按名次直接相加?

如果按「第 1 名 + 第 2 名 = 3 分」排,一旦某篇文档在 BM25 没搜出来(未上榜),它该算第几名?排第 10000 名吗?名单长度不一时,名次相加直接瘫痪。

疑问 02 为什么要取「倒数」(1 / r)?

倒数自然地把「名次」转化为「得分」:第 1 名拿最大分,名次越靠后衰减越快。未上榜的文档排名无穷大,倒数得分为 0,天然包容两份长短不一的名单!

疑问 03 为什么要加神秘常数 k=60?

防止极端偏执!若不加 k(k=0),第 1 名得 1.0 分,第 2 名得 0.5 分,第 1 名是第 2 名的整整两倍(一票否决权)。加上 60 后变为 1/61 与 1/62,头部差距被温和抚平,让两路都觉得不错的候选稳健胜出。

偏科生 · 单极极值 文档 A · 关键词狂喜但离题

BM25 极度偏爱排 第 1 名,但向量模型觉得语义毫无关联,只排到 第 30 名。

RRF 得分 = 1/(60+1) + 1/(60+30) ≈ 0.01639 + 0.01111 = 0.02750

结论:虽然在一路夺冠,但在另一路太拉胯,最终综合得分被拉低。

双科优等生 · 稳健登顶 文档 B · 两路都高度认可(胜出!)

BM25 表现良好排 第 2 名,向量语义也十分贴近排 第 3 名。

RRF 得分 = 1/(60+2) + 1/(60+3) ≈ 0.01613 + 0.01587 = 0.03200

结论:得分高于文档 A!“宁选两个人都觉得挺好的,不要选一个狂热、另一个鄙视的”。

LAB 3.1 · RRF 调参台和「加权分数」对照着看
试试 E2001 磁盘满了:BM25 只有一条结果,min-max 归一化会把它直接拉到满分 1.0,而 RRF 仍只给它「第 1 名」该得的 1/(k+1)。再拖动 k:k 越小,头部名次差距越大,k 越大,各名次越接近。

工程总结:公式写为 score(d) = Σ wᵢ / (k + rankᵢ(d))。k=60 来自 RRF 原论文(Cormack 等,2009 SIGIR),十几年来已是各类混合检索与向量库的事实标准;除非你有大量标注数据专门拟合,否则保持默认 60 即可。权重 wᵢ 则根据场景调节:代码、型号等专有名词多的场景,适当调大 BM25 权重;口语化和长意图场景,调大向量权重。

✦ 本章通关条件
✓
能手算一次 RRF,并说明它为什么比「分数直接相加」稳
查看参考答案
大白话

两个评委打分尺度不同,一个满分 100、一个满分 5,直接加分就不公平。RRF 只问「你在每个评委那儿排第几」,排第 1 的拿 1/(60+1),排第 3 的拿 1/(60+3),加起来。两个评委都喜欢的,一定在前面。

专业版

score(d) = Σᵢ wᵢ / (k + rankᵢ(d))。例:某文档在 BM25 第 1、向量第 3,k=60:1/61 + 1/63 ≈ 0.0323。只依赖名次,因此不需要校准不同检索器的分数分布,对离群分数、单条结果都稳健。

04

重排 —— 先广撒网,再精挑细选

混合检索把候选召回到 top-50,但前几名的顺序仍然粗糙:向量只用「一个点」代表整块文字,细节被压没了。重排(rerank)是第二道工序,用更贵但更准的模型,只对这 50 条重新打分。

为什么不一开始就用这个准的模型?因为它要把问题和每个候选放在一起读,没法提前算好、没法建索引,对一千万条逐条读一遍不现实。所以才分两段:第一段便宜、广泛、追求别漏(召回),第二段昂贵、小范围、追求排准(精排)。

候选集被粗筛缩小到了 50 条,接下来的工程抉择是:模型到底以什么方式给这 50 条重新排座次?是一对一单挑精读?还是轻量比对?还是打包在一起集体比选?工业界在「极致精度(深度交互)」与「计算成本(延迟与算力)」的持续博弈中,演化出了三大主流技术流派:

重排的三大技术流派:在「精度」与「速度」间走出的三条路

流派 1 · 交叉编码器(Cross-Encoder) 核心动机:追求极致准度 · 同卷对照精读

考官把「问题 + 候选文档」印在同一张卷子上,从头到尾一字一句连着读,模型内部注意力全开。最准,连微小的“不适用”、“除非”等否定词也能敏锐识别;但计算最耗时,对 50 条候选要跑 50 次完整模型推理。

流派 2 · 晚交互(ColBERT 式) 核心动机:解决速度太慢 · 各画圈圈,临场连连看

文档入库时,提前给文档里的每个词各算一个向量离线存好;查询时,只对问题的词做轻量配对求和(MaxSim)。速度极快且文档可提前预计算,但词级向量会让存储开销翻倍。

流派 3 · 大模型列表式(Listwise) 核心动机:大模型时代的全局比选 · 全员上台,同台比选

前两派都是盲人摸象式的一对一单挑打分;列表式则是直接把 20 篇候选打包成一张大清单塞给模型,一眼通览直接排出 1 到 20 名。具备全局比较视野,能识别重复和互补信息;现代专用列表重排器单次前向直接出整批结果,吞吐暴增。

2026 现代主流重排模型地图

搞清了这三大流派的思想,在实际工程落地中,我们通常不需要自己从头训练,而是直接选成熟的开源模型或托管 API。当前工业界的主流选择高度分化:

模型家族代表版本类型与部署特点与核心场景
BGE-Reranker 系列bge-reranker-v2-m3 / large开源(自部署)开源中流砥柱。北京智源出品,多语言极强,配对 BGE-M3 嵌入模型,是企业自建/私有化知识库的首选。
Cohere Rerank 系列rerank-v3.5商业 API(全托管)企业级精度标杆。支持 100+ 语言与 4K+ 上下文,免 GPU 运维,对各类复杂语料调校极深,商业 RAG 的开箱首选。
Jina Reranker 系列jina-reranker-v3开源 / API超长窗口与列表式极速。支持 8K 甚至 32K token,利用列表式(Listwise)并行打分,大候选集重排吞吐极高。
Qwen-Reranker 系列qwen3-reranker (4B/8B)开源(自部署)大模型底座推理。阿里通义开源,由大语言模型底座深度蒸馏,对深层逻辑推断、中文行话、长因果链的重排能力极强。
避坑指南 · 静默截断不少经典开源重排器的输入上限只有 512 token(如早期 bge-reranker-large),而 Cohere / Jina 已扩展至 4096~8192 token。如果切块长度超过重排器上限,超出部分会被悄悄丢弃且不报错!如果关键答案恰好落在后半段,重排器会给出极低的分数。选型时务必检查:块长度 + 问题长度 ≤ 重排器最大输入窗口。
实践顺序先把混合检索的 recall@50 做上去(别漏),再加重排把 precision@5 做上去(排准)。反过来,没召回的东西,重排器再强也救不回来。重排会增加延迟,上线前量一下 p95。
✦ 本章通关条件
✓
能解释为什么要分「召回 + 重排」两段,并说出交叉编码器与列表式重排的取舍
查看参考答案
大白话

像招聘:先用简历粗筛从一万人里捞出五十人(便宜快速、宁多勿漏),再一个个面试排出前五(昂贵精细,但只面五十人)。交叉编码器是逐个单面,打分最准;列表式是把几十个人拉进一个群里同台比选,速度更快、还能识别重复与互补。

专业版

召回阶段用可预计算的向量/倒排索引,复杂度与语料规模次线性;精排阶段对 top-N 做高算力消耗的重打分。Cross-Encoder 具备全注意力交互精度最高但 O(N) 较慢;Listwise 一次前向评估候选集合吞吐更高且具备全局上下文感知。

05

改写问题 —— 用户的问法往往不是最好的检索词

用户一句话里塞了三件事,或者问得很口语。直接拿原句去检索,向量会被「平均」成一个模糊的方向。第三条路是先让模型把问题改写成更好检索的样子。

LAB 5.1 · 多意图问题:直接检索 vs 拆开检索用的是 A 页同一个玩具知识库
直接检索时,三个意图在向量空间里被求平均,结果只剩一个主题(账单);拆成子问题后各自检索,再用 RRF 合并,三个意图的文档都回来了。这是玩具模型的放大版,真实嵌入模型里「多意图被稀释」同样存在,只是程度不同。
技术做法适合代价
问题分解把复合问题拆成几个子问题,各自检索再融合多意图、多跳问题多一次模型调用 + 多次检索
多查询(multi-query)让模型把同一问题改写成 3~5 种问法,各自检索再 RRF用户措辞和文档措辞差距大检索次数 ×N,延迟上升
HyDE先让模型写一个「假想答案」,用它去检索(答案和文档更像)问题很短、很抽象模型可能写错,污染检索方向
退一步(step-back)先问一个更宽泛的问题检索背景知识,再回答具体问题问题过于具体、需要原理背景多一轮检索,上下文变长

2026 年的做法是把它们折进「自适应」或 Agent 流程:先判断问题复杂度,简单问题直接检索,复杂问题才拆分或多轮检索。改写没有免费午餐:每多一次模型调用就多一份延迟和成本,先从 multi-query + RRF 这个最稳的组合起步。

✦ 本章通关条件
✓
能说清「多意图问题直接检索会怎样」,并说出至少两种改写技术和各自代价
查看参考答案
大白话

一句话里有三个诉求,检索时只会朝「平均方向」找,通常只找回其中一件事。拆开问、各自找、再合并,三件事都能找到。代价是多问几次,更慢更贵。

专业版

复合查询的嵌入是各意图的混合,近邻只覆盖主导主题。问题分解 / multi-query 增加查询多样性换取召回;HyDE 用假想答案缩小「问句 vs 陈述句」的分布差;step-back 引入背景。均以额外 LLM 调用与检索延迟为代价。

06

评估 —— 用数字回答「到底准不准」

调了切块、换了模型、加了重排,直觉上感觉“好像变灵光了”。但「感觉」不能作为发布上线的依据,也没法在版本迭代中防止退步。RAG 系统的调优,本质上是“以评促改”——必须把质量拆解成客观可衡量的数字。

排查铁律:先检索,后生成

当用户抱怨“系统答得不对”时,很多团队的第一反应往往是“换个更大更贵的模型”。这是最常见的误区。RAG 系统有两个完全独立的失败环节:

  • 检索死穴(巧妇难为无米之炊):包含正确答案的切块压根没被检索出来,或者被挤在 top-k 之外。大模型连参考资料的影子都没看见,只能凭空猜测。
  • 生成死穴(视而不见与信口雌黄):关键材料已经送进了 Prompt,但大模型产生了幻觉(无中生有)、漏看了限制条件,或者答非所问。

排查铁律:先查检索层,再查生成层。若正确的切块根本没进 top-k,生成模型再强也无力回天。因此,工业界将评估明确划分为两大部分:检索层硬指标(基于确定性标注,靠数学公式硬算)与生成层软指标(基于自然语言理解,由大模型当裁判打分)。

检索层的四大硬指标:从及格线到黄金 C 位

检索层评估的是「该找的材料有没有找齐、排得靠不靠前」。在建立好测试题库(标注了每个问题对应的标准参考切块)后,通过以下四个数学指标衡量:

1. Recall@K(召回率 · 及格线) 核心问询:该找出的关键证据,找齐了吗?漏网之鱼多不多? 计算:前 K 条检索结果中的相关块数 / 库中总相关块数

通俗理解:知识库里藏着 4 处关键凭证,前 5 条捞出了 3 处,Recall@5 = 75%。它决定了系统的能力天花板。粗排/召回阶段通常盯紧 Recall@50,宁可多带点杂质,绝不能把答案漏掉。

2. Precision@K(准确率 · 纯净度) 核心问询:端给大模型的材料里,真金占几成?废话多不多? 计算:前 K 条检索结果中的相关块数 / K

通俗理解:抓出 5 条材料供模型阅读,其中只有 2 条有用,Precision@5 = 40%。虽然模型上下文越来越大,但杂质过多会引发“迷失在中间”(Lost in the Middle)并严重浪费 token。精排后通常盯紧 Precision@5。

3. MRR(平均倒数排名 · 首位惩罚) 核心问询:抓回来的第 1 个正确答案,排在第几名? 计算:1 / 首次命中相关文档的名次

通俗理解:第 1 个真答案排第 1 名得 1 分,排第 2 名得 0.5 分,排第 10 名只有 0.1 分。大模型极度容易被前几条材料“先入为主”带偏。MRR 对单意图问答系统非常敏感,要求排头兵必须过硬。

4. nDCG@K(归一化折损累计增益 · 黄金 C 位度) 核心问询:最硬核的顶级参考资料,有没有稳坐最前排? 计算:按对数衰减惩罚名次折损,再除以理想最优排序得分

通俗理解:经典搜索引擎与精排推荐的核心标杆。命中相关文档有奖励,但排在第 1 名的奖励远高于第 5 名。它衡量整个 top-K 排序质量是否兼具“命中率”与“高价值前置”。

LAB 6.1 · 检索指标计算器点击下方条目,切换是否相关,观察指标实时变化
Recall@k = 前 k 条里的相关数 / R;Precision@k = 前 k 条里的相关数 / k;MRR = 1 / 第一条相关的名次;nDCG@k 在此用二元相关:名次越靠前的相关项权重越大(1/log₂(名次+1)),除以理想排序的得分。

生成层与端到端指标:LLM-as-a-Judge 与 RAG 三元组

检索材料可以靠数学硬算,但最终大模型生成的自然语言回答千变万化,既无法做文本绝对匹配,也无法靠关键词统计。2026 年的主流解法是 LLM-as-a-Judge(大模型充当裁判):使用能力更强、更中立的高阶大模型,输入严格的评分量表(Rubric)与思考链(CoT),对生成质量打分。

业界最经典的评估基石是 RAG 三元组(RAG Triad),它紧扣用户提问(Query)、检索上下文(Context)、模型回答(Answer)三者之间的闭环关系:

1. 真实忠实度(Faithfulness) 防范幻觉 · 回答 vs 上下文

核心审问:“回答里的每一句话,能否在检索出来的材料里找到白纸黑字的证据?”

裁判模型把回答拆分成单句陈述,逐句去参考材料里“核对证据”。哪怕回答再通顺,只要资料里没写,就判定为捏造扣分。这是防止法律合规翻车的红线底线。

2. 答案切题度(Answer Relevance) 防范答非所问 · 回答 vs 用户提问

核心审问:“回答有没有正面回应提问者的真实诉求?有没有避重就轻打太极?”

裁判模型根据生成的回答,反推“提问者可能问了什么”,比对反推问题与原问题的语义重合度。如果用户问“如何退款”,回答却滔滔不绝讲公司历史,即便完全忠于材料也是低分。

3. 上下文相关度(Context Relevance) 防范杂质过载 · 上下文 vs 用户提问

核心审问:“检索器抓回来的这堆材料,对解答用户的问题到底有没有帮助?”

排查检索层是否存在严重的“题文无关”。如果检索器拉回来的切片全是噪音,即使模型硬着头皮答对,也是低分。它连接了检索层与生成层,检验上下文有效利用率。

除了三元组,2026 年企业落地普遍结合 G-Eval(基于思维链的业务自定义评分):针对具体业务量身定制评分量表,例如:客服回答的专业语气与同理心、免责声明是否齐备、敏感保密信息审查、面对无答案问题是否安全拒答,由裁判模型输出 1~5 分及详细的采分理由。

2026 业界评估版图:主流开源框架与商业 SaaS

2026 年的工程界已经彻底告别了“手工在测试页面里随便搜两句”的作坊阶段,形成了从算法实验、本地 CI 门禁到线上生产监控的成熟工具链:

工具 / 平台阵营与形态核心杀手锏与特色适用阶段与场景
DeepEval
Confident AI
开源 Python
单元测试流
Pytest 原生集成。像写普通单元测试一样写 RAG 评测(assert_test);内置 14+ 种指标(G-Eval、幻觉检测、RAG 三元组),原生支持 GitHub Actions 门禁。 研发本地流水线与 CI/CD 门禁首选。最契合以代码库和 PR 为核心的工程团队。
Ragas
Exploding Gradients
开源 Python
算法与题库合成
学术鼻祖与合成测试集。首创 RAG Triad 指标;核心杀手锏是 Testset Generator,可用 Multi-Agent 针对文档库全自动合成简单事实、多跳推理、边界例外测试题。 算法调优与冷启动评测。项目初期缺乏人工标注集时,自动合成黄金题库。
Arize Phoenix / Langfuse 开源可私有化
OTel 链路追踪
全链路 Trace 观测与影子评估。基于 OpenTelemetry 记录从 Embedding、向量库召回、Prompt 拼装到 LLM 回复的完整链路;支持离线评测与线上采样异步评估。 生产环境全链路监控与合规场景。重视数据隐私、需要私有化自部署的企业首选。
LangSmith / Galileo 商业 SaaS
企业全生命周期
开箱即用的大一统协同平台。支持产品/运营团队无代码协作标注、Prompt 线上 A/B 测试、在线安全护栏(Guardrails)与多维度监控看板。 中大型企业与跨团队协作。产研运需要协同质检、预算充裕且希望快速交付投产。
2026 选型法则:黄金组合拳自建工程团队的主流实践是:研发与 CI/CD 门禁采用 DeepEval / Ragas,线上全链路可观测与排障采用 Langfuse / Phoenix。这套全开源组合既保障了代码迭代质量,又保留了数据私有化与零额外 SaaS 订阅成本。

工业级 RAG 评估工程落地三步法

许多团队之所以 RAG“越改越心虚、改了这个崩了那个”,根本原因是没有将评估固化为研发流水线。2026 年工业级团队的标准落地作业流分为三步:

阶段一 · 造题 构建黄金测试集(Golden Dataset)

拒绝凭感觉随机抽问。利用 Ragas / DeepEval 工具,从企业文档库中自动合成 100~200 道测试题,覆盖「直接事实题」、「跨文档多跳推理题」、「边界例外题」以及「库中无答案的诱导题」。由业务专家花费半天时间精审校对,固化为系统专属的黄金测试基准集。

阶段二 · 守门 CI/CD 自动化回归门禁(Regression Gate)

将评测脚本接入 GitHub Actions / GitLab CI。任何人修改了切块大小、更换了 Embedding 维度、调节了重排阈值,提交 PR 时自动跑黄金集。若 Recall@5 环比下降超过 2%,或 Faithfulness < 90%,CI 亮红灯直接拦截合并。杜绝暗中退步与负向优化。

阶段三 · 盯盘 线上链路监控与错题自进化(Shadow Eval)

生产环境接入 Langfuse / Phoenix,对线上真实流量进行 5%~10% 的影子异步抽检,后台由轻量裁判模型打分。用户在线上的每一次“点踩、重问、放弃复制”,系统自动将该 Session 打标归档至“线上错题本”,作为下一期测试集补充,实现自进化闭环。

✦ 本章通关条件
✓
能说清检索硬指标(Recall/MRR/nDCG)与大模型软指标(RAG 三元组)的分工,并说出工业级 RAG 的 CI/CD 评估流
查看参考答案
大白话

检索指标看「材料找得全不全、排得前不前」(数学硬算);生成指标看「有没有乱编幻觉、答得跑不跑题」(大模型当裁判)。出问题先查检索再查生成。上线前用黄金题库在 CI 跑自动化测试,不达标不准发布。

专业版

检索层依赖黄金标注集硬算 Recall@k(覆盖率)与 nDCG@k(排序增益);生成层用 LLM-as-a-Judge 评估 RAG Triad(Faithfulness 忠实度防幻觉、Answer Relevance 切题度、Context Precision 纯度)。工程化通过 Ragas/DeepEval 合成测试集并在 CI/CD 中设立回归门禁,结合 Langfuse 进行线上链路追踪与抽检。

07

终极测验 · 5 题验收

答对 4 题以上,才算把「检索质量」这一页带走。

✦ 本章通关条件
✓
终极测验 5 题答对 ≥ 4(答完自动勾选)
08

参考资料 · References

博客类来源标为「观点」,具体数字(榜单、上限、成本)会随版本变化,请以官方文档为准。

原理出处

  • Anthropic, Introducing Contextual Retrieval(2024,块前缀 + 混合检索 + 重排的失败率数据)· anthropic.com/news/contextual-retrieval
  • Cormack, Clarke & Büttcher, Reciprocal Rank Fusion outperforms Condorcet and individual Rank Learning Methods(SIGIR 2009,RRF 与 k=60)
  • Khattab & Zaharia, ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT(2020)· arxiv.org/abs/2004.12832
  • Es et al., RAGAS: Automated Evaluation of Retrieval Augmented Generation(2023)· arxiv.org/abs/2309.15217

2026 年的资料

  • RAG Best Practices 2026: Chunking, Reranking, Hybrid Search(观点,含重排器截断上限)· callmissed.com
  • 8 Embedding Models Compared for Production RAG [2026 Benchmark](观点)· tensoria.fr
  • Best Open-Source Embedding and Reranker Models 2026(观点,Qwen3-Embedding / BGE-M3)· builderai.tools
  • The Embedder's Dilemma: LLMs Are Better, but at What Cost?(2026,论文)· arxiv.org/pdf/2608.12875
  • Reranking for RAG Explained: Cross-Encoders & More (2026) · dataaspirant.com
  • Hybrid Search with Reranking · Qdrant 文档 · qdrant.tech
  • RAG Evaluation: Metrics, Tools, and the Context Gap (2026)(第五维度:上下文可信度,观点)· atlan.com
  • DeepEval: The Open-Source LLM Evaluation Framework(Pytest 集成与生产 CI/CD 门禁)· confident-ai/deepeval

本页 BM25 为标准公式(k1=1.2,b=0.75);实验台里的「向量」为教学玩具模型,MaxSim 矩阵为示意值。

下一页 · C 向量库内核
暴力搜索的账单 · IVF 与 HNSW 怎么找得又快又准 · 量化把 4KB 压到 136B · 过滤与新鲜度
→