RAG
一、为什么需要 RAG
RAG(Retrieval-Augmented Generation,检索增强生成)是大模型应用里的核心技术之一,常见于:
- 企业知识库问答
- 客服机器人
- 文档助手
虽然大模型能力很强,但直接回答业务问题仍有三个典型限制:
- 容易幻觉:当训练数据没有答案时,模型往往会继续“编”一个看起来合理的答案。
- 知识时效性不足:训练数据有时间截止,之后发生的新信息模型默认不知道。
- 无法直接访问私有数据:企业内部文档、团队规则、家庭/组织私有知识不在预训练语料里。
为什么不把整个知识库一次性塞进提示词?
- 上下文窗口有限,信息过多会导致注意力分散。
- 计算成本高。
- 响应速度慢,用户体验差。
所以更合理的做法是:
先检索最相关资料,再基于资料生成答案。
二、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 在回答前先找到对的资料,再依据资料作答”。
这也是企业知识问答系统从“能聊”走向“可用、可信”的关键一步。