学习目标:理解RAG如何解决大模型"知识截止"和"专业不准"问题,掌握向量检索的核心原理与优化技巧,能搭建企业级知识库问答系统 --- 一、为什么需要RAG?—— 大模型的3大硬伤 1.1 问题1:知识截止 现象: 根源: - 模型训练时用的是历史数据"/>
侧边栏壁纸
博主头像
毕业帮 博主等级

提供丰富的资源和服务,涵盖从论文写作、毕业设计、职业规划、就业准备等多个方面

  • 累计撰写 84 篇文章
  • 累计创建 18 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

Part 4:RAG检索增强生成 - 给大模型装上"外接大脑"

流苏
2026-03-03 / 0 评论 / 0 点赞 / 13 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Part 4:RAG检索增强生成 - 给大模型装上"外接大脑"

学习目标:理解RAG如何解决大模型"知识截止"和"专业不准"问题,掌握向量检索的核心原理与优化技巧,能搭建企业级知识库问答系统


一、为什么需要RAG?—— 大模型的3大硬伤

1.1 问题1:知识截止

现象

用户:"2024年巴黎奥运会奖牌榜是多少?"
ChatGPT-3.5(训练截止2021年):
"抱歉,我无法提供2024年的信息,我的知识截止到2021年。"

根源

  • 模型训练时用的是历史数据
  • 训练完成后无法更新知识
  • 知识有"保质期",过期就失效

现实痛点

  • 企业新闻、财报、政策变化...模型通通不知道
  • 想让AI回答最新信息,除非重新训练(昂贵且慢)

1.2 问题2:专业不准

现象

用户:"我们公司的《采购管理制度》第5条规定什么?"
通用大模型:
"关于采购管理,一般建议..."(泛泛而谈)

根源

  • 通用模型训练数据:互联网公开内容
  • 企业内部文档:几乎没出现在训练集中
  • 模型只能"猜",猜对概率极低

现实痛点

  • 企业知识库、内部文档、专业领域知识
  • AI回答像"外行",无法用于实际工作

1.3 问题3:无法溯源

现象

用户:"这个政策从哪来的?引用文件是什么?"
模型:"根据相关法规..."(无法提供来源)

问题

  • 企业场景需要可追溯的回答
  • 合规要求、法律咨询必须标注来源
  • 无法判断AI回答的可信度

二、RAG是什么?—— 图书馆管理员的比喻

2.1 核心思想:模型 + 检索 = 智能问答

传统大模型:像一个人背熟了百科全书,但书是2021年的版本。

RAG系统

用户提问 → 系统去图书馆找最新/专业资料 → 把资料给AI → AI基于资料回答

类比:你不是让AI"凭空回答",而是"带着资料答题"

2.2 RAG流程图(5步拆解)

用户问题:"我们公司差旅报销标准是什么?"
    ↓
Step 1: 文档预处理(整理书架)
    - 加载公司差旅制度PDF
    - 清洗、切分成段落
    - 每个段落300-500字
    ↓
Step 2: 向量化(给每段打"语义标签")
    - 使用Embedding模型(如BGE-M3)
    - 每段文字 → 768维向量
    - 语义相近的段落,向量距离近
    ↓
Step 3: 存入向量数据库(建智能索引)
    - Chroma/Milvus/Pinecone
    - 每条记录:{text: "一线城市住宿标准800元/天", vector: [0.2,0.8,...]}
    ↓
Step 4: 检索(快速找对资料)
    - 用户问题也转成向量
    - 计算问题向量 vs 所有段落的相似度
    - 取最相似的3-5个段落
    ↓
Step 5: 增强生成(带着资料答题)
    - 把检索到的段落作为"参考资料"给AI
    - Prompt:"基于以下资料回答问题,无资料说不知道"
    - AI生成回答,并标注引用来源
    ↓
输出:回答 + 引用标注(如[1]、[2])

关键:AI不是凭空想象,而是"开卷考试"。


