ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

深入浅出之RAG

2026/8/10 23:57:52 拓冰建站 浏览量
深入浅出之RAG

RAG(Retrieval‑Augmented Generation,检索增强生成)

大白话:先从自己的知识库找资料,再交给大模型去回答,解决大模型幻觉、知识过时、私有数据无法输入的问题。可以说RAG是企业数智化的一项基础设施。

RAG 的整体工作流程:

  1. 1.文档上传加载

    读 PDF、Markdown、数据库、网页等私有 / 外部文档

  2. 2.文档切分(Chunk 分片)

    把长文档切成小段(固定长度、语义…各种切法)

  3. 3.向量化

    用 Embedding 模型把文本片段转为向量,存入向量数据库

  4. 4.用户提问

    用户输入问题

  5. 5.检索

    检索=召回+排序。

  6. 召回:把问题向量化,在向量库做相似度搜索,取出最相关的几段原 文。也即把相关候选文档先捞出来,宁可多不要漏。允许拿一部分不相关的噪声,只求不要把真正相关的文档漏掉。多路召回,就是按多种方式召回文档片段。

  7. 重排 Rerank:将召回的文档片段,过滤噪声,选出 Top‑N 最相关片段送给大模型做上下文

  8. 通俗类比:你去图书馆找资料回答一个问题: 召回:电脑检索系统,根据关键词 + 语义,给你找出 20 本可能相关的书(会混几本不那么相关的,但是保证相关的尽量都出现) 重排:图书管理员把这 20 本翻一遍,按和你问题的相关度重新排顺序,挑出最贴合的 3‑5 本给你。 整套动作,叫检索

6.Prompt 组装

把检索出来的参考资料 + 用户问题一起喂给大模型

  1. 7.生成答案

    大模型基于给到的参考资料输出回答,尽量引用检索到的内容,减少瞎编。

曹植能七步成诗,咱七步也能做个RAG,但是做好RAG那是真不容易。

一:现在从切片开始:切片是 RAG 的地基,检索效果 70% 由切片质量决定,向量模型、重排都救不了糟糕的切片。切片根据文档类型、结构有多种切割方式:

  1. 固定长度切片(滑动窗口):原理:按字符 /token 固定切分,配置chunk_size+chunk_overlap滑动重叠。

2.递归字符切片(RecursiveCharacterTextSplitter)【生产最常用】原理:按分隔符优先级递归切分,优先大粒度分隔符,块还是过大再用更小分隔符。中文分隔符顺序:\n\n段落 →。!?;句号 →,、逗号 →\n换行 → 空格 → 兜底切割。

3.文档结构切片(Structural Chunking)原理:解析文档原生结构,Markdown 标题、HTML 标签、PDF 章节、目录、列表,按标题边界切割,把标题和对应正文绑定在一起,同时把标题存入元数据 metadata。

  1. 语义切片(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带上:来源文档、章节标题、页码、块序号

还有,不同业务场景选型也不一样,还有:

  1. metadata 必须携带上下文信息,每个 chunk 必须带上:文档名称、章节标题、页码、块 ID。只存裸文本,检索出来不知道属于哪个章节,很容易幻觉。

  2. 设置最小 chunk 阈值过滤 < 50token 碎片,碎片单独向量没有语义,会产生噪声召回。不要一刀切,不同文档类型不同策略,如:

  • FAQ:整条不切;
  • 代码:按函数 / 类切分,不要随便按 token 切割代码块;
  • 表格:表格单独处理,不要直接丢进通用切片。
  1. 一定要评估切片效果,不要拍脑袋调参

    构造业务真实问答测试集,评估Recall@3、Recall@5,对比不同 chunk_size/overlap,选出数据集最优参数,不要迷信网上通用值。

  2. 高级进阶方案

  3. Contextual Retrieval(Anthropic):给每个 chunk 生成小块摘要,摘要和原始块一起入库,提升边界召回。

  4. Small‑to‑Big 检索:检索拿到细粒度 chunk,运行时向上扩展获取更大上下文,不需要存储两层数据。

  5. 快速上线、海量文档:递归切片 + 结构预处理(优先)

二、向量化

向量化是为了后续检索召回。向量化的方式也有很多:

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)

很多人会混用这三个词,工程上边界清晰:

  1. 检索:整体动作统称;
  2. 召回:粗筛,从海量库里面捞一批候选集(追求高召回率,宁可多捞不要漏**);**
  3. 重排:精筛,对召回出来的候选做精细打分排序,过滤垃圾,选出最优质少量片段送入 LLM。

口诀:

检索:Hierarchical RAG 分层 RAG(父子文档 RAG)知识分层存储:文档级 → 章节级 → 细粒度 chunk。检索策略:先召回大文档 / 章节,再向下取细粒度片段,解决大文档上下文丢失问题。

