简介:RAG(检索增强生成)是一种先从外部知识库检索相关资料、再让大语言模型基于资料生成答案的AI架构。本文系统讲解RAG的定义与背景、核心组件与“检索—增强—生成”两阶段工作流程,辨析其与微调、长上下文等方案的区别,并梳理典型应用场景与落地注意事项,帮助读者快速建立完整、可实践的技术认知。
RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索与大语言模型(LLM)生成能力相结合的人工智能架构。它的基本思路可以概括为一句话:在模型回答之前,先从外部知识库中检索出与问题相关的资料片段,将其作为上下文一并输入大模型,让模型“看着资料作答”,而不是仅凭参数中记忆的知识作答。
该架构于2020年由某大型科技公司的人工智能研究团队在一篇论文中首次正式提出。理解RAG可以从三个视角切入:
其核心流程通常被概括为“检索(Retrieve)—增强(Augment)—生成(Generate)”三个环节。
纯大语言模型在实际落地时普遍面临三类难以回避的问题:
RAG为上述问题提供了一条更经济的路径:知识更新只需更新外部知识库,无需重训模型,可实现近实时的知识刷新;回答建立在检索到的资料之上,显著降低了凭空编造的概率;私有数据以“运行时挂载”的方式接入,数据本身不进入模型参数。由此带来了知识实时更新、计算成本相对较低、易于接入领域知识三大核心优势。
一个典型的RAG系统由五个部分构成:
RAG的运行分为“离线索引”与“在线问答”两个阶段。
离线索引阶段:原始文档 → 文本抽取 → 分块 → 嵌入向量化 → 写入向量数据库。
在线问答阶段:用户提问 → 查询向量化 → 向量检索召回Top-K候选 → (可选)重排序 → 上下文拼接 → 大模型生成 → 返回答案与引用。
# 伪代码:RAG 两阶段流程示意# ---------- 阶段一:离线索引 ----------for doc in load_documents("知识库目录"):chunks = split(doc, size=512, overlap=64) # 文档切分(含重叠)vectors = embed_model.encode(chunks) # 向量化vector_db.upsert(vectors, chunks, meta=doc) # 写入向量库# ---------- 阶段二:在线问答 ----------def answer(question: str) -> str:q_vec = embed_model.encode([question]) # 查询向量化hits = vector_db.search(q_vec, top_k=5) # 相似度召回hits = reranker.rerank(question, hits) # (可选)重排序context = "\n".join(h.text for h in hits) # 组装上下文prompt = f"请仅依据以下资料回答问题:\n{context}\n问题:{question}"return llm.generate(prompt) # 增强生成
两个关键点值得强调:其一,相似度通常采用余弦相似度等方式计算,即比较查询向量与文档向量之间的夹角;其二,检索质量决定生成质量的上限——如果检索环节没有召回正确资料,再强的生成模型也无法给出正确答案,即所谓“垃圾进,垃圾出”。
在工程实践中,包括百度智能云在内的主流云服务商通常提供向量数据库、大模型推理、嵌入模型等通用能力,开发者可以结合自身技术栈选型,降低自建RAG系统的门槛。
1. RAG与微调(Fine-tuning)
| 维度 | RAG | 微调 |
|---|---|---|
| 知识更新 | 更新知识库即可,近实时生效 | 需重新训练,周期长 |
| 成本结构 | 以推理与检索成本为主 | 训练算力与数据标注成本高 |
| 可解释性 | 可给出引用来源,便于核验 | 知识隐含在参数中,难溯源 |
| 适用目标 | 注入事实性、时效性知识 | 调整输出风格、格式与领域行为 |
两者并不互斥,实践中常组合使用:先微调让模型适配领域表达方式,再通过RAG注入动态更新的知识。
2. RAG与长上下文:长上下文方案是把资料直接塞入提示词,受窗口长度与推理成本限制,且无法覆盖海量知识库;RAG按需检索、只取相关片段,扩展性更好。两者可结合使用,检索负责“找对资料”,长上下文负责“读全资料”。
3. RAG与传统搜索:传统搜索返回文档列表,仍需人工阅读筛选;RAG进一步由模型阅读资料并生成直接答案,用户体验从“检索”升级为“问答”。
4. 演进形态:基础形态称为朴素RAG(Naive RAG);在此基础上增加查询改写、混合检索(向量+关键词)、重排序、分块优化等手段的称为高级RAG(Advanced RAG);引入知识图谱等结构化知识、增强跨文档多跳推理能力的则是GraphRAG。此外,RAG还在与智能体(Agent)范式融合,由模型自主决策“是否检索、检索什么、检索几轮”。
回到定义本身:RAG通过“检索—增强—生成”三步,把大模型强大的生成能力与外部知识库的实时性、专业性结合在一起,以相对较低的成本缓解了知识过时、幻觉与私有数据接入三大痛点。它尤其适合事实性强、知识更新频繁、需要答案可溯源的问答与生成场景;而在风格、格式等行为层面的需求上,则更适合与微调配合使用。对于希望构建企业知识库、智能客服等AI应用的开发者和企业而言,RAG是当前最务实的技术路径之一,其持续演进的形态也在不断拓宽大模型应用的能力边界。