三、5步详解:每一步怎么做?

3.1 Step 1: 文档预处理("整理书架")

目标:把原始文档整理成适合检索的"小段落"。

流程

1. 加载(Loading)

支持的格式:
- PDF(扫描件?OCR识别)
- Word(.docx)
- 网页(HTML)
- Markdown
- 数据库(SQL查询结果)
- CSV/Excel

2. 清洗(Cleaning)

  • 去页眉页脚
  • 统一编码(避免乱码)
  • 删除空白字符
  • 去除广告/无关内容

3. 分割(Splitting)—— 最关键的一步!

原则

  • ✅ 段落内语义完整(一个段落讲清楚一件事)
  • ✅ 保留上下文重叠(避免语义被拦腰切断)
  • ✅ 长度适中(300-500字,或512-1024 tokens)

分割策略

策略 怎么做 适用场景
按字符切 固定500字一刀切 简单,但可能切断语义
按句切 遇到句号就切,再拼接 保持句子完整
按语义切 用AI判断语义边界(高级) 高质量,但慢
递归切 先大纲,再章节,再段落 文档有清晰结构

经验

  • 企业文档(制度、手册):按段落切 ✅
  • 长篇小说:按章节切 ✅
  • 技术文档:按标题层级切 ✅

重叠(Overlap)

原文:
"...公司成立于2010年。创始人张三拥有20年行业经验..."
    ↓ 切两段
段1:"...公司成立于2010年。"  ← 切断
段2:"创始人张三拥有20年行业经验..."
    ↓ 问题:段1缺少创始人信息,段2缺少成立时间
解决方案:加入50字重叠
段1:"...公司成立于2010年。创始人张三..."
段2:"张三拥有20年行业经验..."

4. 元数据(Metadata)

  • 每个段落加"身份证":
    {
      "text": "段落内容",
      "source": "差旅管理制度.pdf",
      "page": 15,
      "section": "住宿标准",
      "last_updated": "2024-01-15"
    }
    
  • 后续可以按来源/日期过滤

3.2 Step 2: Embedding向量化("打语义标签")

目标:把文字转成向量,让"意思相近"的向量距离近。

核心理解

  • 不是关键词匹配!是语义匹配
  • "出差" vs "公干" vs "外出办公" → 意思一样,应该向量距离近

Embedding模型选型

模型 特点 适用场景
BGE-M3 中文强,支持多语言,多样化检索 中文场景🌟首选
text-embedding-3 OpenAI出品,平衡 多语言通用
E5 英文强,学术风格 英文论文检索
CodeBERT 代码语义 代码搜索
bge-large-zh 纯中文,1024维 专业中文文档

对比实验(中文差旅问答):

  • BGE-M3:准确率 78%
  • text-embedding-3:72%
  • 纯字面搜索:45%

选型建议

  • 中文为主 → BGE-M3(HuggingFace有开源)
  • 多语言混合 → text-embedding-3
  • 预算充足(买API)→ OpenAI
  • 私有部署(数据敏感)→ 本地BGE

长文档处理

  • 一个长文档(5000字)不能直接Embedding(超出模型长度限制)
  • 方案1:切分成段落,分别Embedding ✅
  • 方案2:分段Embedding,加权融合(首尾段权重高)

3.3 Step 3: 向量数据库存储("建智能索引")

目标:快速检索(毫秒级)从百万条记录中找到最相关的K条。

向量搜索原理

问题向量 q = [0.1, 0.8, ..., 0.3]
数据库向量 v1, v2, v3...
计算:
相似度 = cosine_similarity(q, v1)
        = (q·v1) / (|q|·|v1|)
    ↓
排序,返回Top-K

向量数据库选型