召回求全,重排求精

  1. 召回 Recall(粗召回)

目标:把有可能相关的文档尽量捞出来,不要漏掉正确答案,允许混入无关内容。

指标重点:Recall@K,尽量让正确 chunk 落在返回的 Top‑K 候选里。

常见召回手段(多路召回 Hybrid)

  1. **向量召回(语义召回)**将 query 向量化,向量库做余弦相似度,返回相似度最高 N 条。优点:语义理解,同义词、转述也能匹配;缺点:专有名词、缩写容易匹配不准。
  2. **BM25 关键词召回(词法)**传统检索,基于词频、逆文档频率,匹配字面关键词。优点:专有名词、ID、编码匹配强;缺点:不懂语义,同义改写匹配差。
  3. **KG 图谱召回(KG‑RAG)**从问题提取实体,图数据库 Cypher 遍历,拿到关联实体、三元组、关联 chunk ID。

生产标准:向量 + BM25 两路召回,可选加图谱召回。多路会拿到多份候选,做结果融合(去重、简单权重打分),输出候选池,比如捞取 Top‑20~Top‑50,这一步就是召回完成。

召回阶段不做精细过滤,宁可错捞,不能漏。如果正确文档在召回阶段就不在候选池,后面重排再强也救不回来。

四、Prompt 组装

系统提示词 + 用户原始问题 + 检索回来的上下文片段 + 约束规则

重点:不是简单把文档全部堆进去,要做边界、格式、防幻觉、上下文过载控制。

  • 1.多个文档片段,建议加分隔符,区分来源,避免文本粘连
  • 2.适合需要标注信息出自哪篇文档,便于溯源,降低幻觉。
  • 3.多轮对话,需要带上历史消息,同时引入检索上下文。

容易采坑的点:

  1. 上下文长度超限,检索返回过多 chunk,拼接后超过 LLM 上下文窗口,会被截断,丢失信息。

处理方案:

  1. rerank 重排,只取 top‑N 最相关片段,不要把全部召回结果塞进去;
  2. 对长 chunk 做截断;
  3. 监控 prompt 总 token 数量。

2. 上下文和问题混淆

必须明确标记分隔符【参考上下文】【用户问题】,防止大模型把用户提问当成知识库内容,或者把上下文当成用户指令。

3. 防幻觉关键约束

必加两条规则:如果参考上下文没有对应信息,直接回复无法回答,禁止猜测,禁止使用外部知识。很多 RAG 效果差,不是检索不行,是 Prompt 没加这条约束,大模型直接用内部知识乱答。

4. 不要把原始大段文档直接无脑拼接

多路召回回来的 chunk,存在重复、冗余,组装前建议:

去重;

  1. rerank 过滤低分片段;
  2. 过滤无效噪声片段。

五、生成答案

dvanced RAG 进阶生成

① 反思 RAG Self‑RAG

LLM 生成同时自我校验三件事:

  1. 是否需要检索?
  2. 检索材料是否够用?
  3. 生成的答案是否和材料一致?材料不足则再次发起检索,多轮迭代。
② 迭代 / 递归生成(长文档 RAG)

检索出来上下文太长放不下窗口:

  • 先对第一批 chunk 生成中间摘要
  • 再把摘要 + 剩余 chunk 分批送入模型,逐步合并答案
③ 多查询生成 Query Rewrite

对用户问题生成多个变体 query,分别检索,再合并上下文再生成,提升召回覆盖面。

生成后处理(很多工程忽略),拿到 LLM 输出答案后,增加后置校验:

  1. 事实校验:答案关键语句,反向和检索 chunk 比对,看信息是否存在;
  2. 过滤 “无法回答” 之外的无效输出;
  3. 格式清洗:去掉思考标签、多余分隔符;
  4. 可选:引用溯源,输出对应文档片段来源

笔者利用向量库和知识图谱做了一个企业级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 编排):

  1. 提示词注入检测 + PII 脱敏

    (SensitiveInfoGuardService,输入/检索片段/图谱/输出全链路)

  2. 查询理解

    (QueryUnderstandingService):LLM 改写 + 比较类问题拆分子查询

  3. 多路召回

    (MultiRecallService):向量(Milvus) + 关键词(MySQL FULLTEXT ngram) + BM25(ES),RRF 融合

  4. 上下文压缩

    (ContextCompressionService):MMR 去重 + 新鲜度过滤 + 长度截断

  5. 知识图谱多跳召回

    :问题实体抽取 → 2 跳 BFS 扩展 → 三元组进 prompt(受检索过滤约束)

  6. 短期记忆

    (内存 ChatMemory)+长期存储(MySQL,按用户,刷新不丢失)

  7. 流式回答 +参考来源追溯脚注

知识图谱(人工校对能力):

  • 三元组抽取/去重(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时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费