数据处理与知识库
本节要解决什么问题
LLM 的知识有两条来源:一是训练时内化进模型权重里的知识,二是推理时通过上下文临时注入的外部知识。RAG(Retrieval Augmented Generation)解决的是第二条路的问题:如何把私有数据在推理时有效地注入 LLM 的上下文,让模型能回答与私有知识相关的问题。
但 RAG 不只是"检索 + 生成"这么简单。本节会拆解 RAG 的完整流程,尤其是常被忽视的一环——Rerank:为什么向量检索还不够用,为什么需要再用模型做二次排序。
RAG 的完整流程
用户问题
↓
向量检索(Recall:快、粗、"别漏")
↓
Rerank(精排:慢、准、"选对")
↓
LLM 阅读上下文 + 生成答案
第一步:向量检索——解决"可能相关",不是"最相关"
向量检索(Embedding + ANN 索引,如 FAISS、Milvus、Qdrant)的本质是一个近似最近邻(ANN)搜索:
- 用户问题 → Embedding 模型 → 向量
- 文档 → Embedding 模型 → 向量
- 用余弦相似度或点积找出最接近的 K 个文档块
向量检索的目标是 Recall(召回率),不是 Precision(精确率)。 它优化的是"不要漏掉可能有用的内容",而不是"排第一的一定最好"。
向量检索的天然缺陷
向量相似度有三个结构性问题,导致它天然不等于相关性:
1. Embedding 训练目标不是"回答问题"
Embedding 模型(如 bge、e5、text-embedding-3)的训练目标是语义相似性,而不是"这段文本是否直接回答了这个问题"。它学的是"像不像",不是"对不对"。
2. 向量是压缩表示,丢失了判断细节
一段 100~1000 token 的文本被压缩成 768~1536 维的向量。在这个过程中:
- 条件消失("不包含 Redis"、"A 且 B 但不 C")
- 否定被稀释
- 细粒度差异被合并
向量只保留"语义中心",不保留"判断细节"。
3. 相似度是几何度量,不是逻辑判定
Query: "不用 Redis 的分布式锁方案"
Doc A: "Redis 分布式锁的实现与问题"
Doc B: "Zookeeper 分布式锁原理"
从语义相似度看,A 更接近 Query。但从逻辑相关性看,必须选 B。
这是"几何相似度 ≠ 逻辑相关性"的典型反例。
为什么需要 Rerank
Rerank 用更强的模型做更精细的判断
典型的 Rerank 模型以 Query + Document 为输入,输出一个相关性分数:
| 能力 | 向量检索 | Rerank |
|---|---|---|
| 精确匹配条件 | ❌ | ✅ |
| 理解否定 / 约束 | ❌ | ✅ |
| 判断"是否真的回答了问题" | ❌ | ✅ |
| 多段推理 | ❌ | ✅ |
Rerank 模型能学到向量检索做不到的事:这段文档里的条件是否被满足?是否排除了 Query 中提到的排除项?文档是否真的回答了问题的核心?
为什么不一开始就用 Rerank?
成本差异巨大:
| 方案 | 复杂度 |
|---|---|
| 向量检索 | O(log N) |
| Rerank(Cross-Encoder) | O(K) × 模型推理 |
所以正确的做法是:先用便宜的方式筛到 Top-K,再用贵但准的方式精排。
Rerank 的真实价值
不做 Rerank,会出现以下现象:
- 回答"差不多对,但不精确"
- 引用了语义相近但条件不满足的文档
- LLM 开始"脑补"
- 同样问题,命中不同 chunk,输出不稳定
Rerank 本质上是"确定性增强器":减少 LLM 的自由发挥空间,提高同一问题多次调用的一致性。
工程级 RAG 的完整架构
用户问题
↓
query_embedding → 向量检索 → Top-20 Chunks
↓
rerank_model(Query + Chunk) → Top-5 Chunks
↓
组装上下文(Context Engineering)
↓
LLM(附上 Top-5 Chunks) → 最终答案
什么时候可以不做 Rerank?
- 数据量小(< 几千条)
- 文档高度同质
- Query 极其简单
- Top-K 设置很小(如 K=3)
- 对错误容忍度高(如闲聊场景)
强烈建议做 Rerank 的场景
- 企业知识库、法律 / 医疗 / 专利文档
- 代码 / 运维 / 架构问答
- 多条件、约束性问题("哪些方案不包含 X")
- 需要可解释性和稳定性
本节小结
RAG 的第一步(向量检索)解决"别漏",Rerank 解决"选对"。不做 Rerank,等于把"判断相关性"这个高价值工作交给了最不稳定的那一层——LLM 生成。如果你的系统里用户问题经常包含"不 / 排除 / 限制 / 条件组合",不做 Rerank,相关性一定会出问题。
延伸阅读
- 向量与嵌入基础:向量点积与夹角关系 — 理解向量相似度的数学基础
- Embedding:从 One-hot 到分布式表示 — Embedding 训练原理,以及为什么语义信息可以被压缩进向量