产品 类型 规模 优点 缺点
Chroma 开源/轻量 <10万 简单,Python原生,内存/单文件 性能一般,不适合大规模
FAISS 开源库 <1亿 Facebook出品,极快 不支持更新,需手动管理
Milvus 开源/集群 >1亿 云原生,功能全,性能强 部署复杂
Pinecone 托管服务 任意 不用运维,自动扩容 付费,数据在云端
Weaviate 开源/托管 <1亿 支持混合检索(向量+关键词) 学习曲线陡

选型建议

  • 学习/原型:Chroma ✅(5分钟上手)
  • 生产 <100万:Pinecone(省心)或 Milvus(可控)
  • 超大规模:Milvus集群

实操对比(Chroma示例):

# 初始化
import chromadb
client = chromadb.PersistentClient(path="./chroma_db")

# 创建集合
collection = client.create_collection(name="company_policy")

# 插入数据
collection.add(
    embeddings=[[0.1, 0.8, ...], [0.2, 0.6, ...]],  # 向量
    documents=["住宿标准:一线城市800元/天", "交通补助:每月500元"],  # 原文
    metadatas=[{"source": "差旅制度.pdf"}, {"source": "福利手册.pdf"}],  # 元数据
    ids=["chunk_001", "chunk_002"]
)

# 检索
results = collection.query(
    query_embeddings=[[0.1, 0.7, ...]],  # 问题向量
    n_results=3  # 返回3条
)

3.4 Step 4: 检索优化("快速找对资料")

基础:Top-K检索

K = 3-5(常用)
返回Top-3相似段落

问题

  • K太小:可能漏信息
  • K太大:引入噪声(不相关段落干扰)

优化技巧1:HyDE(假设答案引导检索)

思路

用户问:"公司对新员工培训有哪些要求?"
    ↓
Step A: 让AI先猜一个"理想答案"
    "新员工需要参加入职培训、部门介绍、安全培训..."

Step B: 用这个"理想答案"去检索
    (而不是用原始问题)
    ↓
检索更准!因为假想答案的语义更接近真实文档

适用:问题抽象、文档描述具体的场景

优化技巧2:Query Expansion(查询扩展)

问题:用户问"出差报销",但文档写的是"差旅费报销" → 匹配不上!

方案:自动扩展同义词

"出差" → ["出差", "公干", "外出办公", "差旅"]
"报销" → ["报销", "费用结算", "财务申请"]
    ↓
5个同义词 × 5个同义词 = 25种组合 → 分别检索 → 合并结果

优化技巧3:混合检索(Hybrid Search)

向量搜索的问题

  • 擅长语义匹配("汽车"≈"轿车")
  • 不擅长精确匹配(型号"Model 3"必须精确)

关键词搜索的问题

  • 擅长精确匹配("Model 3")
  • 不擅长语义("特斯拉"搜不到"电动车")

Hybrid = 两者结合

得分 = α × 向量相似度 + β × 关键词BM25分数
    ↓
既有语义泛化,又有精确召回

方案:Weaviate / Elasticsearch + 向量插件

优化技巧4:重排序(Reranker)

流程

Step 1: 向量检索 Top-20(宽泛召回)
Step 2: 用更强大的模型重排Top-20
Step 3: 返回重排后的 Top-3

为什么有效

  • 第一轮:快但粗(小模型检索20条)
  • 第二轮:慢但精(大模型精排,更准理解语义)

Reranker模型

  • BGE-Reranker(中文)
  • Cohere Rerank
  • bge-reranker-large

性能权衡

  • 只用向量检索:10ms,准确率 70%
    • Reranker:50ms,准确率 85% ✅ 推荐
  • Reranker Top-50:100ms,准确率 88%(收益递减)

3.5 Step 5: 增强生成("带着资料答题")

目标:让AI基于检索到的资料生成回答,而不是自由发挥。

Prompt设计

你是公司的智能客服助手。

任务:基于以下【参考文档】,回答用户问题。
要求:
1. 只能使用提供的文档内容
2. 文档中没有的信息,明确回答"资料未提及"
3. 引用来源(如[1]、[2]标注文档序号)
4. 语言简洁,不超过200字

