0-RAG 介绍

一、介绍

RAG,Retrieval-Augmented Generation,也被称作检索增强生成技术,核心思想是借助一些文本检索策略,让大模型每次问答前都带入相关文本,以此来改善大模型回答时的准确性。

flowchart TB subgraph 离线阶段["📦 离线阶段(数据预处理)"] A[原始文档<br>PDF/Word/网页] --> B[文档解析与清洗] B --> C[文本分块<br>Chunking] C --> D[向量化<br>Embedding模型] D --> E[(向量数据库<br>存储)] end subgraph 在线阶段["🚀 在线阶段(问答推理)"] F[用户提问] --> G[问题向量化<br>同Embedding模型] G --> H[向量相似度检索] E --> H H --> I[召回Top-K相关文档块] I --> J[构建增强Prompt<br>上下文 + 问题] J --> K[大模型生成答案] K --> L[返回用户] end style A fill:#e1f5fe style E fill:#fff9c4 style F fill:#e1f5fe style K fill:#c8e6c9

二、步骤

阶段一:离线阶段(数据准备)—— 只做一次

这个阶段的目标是把外部知识“翻译”成机器能快速检索的格式。

步骤 做什么? 技术细节
① 文档加载 接入各种数据源 PDF、Word、Markdown、数据库、网页等,用 LangChainDocumentLoader 统一读取
② 文本清洗 去掉噪音 去除页眉页脚、特殊字符、多余换行,保留纯文本内容
③ 文本分块(Chunking) 切分成小段落 按固定大小(如 500 字符)或按语义(段落/标题)切分,块太小丢上下文,块太大检索不精准
④ 向量化(Embedding) 把文本转成向量 用 Embedding 模型(如 text-embedding-3-smallBGE)将每块文本转为高维向量(比如 1536 维浮点数数组)
⑤ 存入向量数据库 建立索引 存入 MilvusPineconeChromaQdrant 等,同时存储向量 + 原始文本

阶段二:在线阶段(问答推理)—— 每次提问都执行

这个阶段负责接收用户问题,检索资料,然后生成回答。

步骤 做什么? 技术细节
① 用户提问 接收问题 如:“RAG 和微调有什么区别?”
② 问题向量化 把问题转为向量 使用与离线阶段相同的 Embedding 模型,保证向量空间一致
③ 相似度检索 从向量库找最相关的块 余弦相似度内积计算,召回 Top-K 个最相似的文档块(K 通常为 3-5)
④ 构建 Prompt 把资料和问题组装 形成结构:“基于以下参考资料回答问题:\n[文档块1]\n[文档块2]\n\n问题:xxx”
⑤ 大模型生成 调用 LLM 生成答案 模型基于提供的上下文生成回答,不依赖内部记忆
⑥ 返回结果 输出答案 + 可选来源 最佳实践:同时返回引用的文档来源,增强可信度

三、核心要点与常见坑

成功的关键要素

要素 说明
分块策略 块太小 → 上下文缺失;块太大 → 检索噪声多。推荐 500-1000 字符 + 重叠(Overlap)
Embedding 模型 必须与检索场景匹配。中文场景用 BGE-M3text-embedding-v3,英文用 OpenAI 系列
Top-K 调优 K=3~5 是黄金区间,太少可能漏关键信息,太多会塞入噪音干扰模型
Prompt 设计 明确指令:“如果参考资料中没有答案,请直接说不知道,不要编造
向量数据库 小规模用 Chroma(本地),大规模用 Milvus(分布式)

常见问题与解法

问题现象 可能原因 解决方案
检索到的资料不相关 Embedding 模型能力不足 换用更强的 Embedding 模型,或尝试 HyDE(让模型先假装生成答案,再用答案去检索)
答案依然有幻觉 检索块内容不完整 增加 Top-K,或调整分块策略(如按段落切分)
响应太慢 向量检索耗时 + LLM 生成慢 加缓存(Redis),或换用更快的 Embedding 模型
多轮对话时丢失上下文 只检索了最新问题 历史对话摘要 后再检索,或使用 RAG 与 Memory 结合 的方案

