引言
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-small | 1536 | 通用,效果好 |
| OpenAI text-embedding-3-large | 3072 | 更高精度 |
| BGE(BAAI) | 768/1024 | 开源,中文优秀 |
| GTE(Alibaba) | 768/1024 | 开源,多语言 |
| Cohere Embed v3 | 1024 | 多语言 |
向量数据库
核心功能
向量数据库专门存储和检索向量:
存储:文档块 → Embedding → 存入数据库
检索:查询 → Embedding → 找最近邻
支持的检索方式:
├── 精确最近邻(慢但精确)
└── 近似最近邻(ANN,快但略有精度损失)常见向量数据库
| 数据库 | 类型 | 特点 |
|---|---|---|
| Chroma | 开源 | 轻量,适合原型 |
| Pinecone | 云服务 | 托管,易用 |
| Milvus | 开源 | 高性能,大规模 |
| Qdrant | 开源 | Rust 实现,高效 |
| Weaviate | 开源 | 内置多模态支持 |
| pgvector | PostgreSQL 扩展 | 利用现有 PG 基础设施 |
RAG 的优化
基础 RAG 的问题
1. 检索不准
可能检索到不相关的文档块
2. 上下文窗口限制
能注入的文档量有限
3. 推理能力不足
简单拼接上下文不一定能回答复杂问题高级 RAG 技术
| 技术 | 解决的问题 | 方法 |
|---|---|---|
| 查询重写 | 用户问题表述不清 | LLM 重写查询 |
| 混合检索 | 单一向量检索不够准确 | 向量 + 关键词检索结合 |
| Reranking | 初步检索结果不够精确 | 用交叉编码器重排序 |
| 文档层次化 | 文档切分丢失上下文 | 父子文档检索 |
| 自适应检索 | 不是所有问题都需要检索 | 判断是否需要检索 |
Reranking:重排序
向量检索(快但不够精确):
查询 → 向量搜索 → Top-100 候选
Reranking(慢但精确):
Top-100 候选 → 交叉编码器逐个打分 → Top-10 精确结果
Reranking 模型:
输入:(查询, 候选文档) 对
输出:相关性分数
→ 比向量检索更精确,但速度更慢
常用模型:Cohere Rerank、BGE-Reranker、bce-rerankerRAG 的实际影响
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 |
思考题
- RAG 能否彻底解决幻觉问题?在什么情况下 RAG 系统仍然会产生幻觉?
- 如何评估一个 RAG 系统的质量?检索质量和生成质量哪个更重要?
- 如果知识库中的信息本身有错误或冲突,RAG 系统应该如何处理?