【参考文档】
[1] 《差旅管理制度》2024年版
    内容:一线城市住宿标准800元/天,交通补助500元/月...

[2] 《新员工入职指南》
    内容:新员工需参加3天入职培训,包括公司文化、安全规范...

【用户问题】
{user_question}

请回答:

关键技巧

  • ✅ 明确"基于文档"(限定范围)
  • ✅ "不知道就说不知道"(抑制幻觉)
  • ✅ 要求标注来源(可追溯)
  • ✅ 限制长度(避免啰嗦)

输出示例

Q: 一线城市住宿标准多少?

A: 根据《差旅管理制度》[1],一线城市住宿标准为800元/天。

引用:[1]

冲突处理

文档A说:"住宿标准800元/天"
文档B说:"一线城市住宿标准1000元/天"  ← 冲突!
    ↓
策略1:按时间排序,取最新文档
策略2:取置信度高的(如官方制度 > 会议纪要)
策略3:告诉AI:"检测到矛盾,请提示用户咨询HR确认"

四、实战优化技巧组合

4.1 召回率 vs 准确率平衡

召回率(Recall):相关文档有多少被检索到?

  • K太小 → 漏掉重要信息 → Recall↓
  • K太大 → 噪声多 → Precision↓

实践策略

  1. 先测试K=3/5/10的F1分数(Precision和Recall的调和)
  2. 业务调优:
    • 法律场景:需要高准确率(不能引用错误文件)→ K=3
    • 知识探索:需要广撒网 → K=10

4.2 长文档处理:层次化检索

问题:文档有100页,直接检索效率低。

方案

第一层:检索"哪个文档最相关"
    (用文档标题Summary向量)
    ↓ 找到Top-3文档
第二层:在Top-3文档内检索段落
    ↓ 返回精确段落

效果

  • 从10万文档 → 筛选100个文档(1ms)
  • 从100个文档 × 500段落 = 5万段落 → 找Top-5(5ms)
  • 总耗时≈6ms,比直接搜10万段落快100倍

4.3 多轮对话:记忆管理 + 查询重写

问题:用户第二轮问"那它多少钱?","它"指什么?

方案1:压缩历史

第1轮:用户问"iPhone 15 Pro有什么新功能?"
第2轮:用户问"那它多少钱?"

系统自动总结:
"用户想了解iPhone 15 Pro(功能+价格)"
    ↓
第2轮检索:"iPhone 15 Pro 价格"(上下文补全)

方案2:查询重写

原始问题:"那它多少钱?"  ← 模糊,检索效果差
    ↓
LLM重写为:"iPhone 15 Pro 官方售价"
    ↓
检索更准确

五、RAG vs 微调 vs Prompt:怎么选?

5.1 三者对比

方案 成本 更新速度 准确率 适用场景
Prompt工程 0元 即时 中(依赖模型本身) 通用问答,不涉及专业知识
RAG 中等(向量DB+Embedding API) 即时(换文档就行) 高(提供权威资料) 企业知识库、最新资讯
微调 高(训练成本) 慢(需重新训练) 极高(模型专门化) 深度垂直领域,严格格式要求

5.2 决策树

需要回答专业/最新问题?
    ↓ Yes
RAG能解决吗?(有文档就能答)
    ↓ Yes → 用RAG ✅ 首选
    ↓ No
需要改变模型"思维方式"吗?(如代码生成、数学推理)
    ↓ Yes → 微调 ✅
    ↓ No
Prompt工程 + RAG即可 ✅

经验法则

  • 80%场景:Prompt + RAG 够用
  • 15%场景:需要微调(专业度要求极高)
  • 5%场景:需要从头训练(研究前沿)

六、动手任务

任务1:用LangChain+Chroma搭建迷你RAG