四、文档、PDF、课件是如何切分、入库、人工审核的?

4.1 文档处理的完整链路

整个过程可以拆成五个环节:格式识别 → 内容抽取 → 智能切分 → 质量预审 → 人工审核入库。每一步都在为下一步做准备,不能跳过,也不能颠倒顺序。


4.2 格式识别与内容抽取

不同格式的文档,解析策略完全不同。入库前先判断文档属于哪一类,再选择对应的抽取方式。

文档类型 典型特征 抽取策略
文本型 PDF 可选择复制文字,排版规整 直接用解析库读取文字流,保留段落和标题
扫描型 PDF 图片格式,无法选中文字 走 OCR 识别,先转图片再提取文字
Word 文档 有标题层级、表格、图片 按段落和标题层级读取,保留结构信息
PPT 课件 每页有标题和若干要点 逐页提取标题和要点列表,不拆分单页内的内容
网页文章 有 HTML 标签 用正文抽取工具剥离广告、导航、页脚
Excel 表格 行列结构 按行转成"字段名 + 值"的自然语言描述
Markdown 文档 有 # ## ### 标题标记 按标题层级切分,保留章节路径

这个阶段的三个常见坑:

  • PDF 的双栏排版会导致文字读取顺序错乱,需要用基于坐标的解析方式,而不是按行顺序读
  • OCR 识别率受图片质量影响很大,扫描件模糊时建议先做图像增强
  • PPT 里的图片和图表中的文字无法自动抽取,需要人工补录或单独处理

4.3 智能切分策略

切分是整条链路中最容易被低估的环节。切得太碎,上下文断裂,检索时找不到完整信息;切得太粗,块内噪音太多,检索精度下降。

不同文档类型,切分策略完全不同,不能一刀切。

文档类型 首选切分方式 块的大致范围 重叠量
Word 正式文档 按标题层级切,一级标题下的内容作为一个块 600-1000 字 100-150 字
学术论文 PDF 按章节切,Introduction/方法/结论各为独立块 800-1200 字 100-200 字
PPT 课件 一页一个块,保留标题加所有要点 300-500 字 50 字左右
扫描版 PDF 按自然段落切,不跨段落合并 400-600 字 80 字左右
FAQ 问答文档 问题和答案作为一个整体,不拆分 完整 QA 对 不重叠
法律条款 按条款编号切,一条一档 800-1200 字 150 字左右
技术 API 文档 按函数或接口切,一个接口一个块 300-500 字 50 字左右
多列杂志排版 按物理区域切,先分列再分段 400-600 字 80 字左右

对于没有明确结构的文档,兜底方案是按固定字数切分,同时保持相邻块之间有适当重叠,防止关键信息被切断。但兜底方案的效果永远不如针对性策略,所以入库前花时间判断文档类型非常值得。

PPT 课件是特殊案例,它和普通文档不同,每一页本身就是一个独立的知识单元,强行按字数切分会破坏"一页一个主题"的逻辑结构。正确做法是整页作为一个块,如果某一页内容确实过长,再考虑拆成两到三个块,但需要保留它们属于同一页的元数据关联。


4.4 元数据标注

每个知识块入库时必须携带足够的元数据,这决定了后续检索时能不能做精准过滤。

需要标注的元数据可以分为五类:

类别 具体字段 用途
来源信息 文档编号、文件名、文件类型、页码 定位原始出处,支持引用溯源
结构信息 章节路径、标题层级、块类型 保持文档层次,支持按章节检索
组织信息 部门、项目、租户标识 多租户隔离,权限控制
时间信息 发布时间、入库时间 时间范围过滤,时效性控制
标签信息 人工打标、自动提取的关键词 分类检索,主题过滤

元数据标注做得越细,后续检索时"分桶"的效果就越好。比如只搜索某个部门近三个月发布的文档,如果元数据里有部门和日期字段,向量检索前就能先把范围缩小到原来的十分之一甚至百分之一。


