数据处理与知识库

本节要解决什么问题

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,会出现以下现象:

  1. 回答"差不多对,但不精确"
  2. 引用了语义相近但条件不满足的文档
  3. LLM 开始"脑补"
  4. 同样问题,命中不同 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,相关性一定会出问题。

延伸阅读

results matching ""

    No results matching ""