为什么需要 RAG

大语言模型很强,但有两个天然短板:

  1. 知识有截止时间,训练之后发生的事它不知道;
  2. 不了解你的私有资料,比如公司内部文档、个人笔记。

直接把所有资料塞进提示词又不现实——上下文窗口有限,全塞进去既贵又慢。RAG(Retrieval-Augmented Generation,检索增强生成) 的思路是:先从知识库里检索出与问题最相关的几段内容,再把这几段连同问题一起交给模型生成答案。

基本流程

RAG 分离线建库在线问答两个阶段。

离线:把知识切块并向量化

原始文档 → 切分成块(chunk) → 用 embedding 模型转成向量 → 存入向量数据库

切块大小是个需要权衡的参数:太大则检索不精准,太小则丢失上下文。常见做法是 300–800 字一块,并让相邻块之间有一定重叠。

在线:检索 + 生成

用户提问 → 问题向量化 → 向量库里找最相似的 top-k 块 → 
把这些块作为“上下文”拼进提示词 → 大模型基于上下文作答

一个简化的提示词模板:

请只根据下面提供的资料回答问题。如果资料中没有答案,就说“资料中未提及”。

【资料】
{检索到的若干文本块}

【问题】
{用户的问题}

几个关键点

  • Embedding 模型的选择决定检索质量,中文场景要选对中文支持好的模型。
  • 检索不只有向量:把关键词检索(BM25)和向量检索结合的「混合检索」往往效果更好。
  • 给出出处:让模型回答时标注引用了哪段资料,既能提升可信度,也方便排查“幻觉”。

小结

RAG 不需要重新训练模型,成本低、见效快,特别适合“基于一批资料回答问题”的场景——文档问答、客服知识库、个人第二大脑,都是它的主场。