4.5 入库前的质量预审

在人工审核之前,先做一轮机器预审,把明显合格和明显不合格的筛出来,减少人工阅读量。

预审主要看四个维度:

评估维度 判断标准 处理方式
内容长度 太短(低于 20 字)或太长(超过 2000 字) 过短直接丢弃或合并,过长标记复审
噪音比例 乱码、特殊字符、不可识别符号的占比 占比超过 30% 标记为低质量
语言统一性 中文混杂大量无关外文或无意义符号 严重混杂标记为待审核
语义完整性 是否在句中被截断,是否以完整句号或问号结尾 明显截断的标记为待合并

基于这四个维度的综合评分,可以把知识块分成三个等级:

质量等级 评分范围 审核策略
80 分及以上 自动化入库,免人工审核
60 到 79 分 抽样审核,覆盖比例 20%
60 分以下 全量人工审核,逐条过

这样做的收益很明显:大多数高质量块可以直接入库,人工审核精力集中在"不确定"和"有问题"的块上,效率比逐条审核高出三到五倍。


4.6 人工审核机制

人工审核的核心原则是:不是让审核员逐字阅读所有内容,而是用分层抽样加异常追踪的方式,把精力花在刀刃上。

审核员的角色与职责

角色 职责 关注重点
业务审核员 判断内容准确性、适用性 表述是否准确、是否符合业务规范、是否有过时信息
格式审核员 判断切分合理性和元数据准确性 切分是否破坏了语义完整、元数据标签是否准确
终审人 处理争议、裁决是否入库 业务和格式审核意见不一致时的最终判断

抽样策略

不同质量等级采用不同的抽样比例:

质量等级 抽样比例 抽样方式
中等级(60-79分) 20% 随机抽取,覆盖所有文档来源
低等级(60分以下) 100% 逐条审核,全部过手
新文档类型首次入库 50% 首次出现的新格式,多抽一些建立基线

抽样审核中发现的问题需要分类统计,用于指导后续的自动化改进:

问题类型 处理方式 改进方向
切分不当(上下文断裂) 重新切分或合并相邻块 优化该类型文档的切分参数
元数据错误(标签不准、章节错位) 修正元数据 优化自动标注逻辑或增加人工干预点
内容重复(不同块内容高度重叠) 删除冗余块 提高去重阈值
业务信息过时 删除或标记为过期 建立文档时效性管理机制

审核流程的操作规则

正式上线后,推荐采用以下操作规则:

第一条,知识块进入审核队列后,机器预审的结果和评分要一并呈现给审核员,作为参考但不替代判断。

第二条,审核员有三种操作选项:直接通过、退回修改、拒绝入库。每种操作都需要填写简要原因。

第三条,退回修改的块,修改后重新进入审核队列,但审核员可以看到前一次被退回的原因,便于对照。

第四条,每周做一次问题汇总,统计本周最常见的问题类型,据此调整切分参数或预审规则。

第五条,每个月做一次抽样质量审计,随机抽取已入库的块做质量复检,发现问题追溯成因并修正流程。


4.7 常见问题与应对

问题现象 根本原因 应对方法
检索不到相关内容 切分太粗或太碎,语义单元偏离用户意图 调整该文档类型的切分粒度和策略
检索到的内容不相关 元数据标注不准确,或分块时跨主题混入噪音 加强人工审核中的格式检查,优化切分边界
知识块之间有大量重复 去重阈值设置过低 提高语义去重的相似度阈值
PDF 解析乱码 PDF 本身是扫描件或字体嵌入不完整 先做 OCR,再进行文字提取
课件检索效果差 PPT 按字数切分破坏了每页的完整性 改为一页一块的策略
审核效率太低 审核流程设计不合理,高等级块也逐条过 实施分层审核,高等级免审,中等级抽样
新文档类型入库后效果差 没有针对该类型的切分策略 先用兜底策略入库,跑两轮后根据效果调优

posted @ 2026-07-08 09:45  LHX2018  阅读(11)  评论(0)    收藏  举报