【AI编程思考:第五篇】学习检索增强生成(RAG)——从原理到实战
第一章 RAG
大型语言模型(LLM)虽然强大,但有一个根本性的局限:知识被“冻结”在训练数据中。不知道公司的内部规章、最新的产品手册,也无法访问本地的项目文档。
核心矛盾:LLM 博学,但不“知情”。
RAG(Retrieval-Augmented Generation,检索增强生成)正是为解决这一矛盾而生。它的思想非常朴素:
- 先查 —— 从你的私有知识库中检索相关片段;
- 再答 —— 将检索到的内容作为“参考资料”连同问题一起交给 LLM,让它基于这些依据生成答案。
这样,AI 既能发挥语言理解能力,又能保证回答的事实性和可溯源。正因如此,绝大多数生产级 AI Agent 都会采用 RAG 架构。
第二章 RAG 的核心工作流程
一个标准的 RAG 系统可以拆解为两个阶段:索引(Indexing) 和 查询(Querying)。
流程解读:
- 索引阶段:离线完成。把文档切碎、转成向量、存进库中。
- 查询阶段:在线实时。将用户问题也转成向量,去库里找最相似的“碎片”,再交给 LLM 作答。
第三章 关键原理简述
3.1 嵌入向量(Embedding)—— 让文字“可计算”
计算机不懂语义,但懂得数学空间。嵌入向量是将一段文本(句子、段落或整篇文档)映射为一个高维浮点数数组(如 768 维或 1536 维)。
- 相似含义的文本,其向量在空间中距离更近(例如“猫”和“ feline”)。
- 不相关的文本,向量则相距甚远。
直观理解:把每段文字“投影”到一个巨大的语义地图上,位置越近,意思越像。
现代嵌入模型(如 text-embedding-3-small、BGE)正是通过大量语料训练,学会了这种“语义投影”能力。
3.2 数据分块(Chunking)—— 给知识“切配菜”
LLM 的上下文窗口有限(即便现在很长,但检索效率会随长度下降),所以我们不能把整本手册直接塞进去。需要分块:
- 过大:会带入噪声,检索精度下降。
- 过小:丢失上下文,回答变得碎片化。
常用策略:
- 固定长度分块(如每 500 字符),带重叠(overlap)以保留边界信息。
- 语义分块(基于句子边界或段落结构),更智能但耗时。
好的分块是 RAG 质量的“地基”。
3.3 向量数据库(Vector DB)—— 语义检索的“图书馆”
普通数据库(SQL)擅长精确匹配(如“价格 = 100”),但无法做“相似度搜索”。向量数据库专为此设计,它内置近似最近邻(ANN) 索引,能在百万级向量中快速找到最相似的 Top-K。
主流选项:
- Pinecone —— 全托管云服务,上手快。
- Weaviate —— 开源 + 云,支持混合搜索。
- Chroma —— 轻量级,适合本地学习和原型开发。
3.4 语义搜索 vs 混合搜索 vs 重排序 —— 三层进阶
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 纯语义搜索 | 仅用向量相似度检索 | 理解同义词、上下文 | 忽略关键词精确匹配(如产品编号) |
| 混合搜索 | 向量检索 + 关键词检索(如 BM25),合并结果 | 兼顾语义和精确性 | 结果可能包含噪声 |
| 重排序(Rerank) | 先用混合搜索召回 Top-N(如 50 条),再用更精密的交叉编码器对它们重新打分,选出最终 Top-K | 精度最高,过滤冗余 | 计算成本略高 |
实际生产建议:混合搜索 + 重排序 是黄金组合,既能保证召回率,又能提升精排质量。
第四章 实战入门:构建一个 PDF 聊天机器人
这是最经典、最有效的 RAG 入门项目。一个项目,串联所有核心概念。
项目架构
技术栈
- 嵌入向量 —— 使用
sentence-transformers或 OpenAI Embeddings。 - 检索 —— 用 Chroma 做相似性检索,并尝试加入 BM25 混合检索。
- 提示注入处理 —— 用户可能试图“越狱”(如“忽略上述指令”),你需要设计安全提示模板,将用户输入与系统指令隔离。
- 上下文管理 —— 如何将检索到的多段文本拼接成不超过窗口长度的上下文。
- 记忆设计 —— 不仅检索当前问题,还检索历史对话摘要,让 Agent 拥有“短期记忆”,实现多轮对话。
第五章 学习路线
建议:不要一上来就追求完美。先用最小可行版本(纯向量检索 + 简单 LLM 调用)跑通,再逐步替换为混合搜索和重排序。
第六章 常见陷阱与最佳实践
| 陷阱 | 解决方案 |
|---|---|
| 分块太大导致检索不准 | 调整块大小(256~512 token),增加重叠 |
| 检索到的片段顺序混乱 | 按原始文档顺序或相关性分数排序再拼接 |
| 用户问题中夹杂恶意指令 | 使用“系统提示词”固定角色,并将用户问题作为纯文本参数传入 |
| 多轮对话中丢失历史 | 维护一个对话摘要缓冲区,每次检索时一并嵌入摘要 |
| 向量数据库冷启动 | 先用小样本测试,确保嵌入模型与数据库维度一致 |
总结
RAG 不是一门玄学,而是一套工程化的知识外挂方案。它的灵魂在于:检索决定下限,生成决定上限。只要你掌握了嵌入、分块、向量检索、混合排序和记忆管理,就能让通用 LLM 变成你专属领域的“万事通”。
动手写一个聊天机器人 —— 它是通往 RAG 高手最坚实的那块垫脚石。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)