Skip to content

引言

2023 年初,纽约的一位律师使用 ChatGPT 撰写法律文书。ChatGPT 信心满满地引用了几个判例,附上了案号和法官姓名。律师把这些提交给了法庭。然而法官核查后发现——这些判例全部不存在,每一个都是 ChatGPT 编造的。这位律师因此受到了纪律处分。

这就是大语言模型的「知识截止」问题:模型的知识冻结在训练数据的那一刻,之后的世界它一无所知。而当它不知道答案时,它不会说「我不知道」——它会编造一个看起来无比真实的答案。RAG(检索增强生成)的出现,正是为了解决这个根本性缺陷。


问题:模型的知识局限

LLM 知识的三大致命问题:

1. 知识截止
   训练数据有截止日期 → 不知道最新事件

2. 幻觉
   自信地编造不存在的事实
   例:「根据 2024 年的研究,月球上发现了液态水」(编造的)

3. 领域知识不足
   对特定领域(法律、医疗、企业内部)知识有限
   → 无法回答专业问题

传统解决方案及其局限

方案 1:重新训练模型
  → 成本极高(百万美元级别)
  → 不现实

方案 2:微调模型
  → 比重新训练便宜
  → 但知识仍然固化在参数中
  → 更新仍然困难

方案 3:RAG
  → 推理时动态检索外部知识
  → 无需修改模型
  → 知识可以实时更新

RAG 的工作原理

「开卷考试」的类比

想象你正在参加一场考试。闭源大语言模型就像一个闭卷考试的学生——只能依靠脑海中记住的知识回答问题。如果记错了,就会写出错误的答案,而且毫不知情。

RAG 则把考试变成了开卷考试:模型在回答之前,先去「图书馆」(知识库)里查找相关资料,然后基于查到的真实资料来组织答案。

用户提问


┌─────────────┐
│ 1. 检索      │  在知识库中搜索相关文档
│  Retrieval  │
└──────┬──────┘
       │ 检索到的相关文档

┌─────────────┐
│ 2. 增强      │  将检索结果与用户问题拼接
│  Augment    │
└──────┬──────┘
       │ 增强后的提示

┌─────────────┐
│ 3. 生成      │  LLM 基于增强信息生成回答
│  Generation │
└──────┬──────┘


  最终回答(基于检索到的真实知识)

详细步骤

离线准备:
  1. 收集知识文档(PDF、网页、文档等)
  2. 将文档切分为小块(Chunks)
  3. 用 Embedding 模型将每个块转换为向量
  4. 存入向量数据库

在线查询:
  5. 用户提问 → 将问题转换为向量
  6. 在向量数据库中搜索最相似的文档块
  7. 将检索到的文档块作为上下文加入提示
  8. LLM 基于上下文生成回答

Embedding:文本的向量化

什么是 Embedding?

Embedding 是将文本转换为固定长度的数字向量:
  "猫坐在垫子上" → [0.23, -0.15, 0.89, ..., 0.42]
  "狗趴在地板上" → [0.21, -0.13, 0.85, ..., 0.39]
  "股票市场下跌" → [-0.56, 0.78, -0.12, ..., 0.91]

语义相似的文本 → 向量距离近
语义不同的文本 → 向量距离远

这样就可以用向量距离来衡量文本的语义相似度

常用的 Embedding 模型

模型维度特点
OpenAI text-embedding-3-small1536通用,效果好
OpenAI text-embedding-3-large3072更高精度
BGE(BAAI)768/1024开源,中文优秀
GTE(Alibaba)768/1024开源,多语言
Cohere Embed v31024多语言

向量数据库

核心功能

向量数据库专门存储和检索向量:

  存储:文档块 → Embedding → 存入数据库
  检索:查询 → Embedding → 找最近邻

  支持的检索方式:
  ├── 精确最近邻(慢但精确)
  └── 近似最近邻(ANN,快但略有精度损失)

常见向量数据库

数据库类型特点
Chroma开源轻量,适合原型
Pinecone云服务托管,易用
Milvus开源高性能,大规模
Qdrant开源Rust 实现,高效
Weaviate开源内置多模态支持
pgvectorPostgreSQL 扩展利用现有 PG 基础设施

RAG 的优化

基础 RAG 的问题

1. 检索不准
   可能检索到不相关的文档块

2. 上下文窗口限制
   能注入的文档量有限

3. 推理能力不足
   简单拼接上下文不一定能回答复杂问题

高级 RAG 技术

技术解决的问题方法
查询重写用户问题表述不清LLM 重写查询
混合检索单一向量检索不够准确向量 + 关键词检索结合
Reranking初步检索结果不够精确用交叉编码器重排序
文档层次化文档切分丢失上下文父子文档检索
自适应检索不是所有问题都需要检索判断是否需要检索

Reranking:重排序

向量检索(快但不够精确):
  查询 → 向量搜索 → Top-100 候选

Reranking(慢但精确):
  Top-100 候选 → 交叉编码器逐个打分 → Top-10 精确结果

Reranking 模型:
  输入:(查询, 候选文档) 对
  输出:相关性分数
  → 比向量检索更精确,但速度更慢

常用模型:Cohere Rerank、BGE-Reranker、bce-reranker

RAG 的实际影响

2020Facebook(Meta)发布 DPR(Dense Passage Retrieval),奠定 RAG 技术基础
2020Lewis 等人正式提出 RAG 框架,将检索与生成结合
2023向量数据库创业爆发,Pinecone、Milvus 等获得大额融资
2023-24RAG 成为企业 AI 落地的首选方案——安全、可控、可更新
2025RAG 成为 AI 应用的标准组件,与 Agent 深度融合

RAG 为什么能推动企业 AI 落地?因为它解决了企业的三大顾虑:数据隐私(数据不出企业)、知识时效性(随时更新知识库)、可控性(可以审计 AI 的信息来源)。

RAG vs 微调

维度RAG微调
知识更新实时需要重新训练
成本中等
适用场景事实性问答、知识库行为风格、特定格式
可解释性高(可展示检索来源)
复杂推理有限可以学到模式

最佳实践:两者结合。微调让模型学会领域特定的行为模式,RAG 提供最新的知识支持。


本节小结

概念要点
RAG检索增强生成,让模型在推理时查阅外部知识
三步流程检索 → 增强 → 生成
Embedding文本转向量,支持语义搜索
向量数据库存储和高效检索向量
优化技术查询重写、混合检索、Reranking

思考题

  1. RAG 能否彻底解决幻觉问题?在什么情况下 RAG 系统仍然会产生幻觉?
  2. 如何评估一个 RAG 系统的质量?检索质量和生成质量哪个更重要?
  3. 如果知识库中的信息本身有错误或冲突,RAG 系统应该如何处理?