LESSON · 05
把
外部
知识
塞进去
RAG · Retrieval-Augmented Generation
为什么需要 RAG
- 知识截断:模型不知道训练之后的事
- 私有数据:模型没见过你公司的文档
- 可溯源:答案要能引用原文
- 可更新:今天加文档,今天就能问
- → 比微调便宜 10-100 倍
RAG
四步
工序
索引 → 检索 → 增强 → 生成
rag pipeline
5 min RAG quickstart
# pip install langchain langchain-openai chromadb
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA
# 1. 加载文档
loader = TextLoader("my_doc.txt")
docs = loader.load()
# 2. 切块
splitter = RecursiveCharacterTextSplitter(
chunk_size=500, chunk_overlap=50
)
chunks = splitter.split_documents(docs)
# 3. 向量化 + 存储
db = Chroma.from_documents(chunks, OpenAIEmbeddings())
# 4. 检索 + 生成
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o-mini"),
retriever=db.as_retriever(search_kwargs={"k": 3})
)
print(qa.invoke("文档里说了什么?"))
向量库选型决策表
- Chroma · 本地开发 / 原型 · < 10 万文档
- pgvector · 已有 Postgres,不想加新组件
- Qdrant · 需要过滤 + 高性能 · 10 万 - 1000 万
- Milvus · 海量数据 + 分布式 · > 1000 万
- Pinecone · 不想运维、有预算 · SaaS 全托管
Embedding 是什么
- 文本 → 一个高维向量(768 / 1536 / 3072 维)
- 语义相近 → 向量相近
- "猫" 和 "喵星人" 离得很近
- "猫" 和 "汽车" 离得很远
- 模型:OpenAI text-embedding-3 / BGE / GTE
三种相似度
- 余弦相似度 · cos(θ) ∈ [-1, 1] · 最常用
- 点积 · 速度快,需归一化
- 欧氏距离 · 几何直觉
- 归一化向量后,三者等价
向量数据库
- Chroma · 轻量,本地起手
- Milvus / Zilliz · 大规模生产
- Pinecone · SaaS 标杆
- Qdrant · Rust 实现,性能好
- pgvector · Postgres 直接加
- 小项目用 Chroma / pgvector,规模上来再换
切得
对
Chunking 是 RAG 效果的第一胜负手。
Chunking 策略
- 固定窗口 · 500 token 一段,简单粗暴
- 滑动窗口 · 加 overlap,避免切断语义
- 按结构 · 章节 / 段落 / Markdown 标题
- 按语义 · LLM 协助找断点
- 父子分块 · 子用于检索,父用于上下文
Hybrid Search · 混合检索
- BM25(关键词)+ 向量(语义)
- 关键词擅长术语 / 实体名 / 错别字
- 向量擅长语义 / 同义改写
- RRF 融合排序,鱼和熊掌
Re-rank · 重排
- 向量检索 top-50 召回,不一定是最相关的 top-5
- 用 Cross-Encoder 二次精排
- 代表模型:BGE-Reranker / Cohere Rerank
- 代价:慢一些,但召回质量提升明显
长上下文压缩
- 问题:召回了 10 段,可能太长
- 方案 1:摘要后再喂
- 方案 2:LLM 抽取相关句子
- 方案 3:LLMLingua 等压缩工具
RAG 评估
- 检索侧:召回率 / Recall@k / NDCG
- 生成侧:答案准确率 / 忠实度 / 引用正确
- RAGAS:自动化评估框架
- 没有评估,调优就是玄学
进阶变体
- GraphRAG · 知识图谱 + 检索
- Self-RAG · 让模型自己决定要不要检索
- Agentic RAG · 多轮检索 + 推理
- HyDE · 让 LLM 先编个答案再用它去检索
本课收获
四步工序
Embedding
向量库选型
Chunking 是关键
Hybrid + Re-rank
RAGAS 评估
下一课 · Agent 智能体:让 LLM 自己干活