RAG笔记

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

先从资料库里检索相关内容,再基于这些内容生成答案。

提问前:分片,索引;提问后:召回,重排,生成。

核心

知识库 <-> 用户query 的双向奔赴,构建私有知识库,提升对话能力。

Agentic RAG: RAG之前,有小的agent识别用户的query,是否要改写,以及要改写成几条query。

知识库:大段大段文字,描述某种信息和知识。

数据库:商品数据库,例如找500元钱以下的商品。

知识库

对场景的理解:理解用户会怎么问问题,问什么问题

对技术的理解:不同类型的问题

由知识切片生成问题

知识切片:每取1000个字,由LLM判断讲的主题的文字范围,以此切分为“知识切片”。合理范围:一条知识切片为500到800字。迭代提示词,可以切得更顺畅。

Function Call:根据用户的问题,大语言模型有一种能力,自主判断是否自己可以回答,或者是否调用某些工具,以及参数是什么。一个工作流或skill都是工具。

流程图

RAG 可以拆分为两条流水线

1. 离线索引(Indexing Pipeline)
   原始文档
      ↓
Document Parsing(OCR/Layout Analysis/VLM)
      ↓
Structure-Aware Chunking
      ↓
 Metadata构建
      ↓
  Embedding
      ↓
Save to Vector Database

2. 在线检索(Serving Pipeline)
用户Query
    ↓
Query理解/改写(可选)
    ↓
Hybrid Retrieval(BM25 + Vector Search)
    ↓
Reranker
    ↓
Prompt Assembly(Context + Metadata)
    ↓
   LLM
    ↓
Answer + Citation

脏文档输入->解析层(结构解析->多模态处理->结构感知切片)->检索层(多路召回/向量入库->重排)->溯源组装LLM

解析难题

Word(DOCX)本质是 XML,天然具有树状语义结构,标题层级明确,表格边界明确,阅读顺序明确,因此解析难度相对较低。

PDF 本质上不是文档结构,而是一张带有文字坐标的二维画布。它只记录:文字内容+文字位置,而不记录:阅读顺序/章节结构/段落关系。因此 PDF 是企业知识库建设中的最大难点之一。

陷阱:双栏排版,跨页表格,表格中有合并单元格

历史档案与扫描件:直接用多模态(MultiModal)兜底,VLM(Visual Language Model)

防止翻车兜底思维:如果置信度评估(Confidence Check)小于阈值,说明文档识别率低/乱码,设置防线,进入人工审核池/高成本多模态兜底。

切片(Chunking)

大模型上下文有限,无法直接把整份文档送进去,因此需要切片。

目标:保持语义完整,不要把一句话拆断。保持逻辑完整,不要把同一段内容拆散。提高检索效果,确保检索到的Chunk能独立表达完整信息。

1.递归切片(Recursive Chunking)

基于字符与层级规则,使用一组预定义的分隔符(如段落、句子、空格等)按层级递归切分,直到块大小达标。速度快,纯字符串处理,不依赖模型。

但是:分隔符是写死的,碰到不规范排版容易翻车,且只看语法结构,不理解内容。

2.语义切片(Semantic Chunking)

基于内容与意义。通过计算句子embedding之间的语义相似度,在主题发生“跳变”的自然边界处切分。块大小不固定,但能完整保留语义,显著提升检索准确度,但成本极高

步骤:切句子 -> 逐句Embedding -> 计算相邻句子语义距离 -> 确定断点阈值 -> 合并句子形成chunk。

如果:similarity突然下降,例如:0.92,0.90,0.88,0.32←语义断点,0.89,就在这里切分。这种位置称为:Semantic Breakpoint(语义断点)

阈值设置方法:例如百分位法(Percentile),把所有相邻句子的距离排序,取第95百分位当阈值,超了就切。最常用,因为它能自适应不同文档的距离分布。文档主题切换频繁就调低到90甚至85。

