深入浅出之RAG
RAG(Retrieval‑Augmented Generation,检索增强生成)
大白话:先从自己的知识库找资料,再交给大模型去回答,解决大模型幻觉、知识过时、私有数据无法输入的问题。可以说RAG是企业数智化的一项基础设施。
RAG 的整体工作流程:
1.文档上传加载
读 PDF、Markdown、数据库、网页等私有 / 外部文档
2.文档切分(Chunk 分片)
把长文档切成小段(固定长度、语义…各种切法)
3.向量化
用 Embedding 模型把文本片段转为向量,存入向量数据库
4.用户提问
用户输入问题
5.检索
检索=召回+排序。
召回:把问题向量化,在向量库做相似度搜索,取出最相关的几段原 文。也即把相关候选文档先捞出来,宁可多不要漏。允许拿一部分不相关的噪声,只求不要把真正相关的文档漏掉。多路召回,就是按多种方式召回文档片段。
重排 Rerank:将召回的文档片段,过滤噪声,选出 Top‑N 最相关片段送给大模型做上下文
通俗类比:你去图书馆找资料回答一个问题: 召回:电脑检索系统,根据关键词 + 语义,给你找出 20 本可能相关的书(会混几本不那么相关的,但是保证相关的尽量都出现) 重排:图书管理员把这 20 本翻一遍,按和你问题的相关度重新排顺序,挑出最贴合的 3‑5 本给你。 整套动作,叫检索。
6.Prompt 组装
把检索出来的参考资料 + 用户问题一起喂给大模型
7.生成答案
大模型基于给到的参考资料输出回答,尽量引用检索到的内容,减少瞎编。
曹植能七步成诗,咱七步也能做个RAG,但是做好RAG那是真不容易。
一:现在从切片开始:切片是 RAG 的地基,检索效果 70% 由切片质量决定,向量模型、重排都救不了糟糕的切片。切片根据文档类型、结构有多种切割方式:
- 固定长度切片(滑动窗口):原理:按字符 /token 固定切分,配置
chunk_size+chunk_overlap滑动重叠。
2.递归字符切片(RecursiveCharacterTextSplitter)【生产最常用】原理:按分隔符优先级递归切分,优先大粒度分隔符,块还是过大再用更小分隔符。中文分隔符顺序:\n\n段落 →。!?;句号 →,、逗号 →\n换行 → 空格 → 兜底切割。
3.文档结构切片(Structural Chunking)原理:解析文档原生结构,Markdown 标题、HTML 标签、PDF 章节、目录、列表,按标题边界切割,把标题和对应正文绑定在一起,同时把标题存入元数据 metadata。
- 语义切片(Semantic Chunking)原理:句子之间计算 embedding 相似度,当相邻句子向量相似度显著下降,判定为语义边界,在此处切分,块长度动态变化,不是固定值。
5. LLM 智能切片
原理:调用大模型让 LLM 自己理解文本,输出切分后的片段。
6. 分层 / 父子切片(Hierarchical Node,Auto‑Merging Retriever)
原理:生成两层节点:大粒度父 chunk(完整章节) + 细粒度子 chunk;向量库存子 chunk;检索命中子 chunk 后,向上拿到父 chunk 完整上下文给 LLM。
7. Late‑chunking(延迟切片)
原理:先把大段文本做 Embedding,再切分向量,而不是先切文本再分别 Embedding;保留全局语义信息。
8.上下文增强。原理:切分块后,块有前置和后置块,命中核心块后,将核心块、后置块一起交给LLM。
9.块级加标。原理:命中块,与标题信息关联。
10.文档增强。(切片、问题)
11.查询改写机制。(查询改写,回退提问,问题拆解)
12.上下文压缩、反馈闭环、自反思RAG、知识图谱、层次化索引、假设性文档生成。
然后呢?这么多,生产级 RAG 怎么切片 ?
生产几乎不会只用单一切片算法,一定是混合流水线,优先结构解析 → 递归细切;高价值文档叠加语义校验;海量文档拒绝全量 LLM 切片。
原始文档(PDF/Word/md/html)↓ 文档解析:PDF提取文本、OCR、去页眉页脚、清理乱码、表格特殊处理 ↓ 【一级切分:结构切片】 按标题、章节、段落做粗切,每个粗块携带完整元数据(文档名、章节标题、页码) ↓ 【二级切分:递归Token切片】 对每一个粗块,使用Token感知递归切片,控制chunk_size、overlap ↓ 过滤:过滤过短碎片(<50token直接合并到相邻块) ↓ 可选增强:高价值文档做语义边界微调;海量文档跳过LLM切片 ↓ 写入向量库,metadata带上:来源文档、章节标题、页码、块序号
还有,不同业务场景选型也不一样,还有:
metadata 必须携带上下文信息,每个 chunk 必须带上:文档名称、章节标题、页码、块 ID。只存裸文本,检索出来不知道属于哪个章节,很容易幻觉。
设置最小 chunk 阈值过滤 < 50token 碎片,碎片单独向量没有语义,会产生噪声召回。不要一刀切,不同文档类型不同策略,如:
- FAQ:整条不切;
- 代码:按函数 / 类切分,不要随便按 token 切割代码块;
- 表格:表格单独处理,不要直接丢进通用切片。
一定要评估切片效果,不要拍脑袋调参
构造业务真实问答测试集,评估
Recall@3、Recall@5,对比不同 chunk_size/overlap,选出数据集最优参数,不要迷信网上通用值。高级进阶方案
Contextual Retrieval(Anthropic):给每个 chunk 生成小块摘要,摘要和原始块一起入库,提升边界召回。
Small‑to‑Big 检索:检索拿到细粒度 chunk,运行时向上扩展获取更大上下文,不需要存储两层数据。
快速上线、海量文档:递归切片 + 结构预处理(优先)
二、向量化
向量化是为了后续检索召回。向量化的方式也有很多:
1.普通向量 RAG(Naive/Standard RAG) 固定流水线,向量相似度召回文本块,一次检索直接生成。
2.Advanced RAG(进阶 RAG)是****对向量 RAG 流水线做增强优化,仍然只用文本向量库,不引入图谱。 检索前:查询改写、多子查询生成、HyDE;检索后:Reranker 重排序、上下文压缩、过滤噪声
3.KG‑RAG(Graph‑RAG,Knowledge‑Graph + RAG) 向量 + 知识图谱三元组,擅长实体关系、多跳链路推理。
4.Agentic‑RAG(智能体 RAG)检索不再是固定流水线,把检索变成 Agent 的可调用工具,LLM 自主做规划、判断、循环多次检索、选择数据源、调用外部 API、SQL、搜索引擎。流程:用户问题 → Agent 规划拆解 → 判断要不要检索、去哪检索 → 可多次检索 + 反思校验 → 汇总生成。
三、检索、召回、重排
RAG 三阶段:检索 (Retrieval) → 召回 (Recall) → 重排 (Rerank)
很多人会混用这三个词,工程上边界清晰:
- 检索:整体动作统称;
- 召回:粗筛,从海量库里面捞一批候选集(追求高召回率,宁可多捞不要漏**);**
- 重排:精筛,对召回出来的候选做精细打分排序,过滤垃圾,选出最优质少量片段送入 LLM。
口诀:
检索:Hierarchical RAG 分层 RAG(父子文档 RAG)知识分层存储:文档级 → 章节级 → 细粒度 chunk。检索策略:先召回大文档 / 章节,再向下取细粒度片段,解决大文档上下文丢失问题。
召回求全,重排求精
- 召回 Recall(粗召回)
目标:把有可能相关的文档尽量捞出来,不要漏掉正确答案,允许混入无关内容。
指标重点:Recall@K,尽量让正确 chunk 落在返回的 Top‑K 候选里。
常见召回手段(多路召回 Hybrid)
- **向量召回(语义召回)**将 query 向量化,向量库做余弦相似度,返回相似度最高 N 条。优点:语义理解,同义词、转述也能匹配;缺点:专有名词、缩写容易匹配不准。
- **BM25 关键词召回(词法)**传统检索,基于词频、逆文档频率,匹配字面关键词。优点:专有名词、ID、编码匹配强;缺点:不懂语义,同义改写匹配差。
- **KG 图谱召回(KG‑RAG)**从问题提取实体,图数据库 Cypher 遍历,拿到关联实体、三元组、关联 chunk ID。
生产标准:向量 + BM25 两路召回,可选加图谱召回。多路会拿到多份候选,做结果融合(去重、简单权重打分),输出候选池,比如捞取 Top‑20~Top‑50,这一步就是召回完成。
召回阶段不做精细过滤,宁可错捞,不能漏。如果正确文档在召回阶段就不在候选池,后面重排再强也救不回来。
四、Prompt 组装
系统提示词 + 用户原始问题 + 检索回来的上下文片段 + 约束规则
重点:不是简单把文档全部堆进去,要做边界、格式、防幻觉、上下文过载控制。
- 1.多个文档片段,建议加分隔符,区分来源,避免文本粘连
- 2.适合需要标注信息出自哪篇文档,便于溯源,降低幻觉。
- 3.多轮对话,需要带上历史消息,同时引入检索上下文。
容易采坑的点:
- 上下文长度超限,检索返回过多 chunk,拼接后超过 LLM 上下文窗口,会被截断,丢失信息。
处理方案:
- rerank 重排,只取 top‑N 最相关片段,不要把全部召回结果塞进去;
- 对长 chunk 做截断;
- 监控 prompt 总 token 数量。
2. 上下文和问题混淆
必须明确标记分隔符【参考上下文】、【用户问题】,防止大模型把用户提问当成知识库内容,或者把上下文当成用户指令。
3. 防幻觉关键约束
必加两条规则:如果参考上下文没有对应信息,直接回复无法回答,禁止猜测,禁止使用外部知识。很多 RAG 效果差,不是检索不行,是 Prompt 没加这条约束,大模型直接用内部知识乱答。
4. 不要把原始大段文档直接无脑拼接
多路召回回来的 chunk,存在重复、冗余,组装前建议:
去重;
- rerank 过滤低分片段;
- 过滤无效噪声片段。
五、生成答案
dvanced RAG 进阶生成
① 反思 RAG Self‑RAG
LLM 生成同时自我校验三件事:
- 是否需要检索?
- 检索材料是否够用?
- 生成的答案是否和材料一致?材料不足则再次发起检索,多轮迭代。
② 迭代 / 递归生成(长文档 RAG)
检索出来上下文太长放不下窗口:
- 先对第一批 chunk 生成中间摘要
- 再把摘要 + 剩余 chunk 分批送入模型,逐步合并答案
③ 多查询生成 Query Rewrite
对用户问题生成多个变体 query,分别检索,再合并上下文再生成,提升召回覆盖面。
生成后处理(很多工程忽略),拿到 LLM 输出答案后,增加后置校验:
- 事实校验:答案关键语句,反向和检索 chunk 比对,看信息是否存在;
- 过滤 “无法回答” 之外的无效输出;
- 格式清洗:去掉思考标签、多余分隔符;
- 可选:引用溯源,输出对应文档片段来源
笔者利用向量库和知识图谱做了一个企业级RAG,提供"上传文档 → 自动索引 → 多路检索增强问答"的一站式能力。
技术栈
| Java 17 / Spring Boot 3.2.5 / Spring AI 1.1.2 + spring-ai-alibaba 1.1.2.3 | 基础框架 |
| MySQL 8 | 元数据、切片记录、聊天历史、索引任务(JPA) |
| Milvus | 稠密向量存储(embedding 2048 维,COSINE) |
| Neo4j | 知识图谱(HTTP 事务 API 访问) |
| Elasticsearch | 标准 BM25 关键词召回通道 |
| MinIO | 文件对象存储 |
| DashScope | 通义千问 LLM + text-embedding-v4 向量模型 |
| Spring Security | 表单登录认证 |
核心架构(RAG 流水线)
索引侧(异步任务治理):
- 上传(MinIO)→ 内容 SHA-256 去重/版本管理 → 解析(Tika)→ 元数据富化(启发式 + LLM 分类标签)→ 分片(4 种策略)→ 知识图谱抽取 → 向量入库 + MySQL 切片 + ES BM25
- 状态机:
IndexTask(PENDING/RUNNING/SUCCESS/FAILED/DEAD),指数退避自动重试,死信队列 +[PIPELINE-ALERT]告警,任务看板可手动重试/丢弃
问答侧(RagService 编排):
提示词注入检测 + PII 脱敏
(SensitiveInfoGuardService,输入/检索片段/图谱/输出全链路)
查询理解
(QueryUnderstandingService):LLM 改写 + 比较类问题拆分子查询
多路召回
(MultiRecallService):向量(Milvus) + 关键词(MySQL FULLTEXT ngram) + BM25(ES),RRF 融合
上下文压缩
(ContextCompressionService):MMR 去重 + 新鲜度过滤 + 长度截断
知识图谱多跳召回
:问题实体抽取 → 2 跳 BFS 扩展 → 三元组进 prompt(受检索过滤约束)
短期记忆
(内存 ChatMemory)+长期存储(MySQL,按用户,刷新不丢失)
流式回答 +参考来源追溯脚注
知识图谱(人工校对能力):
三元组抽取/去重(HashSet + equals/hashCode)、按文件来源标记(fileIds 多源共享)
增量更新
(updateGraph 文件级 diff,保留人工合并结果)vs 全量构建
人工校对 API:实体列表/合并/重命名/别名/类型修改/删除、相似实体合并建议(数字实体已过滤)
可视化 + 多跳召回接口
安全与治理:
- 检索质量门槛(相似度阈值 0.3)、注入片段隔离(防文档投毒)、敏感信息落库前脱敏
- 文件去重/版本管理(V1/V2…、激活版提升、恢复历史版)、删除时同步清理任务/图谱
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋
📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~