RAG
什么是 RAG?
RAG (Retrieval-Augmented Generation,检索增强生成)
RAG 是一种技术框架,旨在通过从外部知识库中检索实时、准确的信息,来增强大语言模型(LLM)的生成能力。
- 核心痛点: LLM 存在知识滞后(训练数据有截止日期)和幻觉(虚构事实)的问题。
- 解决方案: 既然模型不能记住所有东西,就在它回答之前,先帮它“翻书”查资料。
RAG 的核心工作流程
RAG 的过程通常被概括为 5 个阶段:
A. 数据准备 (Ingestion)
- 载入 (Load): 读取 PDF、HTML、数据库等原始数据。
- 切片 (Chunking): 将长文档切分成小块(Chunks),因为 LLM 的上下文窗口有限。
- 向量化 (Embedding): 使用 Embedding 模型将文本转化为数值向量。
- 存储 (Store): 将向量和原始文本存入向量数据库(如 Pinecone, Milvus, Chroma)。
B. 检索 (Retrieval)
根据用户提问,计算提问向量与数据库中 Chunks 向量的余弦相似度,召回最相关的 Top-K 个文本块。
C. 增强 (Augmentation)
将用户的问题和检索到的文本块拼接进一个特定的 Prompt 模板中。
D. 生成 (Generation)
将拼接好的 Prompt 发送给 LLM,模型基于提供的参考资料生成回答。
RAG vs. 微调 (Fine-tuning)
| 特性 | RAG | 微调 (Fine-tuning) |
|---|---|---|
| 知识更新 | 极快(只需更新数据库) | 慢(需要重新训练) |
| 外部透明度 | 高(可以提供引用来源) | 低(黑盒,难以追溯) |
| 幻觉控制 | 强(基于事实参考) | 弱(仍可能胡编乱造) |
| 成本 | 低(主要是推理和存储费) | 高(算力成本昂贵) |
| 擅长领域 | 事实性、实时性任务 | 学习特定风格、语气或领域术语 |
RAG 的分类
| 类别 | 核心特征 | 适用场景 |
|---|---|---|
| Naive | 简单的向量匹配 | 内部文档问答、简单 FAQ |
| Advanced | 引入 Rerank 和查询转换 | 对准确率要求较高的企业知识库 |
| Modular | 组件化、插件化 | 需要整合网页搜索、数据库等多种数据源 |
| Agentic | 自主规划、反思、迭代 | 复杂的深度调研、逻辑推理任务 |
Naive RAG (初级 RAG)
这是最基础的流程,遵循传统的“检索-增强-生成”模式。
流程: 将文档切片(Chunking),通过 Embedding 模型存入向量数据库。用户提问时,匹配 Top-K 个相似切片,直接喂给 LLM 生成答案。
局限性: 检索精度低(容易断章取义)、缺乏上下文语义、容易在处理复杂问题时产生幻觉。
高级 RAG 优化技术 (Advanced RAG)
针对 Naive RAG 的痛点,在检索前后增加了精细化的处理。
- 预检索策略 (Pre-Retrieval): 包含查询重写(Query Rewriting)、子查询分解,以及更科学的分块策略。
- 查询改写 (Query Rewriting): 使用 LLM 将用户模糊的问题改写得更清晰,便于检索。
- 多查询生成 (Multi-Query): 针对一个问题生成多个变体,分别检索再合并结果。
- 检索中优化 (Retrieval Optimization)
- 混合搜索 (Hybrid Search): 结合语义搜索(向量)和关键词搜索(BM25),解决专有名词搜不到的问题。
- 句子窗口检索 (Sentence Window Retrieval): 检索单句,但喂给模型该句子周围的上下文。
后检索策略 (Post-Retrieval):
- 重排序 (Rerank): 对初筛出来的文档进行二次精排,确保最相关的片段排在最前面。
- Prompt 压缩: 去除冗余信息,节省 Token 并减少噪声。
上下文压缩 (Context Compression): 剔除冗余信息,只保留精华。
Modular RAG (模块化 RAG)
随着技术发展,RAG 不再是线性结构,而变成了可灵活组合的模块。
核心理念: 引入了诸如“搜索模块”(接入 Web 搜索)、“内存模块”(利用用户对话历史)和“对齐模块”等。
特点: 支持跨模态检索,且允许根据不同任务动态调整组件。
Agentic RAG (智能体 RAG)
这是目前最前沿的方向,将 Agent 的决策能力引入 RAG 系统。
自主决策: 模型不再是被动检索,而是像一个研究员一样,自主判断:
“当前的知识够了吗?如果不够,我需要去哪里再搜一下?”
“检索到的资料是否有冲突?我该如何筛选?”
多步骤推理: 能够处理需要跨文档、跨领域推理的复杂长链路问题。
RAG召回
在面试中被问到“RAG 项目如何做召回(Retrieval)”,面试官实际考查的是你对检索质量控制、多路召回策略以及工程化落地的理解。
你可以按照以下逻辑由浅入深地回答,展现你从基础选型到高级优化的全栈思路:
向量检索 (Dense Retrieval)
这是 RAG 的核心,利用 Embedding 模型将语义向量化。
- 模型选型: 提到的模型(如
BGE、m3e或OpenAI-text-embedding-3),解释为什么选它(长文本支持、多语言能力等)。 - 切片策略 (Chunking):固定长度分块/语义分块(基于标点或段落)以及 重叠度 (Overlap),防止语义在切割处断裂。(滑动窗口)
- 索引优化: 提及向量数据库(如 Milvus, Pinecone, FAISS)使用的索引算法(如 HNSW 或 IVF-PQ),以及如何平衡检索速度和召回率。
多路召回 (Multi-way Retrieval)
单一向量检索在处理“精确关键词匹配”(如:产品型号、人名、缩写)时效果很差。多路召回是企业级项目的标配。
- 关键词召回 (Sparse Retrieval): 使用传统的 BM25 算法。这能弥补向量模型对长尾词、专有名词不敏感的缺陷。
- 混合检索 (Hybrid Search): 将向量检索和 BM25 结果结合。
- RRF (Reciprocal Rank Fusion)/线性加权。
检索增强 (Pre-Retrieval)
在正式检索前,先对用户的原始提问(Query)动手脚。
- 查询改写 (Query Rewriting): 利用 LLM 把用户的口语化表达转为更利于检索的专业术语。
- 查询分解 (Multi-Query): 将复杂问题拆解为多个子问题,分别检索后再汇总。
- 假设性文档生成 (HyDE): 先让 LLM 根据问题生成一个“假答案”,用这个假答案去库里搜。因为“假答案”与“真文档”在语义空间更接近,召回率往往更高。
重排序 (Rerank)
召回是为了保证“全”,重排是为了保证“准”。
- Cross-Encoder 架构: 解释为什么检索阶段用向量(快),而重排阶段用 Rerank 模型(慢但极准)。
- 实战选型: 提到 BGE-Reranker 或 Cohere Rerank。
- 工程价值: 即使初路召回了 50 个片段,通过 Rerank 选出最相关的 Top-5,能显著减少 LLM 的上下文压力,降低幻觉。
常见的 RAG 技术栈
- 框架: LangChain, LlamaIndex (目前最流行)。
- 向量存储: Pinecone, Weaviate, Milvus, FAISS (本地)。
- Embedding 模型: OpenAI
text-embedding-3-small, HuggingFace 上的 BGE 系列。 - LLM: GPT-4o, Claude 3.5, Llama 3。
RAG 的挑战与评价指标 (RAGas)
评价 RAG 好坏通常看这三个维度(RAG 三元组):
- 忠实度 (Faithfulness): 回答是否完全来自检索到的上下文?
- 相关性 (Answer Relevance): 回答是否直接解决了用户的问题?
- 上下文精度 (Context Precision): 检索回来的内容是否真的有用?
语义漂移
向量空间的“坐标偏移” (Embedding Drift)
MCP & Skills & Agent
MCP (Model Context Protocol)
定位:标准化接口协议 MCP 是由 Anthropic 推出的开放协议,旨在解决 AI 模型与外部数据源(如 GitHub、Google Drive、本地数据库)之间的连接标准。
- 本质: 一种“通用插座”。
- 作用: 允许模型通过统一的方式访问不同平台的上下文(Context)和工具,而无需为每个应用编写特定的集成代码。
- 层级: 基础设施层/通信协议层。
Skills
定位:原子的功能函数 (Functions) Skills 通常指模型能够调用的具体工具(Tool Use/Function Calling)。
- 本质: 封装好的代码逻辑或 API 调用。
- 作用: 赋予模型执行特定任务的能力,例如“查询天气”、“发送邮件”或“执行一段 Python 代码”。
- 特点: 被动的、离散的。模型只有在识别到明确需求时才会触发特定的 Skill。
Agent (智能体)
定位:具备自主性的逻辑系统 Agent 是利用 LLM 作为核心控制器,结合规划、记忆和工具调用来完成复杂目标的系统。
- 本质: “大脑 + 躯干 + 技能”的组合体。
- 作用: 给定一个模糊的目标(如“帮我写一份调研报告并同步到飞书”),Agent 会自行规划步骤:
- 搜索资料(利用 Skills);
- 整理内容(利用模型推理);
- 上传文档(利用 MCP 协议连接的存储服务)。
- 特点: 主动性、多步循环、具备自我修正能力。