步骤

  1. 安装:pip install langchain chromadb
  2. 准备10篇文档(任选,如公司制度、新闻)
  3. 代码流程:
    # 伪代码
    documents = load_docs("./docs")
    chunks = split(documents, chunk_size=500, overlap=50)
    embeddings = BGE_M3.encode(chunks)
    chroma.add(embeddings, chunks)
    
    query = "用户问题"
    similar_chunks = chroma.query(query, k=3)
    answer = gpt.generate(prompt="基于资料:"+similar_chunks+"回答问题:"+query)
    
  4. 测试准确率:准备10个问题,人工评估回答质量

任务2:对比BGE-M3 vs text-embedding-3在中文问答效果

实验设计

  • 相同文档集(中文差旅制度,50个段落)
  • 相同测试问题(20个QA对)
  • 用两种Embedding分别检索
  • 指标:Top-3检索的命中率(正确答案是否在Top-3)

预期结果

  • BGE-M3:70-80%
  • text-embedding-3:60-70%
  • 记录差异案例,分析原因

任务3:设计"带引用标注"的RAG输出格式

要求

  1. 设计JSON输出结构:
    {
      "answer": "回答正文",
      "references": [
        {"id": 1, "text": "引用的原文段落", "source": "文件名.pdf", "page": 12}
      ],
      "confidence": 0.85
    }
    
  2. 设计Prompt模板,强制AI标注引用
  3. 设计前端展示样式(引用标[1]、[2],鼠标悬停显示详情)

✅ 学习检查点

完成Part 4后,您应该能:

  1. 解释RAG为什么必要

    • 知识截止、专业不准、无法溯源三大问题
    • RAG如何通过"开卷考试"解决
  2. 画出RAG完整流程图(5步)

    • 文档预处理 → 向量化 → 存储 → 检索 → 增强生成
    • 能解释每一步的关键决策点
  3. 选择合适的Embedding模型和向量数据库

    • BGE-M3 vs text-embedding-3
    • Chroma vs Milvus vs Pinecone
    • 根据场景(中文/多语言、规模、部署方式)决策
  4. 设计检索优化方案

    • HyDE:什么时候用?
    • Reranker:精度收益 vs 延迟成本
    • 混合检索:向量+关键词
  5. 评估RAG系统效果

    • 召回率 vs 准确率平衡
    • 设计测试集(QA对)
    • 关键指标:回答准确率、引用完整性、响应时间

📚 延伸阅读

  • RAG原始论文:"Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks"(Facebook, 2021)
  • 向量数据库:Milvus官方文档(https://milvus.io/)
  • Embedding模型:BGE官方仓库(https://github.com/FlagOpen/FlagEmbedding)
  • LangChain RAG教程:官方文档的"RAG"章节
  • HyDE论文:"Precise Zero-Shot Dense Retrieval without Relevance Labels"
  • Reranker:Cohere Rerank API文档

Part 4 结束!
RAG是企业级AI应用最主流的技术,80%的知识库问答需求都靠它。
下一部分 Part 5:Agent智能体架构 —— AI不仅能回答问题,还能主动规划、调用工具、执行任务,成为真正的"智能体"。

学习节奏:Part 4建议2周,动手搭建一个Chroma RAG demo,体会"检索→生成"的完整流程。


系列进度

  • ✅ Part 1:Transformer原理大白话
  • ✅ Part 2:分词与词向量详解
  • ✅ Part 3:提示词工程实战
  • ✅ Part 4:RAG检索增强生成(当前)
  • 🔄 Part 5:Agent智能体架构
  • 🔄 Part 6:MCP协议与Skills系统
  • 🔄 Part 7:微调技术通俗解析
  • 🔄 Part 8:推理优化与工程部署
  • 🔄 Part 9:综合项目实战与职业发展

核心认知:RAG不是"调Prompt",而是系统架构——需要理解文档处理、向量检索、Prompt工程三者配合。实践中常见陷阱是"检索不准"导致下游再强也无用,务必重视Embedding质量和检索优化。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区