跳到主要内容
版本:Next

RAG 基础原理

RAG(Retrieval-Augmented Generation,检索增强生成)是一种让大模型在生成答案前访问外部知识的技术。它适合处理模型训练数据中没有的私有知识、实时信息和领域文档。

RAG 的核心目标不是把整座知识库塞给模型,而是为当前问题选择恰到好处的上下文:

用户问题
↓
问题向量化
↓
从知识库召回相关文本
↓
将问题与上下文组装为提示词
↓
大模型生成答案

建立索引​

建立索引发生在用户提问之前,通常包含四个步骤:

  1. 文档解析:将 PDF、Markdown、Word 等文件加载为可处理的文本。
  2. 文本分段:把长文档切分成多个语义相对完整的片段(chunk)。
  3. 文本向量化:使用 Embedding 模型将文本片段转换为向量。
  4. 存储索引:将向量、原文和元数据写入向量存储,供后续查询。

文本切分需要在片段长度和上下文完整性之间平衡。片段过小容易丢失语义,片段过大则会引入噪声并增加上下文成本。相邻片段之间保留少量重叠(chunk_overlap),可以降低切分位置造成的信息断裂。

检索与生成​

检索​

检索阶段先将用户问题向量化,再与知识库中的向量进行相似度比较,召回 Top-K 个文本片段。余弦相似度是常见的相似度指标:

cosine(A, B) = (A · B) / (||A|| × ||B||)

相似度越高,表示两个向量的语义方向越接近。向量数据库通常使用近似最近邻(ANN)算法提升大规模数据下的检索速度,HNSW 是常见的实现之一。

生成​

生成阶段将召回的上下文和用户问题填入提示词模板,再交给大模型作答:

请根据以下参考信息回答问题,不要使用参考信息之外的事实。

参考信息:
{context}

问题:
{question}

检索决定模型“看到了什么”,生成决定模型“如何表达”。如果召回结果不相关,单纯优化提示词通常无法从根本上解决问题。

向量存储​

向量存储至少需要支持以下操作:

操作作用
写入 / Upsert保存向量、原文和元数据
查询 / Search根据查询向量返回最相关的 Top-K 结果
更新 / 删除随知识库内容变化维护索引

常见选型包括:

方案特点适用场景
内存向量存储配置简单、启动快学习和原型开发
FAISS纯向量检索、可定制实验和本地应用
Chroma轻量、嵌入式小型项目
Milvus / Qdrant可持久化、支持更大规模生产环境

常见问题​

  • 知识库没有覆盖问题:无论如何调参,模型都无法从知识库中检索到不存在的事实,需要补充知识。
  • 召回了错误片段:应检查切分方式、Embedding 模型、查询表达和排序策略。
  • 上下文过多:无关片段会增加成本,并可能降低模型的回答质量。
  • 缺少来源信息:建议保留文件名、页码、章节等元数据,便于回答溯源和调试。

范式演进​

本文描述的是朴素 RAG(Naive RAG)的形态。随着需求变复杂,RAG 大致经历了四个阶段:

范式核心思路关键词
Naive RAG固定管线:切片 → 向量召回 → 生成Top-K
Advanced RAG检索前后引入查询变换、混合检索、重排序模块优化
Modular RAG各环节组件化,按需编排路由、流水线组合
Agentic RAG把检索变成工具,由 LLM 动态决策流程自主规划、自我纠错

本分类按这个脉络展开:先掌握基础原理与LlamaIndex 实战,建立评测与优化的迭代闭环,再进入高级 RAG 技术、Agentic RAG与方案选型。当检索决策开始交给模型时,就已经踏入了 Agent 的世界,可继续阅读 Agents 分类。