Skip to content

RAG

一、为什么需要 RAG

RAG(Retrieval-Augmented Generation,检索增强生成)是大模型应用里的核心技术之一,常见于:

  • 企业知识库问答
  • 客服机器人
  • 文档助手

虽然大模型能力很强,但直接回答业务问题仍有三个典型限制:

  1. 容易幻觉:当训练数据没有答案时,模型往往会继续“编”一个看起来合理的答案。
  2. 知识时效性不足:训练数据有时间截止,之后发生的新信息模型默认不知道。
  3. 无法直接访问私有数据:企业内部文档、团队规则、家庭/组织私有知识不在预训练语料里。

为什么不把整个知识库一次性塞进提示词?

  • 上下文窗口有限,信息过多会导致注意力分散。
  • 计算成本高。
  • 响应速度慢,用户体验差。

所以更合理的做法是:

先检索最相关资料,再基于资料生成答案。

二、RAG 的核心流程

可以分成两个阶段:

2.1 数据准备阶段

1) 文档切分(Chunking)

把长文档拆成多个语义相对完整的小块。常见切分方式:

  • 按章节
  • 按段落
  • 按固定字数(如 500 字)

目标:让每个块既不过大也不过小,便于后续检索。

2) 向量化(Embedding)

把每个文本块编码成向量。向量可以理解为语义空间里的坐标:

  • 语义越接近,向量距离越近
  • 语义差异越大,向量距离越远

真实场景中向量维度通常是几百到上千维,不是简单二维。

3) 建库(向量数据库)

将“文本块 + 对应向量”一起存入向量数据库,供在线检索使用。

2.2 用户提问阶段

1) 问题向量化

把用户问题也编码成向量。

2) 相似度召回(Top-K)

用问题向量和库中向量计算相似度,常见方法:

  • 余弦相似度
  • 欧式距离

先召回最相关的 Top-K 片段(粗筛)。

3) 重排序(Rerank)

用更强模型对候选片段重新打分,筛出真正能回答问题的片段(精筛)。

4) 组装 Prompt 并生成

将以下内容拼成 Prompt:

  • 用户问题
  • 检索到的参考资料
  • 约束指令(如“严格基于资料回答,不知道就明确说明”)

再交给大模型生成最终答案。

核心理解:

RAG 不改变大模型本体,而是在回答前增加“查资料”能力。

三、落地中的关键卡点与优化

3.1 数据清洗质量

企业数据往往是 PDF、表格、图片等混合格式。若解析质量差,后续流程再好也难得到正确答案。

常见配套能力:

  • OCR 识别
  • 版面分析
  • 非结构化文档解析

3.2 切分策略

切块太大:主题混杂,召回不准。
切块太小:语义断裂,上下文丢失。

目标是让信息颗粒度“刚好”。

3.3 查询改写(Query Rewrite)

用户问题常常很短、口语化、模糊。可先进行问题重写,把隐含需求补全,让检索更贴近知识库表达。

例如把“张三是谁”扩展为:

  • 张三的性别
  • 年龄
  • 家庭
  • 住址

3.4 混合检索

常见组合是:

  • 关键词检索(字面匹配强)
  • 向量检索(语义匹配强)

两者结合可互补盲区,通常比单一方式更稳。

3.5 基座模型选型

模型至少要满足:

  • 幻觉可控
  • 稳定
  • 指令遵循好

在安全和部署需求较强场景下,开源模型本地化部署通常更可控。

四、总结

RAG 的重点不是“让 AI 更聪明”,而是“让 AI 在回答前先找到对的资料,再依据资料作答”。

这也是企业知识问答系统从“能聊”走向“可用、可信”的关键一步。

Released under the MIT License.