RAG
RAG (Retrieval-Augmented Generation) 是一种结合信息检索与文本生成的AI架构,通过检索外部知识库来增强LLM的回答能力。
经典论文:
- Lewis, P., et al. (2020). “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.” NeurIPS. [论文链接] - RAG开山之作
- Guu, K., et al. (2020). “REALM: Retrieval-Augmented Language Model Pre-Training.” ICML. [论文链接]
- Izacard, G., & Grave, É. (2021). “Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering.” EACL. [论文链接] - RAG的另一种实现
1. Context Window(上下文窗口)
概念
Context Window 指的是 大语言模型在一次推理时能够读取和理解的最大文本长度。
经典论文:
- Dai, Z., et al. (2019). “Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context.” ACL. [论文链接] - 突破固定上下文长度的开创性工作
通常包含:
- 用户问题
- 历史对话
- system prompt
- 检索到的文档
- 模型生成的内容
这些内容的总 token 数不能超过模型的 context window。
关键要点
- 超过长度的内容会被 截断
- 模型只能"看到"窗口内的信息
- window 大小直接影响:
- 长文档处理能力
- RAG 系统能放入多少资料
主流模型Context Window对比:
| 模型 | Context Window |
|---|---|
| GPT-3.5 | 4K / 16K tokens |
| GPT-4 | 8K / 32K tokens |
| GPT-4 Turbo | 128K tokens |
| Claude 3 | 200K tokens |
| Gemini 1.5 Pro | 1M+ tokens |
2. Token
概念
Token 是 模型处理文本的基本单位。
经典论文:
- Sennrich, R., Haddow, B., & Birch, A. (2016). “Neural Machine Translation of Rare Words with Subword Units.” ACL. [论文链接] - BPE算法,现代tokenizer的基础
- Kudo, T., & Richardson, J. (2018). “SentencePiece: A simple and language independent subword tokenizer.” EMNLP. [论文链接]
一个 token 可能是:
- 一个词
- 一个子词(subword)
- 一个字符片段
关键要点
- 模型限制通常按 token 计算
- 成本和 token 数量直接相关
- 不同语言token化效率不同(中文通常比英文更高效)
经验法则:
- 英文:约 4 字符 = 1 token
- 中文:约 1-2 汉字 = 1 token
3. Embedding(向量表示)
概念
Embedding 是将文本转换为 数字向量(vector),用来表示语义。
经典论文:
- Mikolov, T., et al. (2013). “Efficient Estimation of Word Representations in Vector Space.” ICLR. [论文链接] - Word2Vec开山之作
- Pennington, J., Socher, R., & Manning, C. D. (2014). “GloVe: Global Vectors for Word Representation.” EMNLP. [论文链接]
- Devlin, J., et al. (2018). “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.” NAACL. [论文链接] - 上下文相关embedding的开创性工作
- Reimers, N., & Gurevych, I. (2019). “Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks.” EMNLP. [论文链接] - Sentence-Transformers
语义相似的句子在向量空间中 距离更近。
关键要点
Embedding 用于:
- 语义搜索(Semantic Search)
- 文档检索(Document Retrieval)
- 推荐系统(Recommendation Systems)
- 聚类分析(Clustering)
主流Embedding模型:
- OpenAI text-embedding-ada-002 / text-embedding-3
- Cohere Embed
- BGE (Beijing Academy of Artificial Intelligence)
- E5 (Microsoft)
4. Vector Search(向量搜索)
概念
Vector Search 是通过 向量相似度 来查找相关内容的搜索方式。
经典论文:
- Johnson, J., Douze, M., & Jégou, H. (2019). “Billion-scale similarity search with GPUs.” IEEE Transactions on Big Data. [论文链接] - Faiss向量数据库
- Malkov, Y. A., & Yashunin, D. A. (2020). “Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs.” TPAMI. [论文链接] - HNSW算法
常见计算方式:
- Cosine similarity(余弦相似度): $\cos(\theta) = \frac{A \cdot B}{|A| |B|}$
- Dot product(点积): $A \cdot B$
- Euclidean distance(欧氏距离): $|A - B|$
特点
| 传统搜索 | 向量搜索 |
|---|---|
| 关键词匹配 | 语义匹配 |
| 精确匹配 | 相似度排序 |
| 无法理解同义词 | 理解语义相似性 |
5. RAG(Retrieval Augmented Generation)
概念
RAG 是一种 AI 系统架构,通过 检索外部知识再生成回答。
经典论文:
- Lewis, P., et al. (2020). “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.” NeurIPS. [论文链接]
- Gao, Y., et al. (2023). “Retrieval-Augmented Generation for Large Language Models: A Survey.” arXiv. [论文链接] - RAG综述
基本流程:
用户问题 → 向量检索 → 找到相关文档 → LLM生成回答
RAG架构类型
经典论文:
- Lewis, P., et al. (2020). 区分了两种RAG架构:
- RAG-Sequence: 对所有检索文档使用相同的生成
- RAG-Token: 每个token可以参考不同文档
优势
- 能利用最新知识(无需重新训练)
- 减少模型幻觉(基于检索事实回答)
- 可接入企业知识库
- 可追溯信息来源
6. Chunking(文本切分)
概念
Chunking 指将长文档 拆分成较小文本块(chunk),用于 embedding 和检索。
经典论文:
- Lyu, C., et al. (2024). “Chunking Strategies for RAG.” arXiv. [论文链接]
原因:
- 文档太长,无法直接处理
- embedding 需要语义集中
- context window 有限制
7. Chunk Size(切分大小)
概念
Chunk Size 指每个文本块的 token 数量。
经验值:
- 300 – 800 tokens(通用场景)
- 100 – 300 tokens(问答场景)
- 1000+ tokens(长文档理解)
Trade-off
| Chunk Size | 优点 | 缺点 |
|---|---|---|
| 太大 | 上下文完整 | 语义被稀释,检索不准确 |
| 太小 | 语义集中 | 上下文丢失,信息碎片化 |
8. Overlap(重叠)
概念
Overlap 指相邻 chunk 之间 共享一部分内容。
目的:避免语义被切断或关键信息丢失。
常见设置:10% – 20%
示例:
Chunk 1: [0-500 tokens]
Chunk 2: [400-900 tokens] # 100 tokens overlap
Chunk 3: [800-1300 tokens] # 100 tokens overlap
9. Sliding Window(滑动窗口)
概念
Sliding Window 是一种 chunk 切分方式,使相邻 chunk 部分重叠。
经典论文:
- Liu, J., et al. (2022). “Lost in the Middle: How Language Models Use Long Contexts.” arXiv. [论文链接] - 研究了长上下文中信息位置的影响
优点:
- 保留上下文
- 减少信息断裂
10. Semantic Chunking(语义切分)
概念
Semantic Chunking 根据 语义变化 来切分文本,而不是固定 token 数量。
经典论文:
- Loman, T., & Tekman, B. (2023). “Semantic Chunking for RAG.” [参考]
基本方法:
- 按句子切分
- 生成 embedding
- 计算相邻句子相似度
- 相似度低于阈值则开始新的 chunk
优势:
- 语义完整性更好
- 检索精度更高
11. Hybrid Chunking(混合切分)
概念
实际系统常用策略:结构切分 + token 限制
流程:
按标题或段落切分 → 超过最大长度 → 按句子拆分 → 加 overlap
优点:
- 稳定可控
- 语义自然
- 兼顾结构和长度
12. Vector Database(向量数据库)
概念
向量数据库用于 存储 embedding 并进行高效相似度搜索。
经典论文与系统:
- Johnson, J., Douze, M., & Jégou, H. (2019). “Faiss: A library for efficient similarity search.” [论文链接]
- Pinecone: 商业向量数据库
- Weaviate: 开源向量数据库
- Milvus: 开源向量数据库 [GitHub]
- Chroma: 轻量级向量数据库
作用:在大量向量中快速找到最相似内容。
核心技术:
- HNSW (Hierarchical Navigable Small World)
- IVF (Inverted File Index)
- PQ (Product Quantization)
13. Retrieval(检索)
概念
Retrieval 是从向量数据库中 找到最相关的文档片段。
流程:
用户问题 → embedding → 向量搜索 → TopK chunks
常见:Top3 / Top5 / Top10
检索策略:
- Dense Retrieval: 基于向量相似度
- Sparse Retrieval: 基于关键词(如BM25)
- Hybrid Retrieval: 结合两者
经典论文:
- Robertson, S., & Zaragoza, H. (2009). “The Probabilistic Relevance Framework: BM25 and Beyond.” Foundations and Trends in IR. - BM25算法
- Karpukhin, V., et al. (2020). “Dense Passage Retrieval for Open-Domain Question Answering.” EMNLP. [论文链接] - DPR
14. Re-ranking(重排序)
概念
Re-ranking 是在检索结果基础上 再次排序,提高相关性。
经典论文:
- Nogueira, R., & Cho, K. (2019). “Passage Re-ranking with BERT.” arXiv. [论文链接]
- Nogueira, R., et al. (2020). “Document Ranking with a Pretrained Sequence-to-Sequence Model.” EMNLP. [论文链接]
流程:
向量检索 Top20 → Re-ranker模型 → Top3 → LLM回答
作用:提高检索精度,减少无关内容。
常用Re-ranker模型:
- BGE Re-ranker
- Cohere Re-rank
- Cross-Encoder models
15. Hallucination(模型幻觉)
概念
Hallucination 指模型生成 看似合理但事实错误的内容。
经典论文:
- Maynez, J., et al. (2020). “On Faithfulness and Factuality in Abstractive Summarization.” ACL. [论文链接]
- Zhang, Y., et al. (2023). “Siren’s Song in the AI Ocean: A Survey on Hallucination in Large Language Models.” arXiv. [论文链接]
- Ji, Z., et al. (2023). “Survey of Hallucination in Natural Language Generation.” ACM Computing Surveys. [论文链接]
常见原因:
- 检索不到正确文档
- 上下文不足
- prompt 不明确
- 模型知识过时
缓解策略:
- 使用RAG提供可靠上下文
- 要求模型标注来源
- 设置"不知道"选项
- 多轮验证
16. RAG Debugging(RAG排查)
排查顺序通常为:
- 用户 Query(问题是否清晰)
- 检索 TopK chunks(是否检索到相关内容)
- Re-ranking 结果(排序是否正确)
- Prompt(指令是否明确)
- LLM 模型(模型能力是否足够)
经验分布:
- 80% 问题来自 Retrieval
- 15% 来自 Prompt
- 5% 来自模型能力
调试工具:
- LangSmith
- Arize Phoenix
- Weights & Biases
17. RAG系统完整流程
文档
↓
Chunking(文本切分)
↓
Embedding(向量化)
↓
Vector Database(存储)
↓
Retrieval (TopK)(检索)
↓
Re-ranking(重排序)
↓
LLM生成回答
总结
RAG系统核心目标:
在有限 context window 中,让 LLM 获取最相关知识,并生成准确回答。
关键优化点:
- Chunking策略
- Embedding质量
- Retrieval准确率
- Re-ranking
- Prompt设计