3.结构感知切片(Structure-Aware Chunking)

利用文档的结构(标题、章节、表格、代码块)切分,是现代企业 RAG 的首选。顺应标题层级以及段落边界,其中代码表格绝对不能拆分,即顺藤摸瓜,根据文档本身的排版逻辑(如一级标题、二级标题、表格、代码块)进行切分。

例如,识别到

标签或markdown表格语法,完整提取整个表格作为一个独立的 Chunk,并自动把上层的“一季度财报”标题作为元数据(metadata)挂载在这个chunk上。

Core Definitions:

  • Recursive Chunking: Blind Splitting. It splits text purely based on a hierarchy of separators (like paragraphs, sentences, and spaces) until the chunk size falls under a fixed token limit.
  • Semantic Chunking: Content-Driven Splitting. It uses an embedding model to calculate the semantic similarity between adjacent sentences. It cuts the text only when the topic changes.
  • Structure-Aware Chunking: Layout-Driven Splitting. It parses the structural elements of a document (such as Markdown headers, HTML tags, PDF sections, or tables) and splits text along those natural boundaries.

Recursive Chunking 是按照文档结构和长度递归切分,不理解内容;Semantic Chunking 是利用 Embedding 检测语义变化,在主题切换处切分,因此语义完整性更好,但计算成本更高。

Embedding

索引:通过Embedding将片段文本转换为向量,将片段文本和片段向量存入向量数据库中。

向量数据库:包含原始文本和对应的向量。

召回

  • 召回:搜索与用户问题相关片段的过程,初步筛选。
  • 重排:再从召回的片段中选取top k最相似的,精挑细选。

多路召回,混合检索(Hybrid Retrieval)

常见方案:

  • 向量检索(Vector Search / Dense Retrieval)

    • 基于 Embedding 相似度搜索
    • 擅长语义匹配、近义表达、模糊查询,即使关键词不一致,也能命中。
  • 关键词检索(BM25 / Sparse Retrieval)

    • 基于关键词匹配
    • 擅长专有名词、编号、条款、错误码等精确匹配
  • Metadata Filtering(可选)

    • 根据部门、时间、文档类型等元数据先过滤,再进行检索

重排(Reranking)

目标:提高 Precision,从召回的 Top-K 候选中筛选最相关的内容。

常见模型:

  • BGE-Reranker
  • bge-reranker-v2
  • Cohere Rerank

Reranker采用Cross-Encoder对Query和Chunk成对计算相关性得分,再重新排序,最终保留Top-K(例如 Top10)送入 LLM。

召回率(Recall)与准确率(Precision)

  • 高 Recall(召回率):宁可错杀一千,不放过一个(多召回切片,依赖后面的 Reranker 去噪)。
  • 高 Precision(准确率):宁缺毋滥(降低大模型被噪点干扰/上下文污染的风险)。

工业界常见做法:前级放开Recall抓取50100个chunk,后级重排精筛出Precision最高的35个chunk喂给LLM。

  • Recall(召回率)- 希望不要漏掉真正相关文档。
  • Precision(准确率)- 希望返回的文档都是最相关的。

总结:实际工程中通常先提高Recall,再通过Reranker提升Precision。因为:漏召回无法补救,错误召回还能重排。

Prompt Assembly(上下文组装)

检索结果并不能直接送给LLM,需要组装Prompt。包括:用户问题+检索内容+Metadata+回答规则。

例如:“仅依据提供内容回答。若无法确定,请明确说明。禁止编造答案。”

Chunk中保存Metadata(文档名、页码、章节、URL等),Prompt组装时携带这些信息,方便LLM生成带Citation的回答。降低幻觉、提高可追溯性和可信度。

来源

[1] https://www.quanxiaoha.com/java-interview/recursive-vs-semantic-chunking

posted @ 2026-07-23 16:41  YBgnAW  阅读(2)  评论(0)    收藏  举报