RAG 技术原理——常见文档分片方式
RAG 系统的性能瓶颈往往藏在一个容易被跳过的地方——embedding 模型没问题LLM 推理也没问题但检索结果就是不准。问题出在文档怎么切。切得太碎一段话被拆成三截语义断了。切得太大一篇 5000 字的文章塞进一个 chunkembedding 向量里的信息被稀释成平均。RAG 的检索质量chunk 策略至少占一半权重。下面拆解六种市面上最常见的分片方式以及每种方式的代码实现和适用场景。固定大小分片最直接的做法每个 chunk 固定 N 个 token遇到上限就切断。from langchain_text_splitters import CharacterTextSplittersplitter CharacterTextSplitter( chunk_size512, chunk_overlap50, separator)chunks splitter.split_text(document)chunk_size 设 512 是一个常见的起点——跟 BERT 的上下文窗口保持兼容也足够容纳一段完整论述。chunk_overlap 设 50 是为了让相邻 chunk 之间有一段重叠区避免刚好在关键信息处切断。这种做法速度最快预处理几乎没有计算开销。代价也很明显它不管文本的语义边界。一段话正在论证一个观点恰好到第 512 个 token 被拦腰截断前后两个 chunk 各残一半逻辑。固定大小分片适合两种场景一是做原型验证快速跑通整个 RAG 流水线二是文档本身结构弱、没有清晰的段落和标题层级这时候纠结语义切分也没有太多收益。基于句子和段落分片比固定大小进了一步——至少不切散一句话。from langchain_text_splitters import SentenceTransformersTokenTextSplittersplitter SentenceTransformersTokenTextSplitter( chunk_size512, chunk_overlap50)chunks splitter.split_text(document)先用 NLP 工具做句子边界检测——中文靠句号、问号、感叹号定位英文靠 NLTK 或 spaCy 的 sentence tokenizer。然后按句子为最小单位往 chunk 里填填到接近 chunk_size 上限为止。不会出现半句话的情况。段落分片是同一个思路只不过最小单位从句子换成段落。适合结构清晰的自然语言文本——技术博客、新闻报道、产品文档。但如果段落长度差异太大一段 300 token下一段 3000 tokenchunk 尺寸会很不均匀。递归分片固定大小太粗暴句子分片太依赖分隔符质量。递归分片走了一条中间路线——按优先级尝试多种分隔符逐层往下切。from langchain_text_splitters import RecursiveCharacterTextSplittersplitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50, separators[\n\n, \n, 。, ., ])chunks splitter.split_text(document)逻辑是这样的先用双换行符段落边界切。切完如果某段还是超过 chunk_size改用单换行符切。再超用句号切。再超用空格切。最后实在没办法了才按字符硬切。这套策略优先保高级语义结构。段落切分能保住一个完整的论证单元就不会降级到句子级切分句子能保住就不会退到字符级。LangChain 把 RecursiveCharacterTextSplitter 作为默认推荐原因就在这里——它对大多数文档类型都能给出过得去的结果不需要针对每种文档单独调参。语义分片前面三种策略都在看文本的形式——换行符、标点、字符数。语义分片看的是文本的意思。原理不复杂把文档先拆成句子用 embedding 模型给每个句子算一个向量。然后遍历句子列表算相邻两句向量的余弦相似度。相似度突然掉下来说明话题变了在这里切一刀。from langchain_experimental.text_splitter import SemanticChunkersplitter SemanticChunker( embeddingsOpenAIEmbeddings(), breakpoint_threshold_typepercentile)chunks splitter.create_documents([document])breakpoint_threshold_type 控制切分的敏感度。percentile模式下系统追踪所有相邻句子的相似度分布在相似度明显低于平均水平的地方切开。也可以设一个绝对阈值——相似度低于 0.6 就切。语义分片的检索质量通常比前三种高一个档次尤其是处理主题跳跃较多的长文档。代价也很直接每个句子都要过一遍 embedding 模型预处理时间跟文档长度成正比。文档量大时成本不低。用语义分片需要注意阈值调试。太松了切不出边界太紧了切成碎片。通常建议先用一份小样本跑一轮在 RAGAS 之类评估框架上看检索精度再定阈值。父子分片前面五种策略都在解决一个单层问题把文档切成一堆 chunk每个 chunk 独立建索引检索时返回匹配的 chunk 喂给 LLM。但这里藏着一个根深蒂固的矛盾。chunk 设小了embedding 向量聚焦检索精度高。但单个小 chunk 携带的上下文有限——LLM 拿到一段 200 token 的文字可能连这段话在原文哪个章节、前后文在讨论什么都看不出来。chunk 设大了上下文够用但 embedding 向量被稀释成平均值检索时很难精准命中。父子分片的思路是把建索引和送上下文的 chunk 分开——用两套不同粒度的切分各取所长。具体做法先把文档按较大粒度切出一批父 chunk——比如每个父 chunk 是 1024 token对应原文的一个完整小节。然后在每个父 chunk 内部按较小粒度再切一批子 chunk——比如每个子 chunk 是 256 token对应一小段话。建向量索引时只对子 chunk 做 embedding。检索时用子 chunk 的向量跟用户查询做相似度匹配但返回给 LLM 的不是匹配到的子 chunk而是它所属的完整父 chunk。from langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain.storage import InMemoryStorefrom langchain.retrievers import ParentDocumentRetriever# 子chunk小粒度用于检索child_splitter RecursiveCharacterTextSplitter( chunk_size256, chunk_overlap30)# 父chunk大粒度用于返回给LLMparent_splitter RecursiveCharacterTextSplitter( chunk_size1024, chunk_overlap80)retriever ParentDocumentRetriever( vectorstorevectorstore, docstoreInMemoryStore(), child_splitterchild_splitter, parent_splitterparent_splitter)retriever.add_documents(documents)这个设计解决了矛盾。检索时拿 256 token 的子 chunk 做精确匹配拿到结果后把 1024 token 的父 chunk 整段塞给 LLM。模型看到的不只是匹配到的那两句话还有它所在章节的完整上下文。LangChain 的 ParentDocumentRetriever 对这个策略做了封装LlamaIndex 也有对应的 SentenceWindowNodeParser 实现类似效果。两个框架的实现思路一致——索引粒度和上下文粒度解耦。父子分片对长文档的问答场景效果提升明显。用户问第三章提到的那个优化方案具体怎么实现子 chunk 能精准命中方案描述所在的段落父 chunk 能提供前后文的推导过程和前提假设。不会出现只捞到一两句话、LLM 靠猜补齐上下文的情况。代价是存储翻倍。子 chunk 和父 chunk 都要存索引只建在子 chunk 上但要维护映射关系。文档量大的时候存储成本需要评估。按文档结构分片有些文档天然自带切分逻辑——Markdown 的各级标题、HTML 的 h1/h2/h3 标签、PDF 的书签层级。这类文档不需要靠 embedding 算相似度来找边界结构本身已经把边界画好了。from langchain_text_splitters import MarkdownHeaderTextSplitterheaders_to_split_on [ (#, h1), (##, h2), (###, h3),]splitter MarkdownHeaderTextSplitter( headers_to_split_onheaders_to_split_on)chunks splitter.split_text(markdown_text)每个 chunk 是某个标题层级下的全部内容同时附带标题层级作为 metadata。后续检索时可以用 metadata 做过过滤——只搜 h2 级别的 chunk、只看某个特定标题段落。这种做法的优势在于 chunk 天然结构完整。一个三级标题下的内容不会被拆到两个 chunk 里标题的信息量也不会丢失。问题是 chunk 尺寸不可控——有些章节写了 3000 token有些只有 50 token。通常需要配合递归分片做兜底先用文档结构切如果某个 chunk 还是太大再用递归分片往下拆。怎么选没有哪一种分片方式适合所有场景。不同文档结构、不同查询类型、不同成本预算对应不同的最优策略。原型验证阶段固定大小分片512 token 50 overlap足够跑通流程。代码最少速度最快发现问题了再换策略不迟。大多数通用场景递归分片是安全牌。它自动适配多种文本结构不用为每类文档手工调参。LangChain 把它设成默认不是没原因的。文档质量高、结构清晰的场景技术文档站、知识库按 Markdown 或 HTML 的标题层级分片收益最大。chunk 附带标题 metadata检索精度和可解释性都比纯文本切分好。对检索精度要求极高、文档主题跳跃明显的场景学术论文、法律合同、行业报告语义分片能拿到最好的效果。成本高一些但如果检索错了导致的后果比预处理成本更严重这笔投入是值的。文档长、对答案完整度要求高的场景技术手册、政策文件父子分片值得投入。检索精度靠子 chunk 保证上下文充足靠父 chunk 兜底。代价是存储成本翻倍需要评估文档规模是否在预算内。实际生产环境很少只用一种策略。一套完整的 RAG 系统通常会组合几种分片方式——用文档结构分片做第一层拆分用递归分片或语义分片做第二层细切再给每个 chunk 挂上来源、标题、时间等 metadata。分片不是一步做完的事而是一个需要根据检索效果持续迭代的工程环节。学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%免费】

相关新闻

Windows权限错误0x80070005的根源与修复指南

Windows权限错误0x80070005的根源与修复指南

1. 错误代码0x80070005的根源解析这个看似简单的权限错误背后,隐藏着Windows系统权限管理的复杂机制。当你在设置默认保存位置或执行系统关键操作时遇到0x80070005错误,本质上是因为当前账户对系统关键组件(特别是COM组件)的访问权…

2026/7/17 1:06:35 阅读更多 →
U盘文件系统格式选择与转换全指南

U盘文件系统格式选择与转换全指南

1. U盘拷贝大文件报错的核心原因解析当你在Windows系统下尝试向U盘拷贝超过4GB的单个文件时,突然弹出"对于目标文件系统,文件过大"的红色错误提示,这背后其实隐藏着一个存在了二十多年的技术限制。问题的根源在于U盘默认采用的FAT3…

2026/7/17 1:04:35 阅读更多 →
WMI Provider Host高CPU占用诊断与优化指南

WMI Provider Host高CPU占用诊断与优化指南

1. 问题现象与初步诊断WMI Provider Host(WmiPrvSE.exe)是Windows管理规范的核心进程,负责处理系统管理查询请求。当该进程CPU占用率异常升高时,通常表现为系统响应迟缓、风扇高速运转等明显症状。根据微软官方文档和实际案例统计…

2026/7/17 1:02:35 阅读更多 →

最新新闻

C# WinForm局域网多端屏幕实时共享工具(含自动IP发现、完整注释与可运行工程)

C# WinForm局域网多端屏幕实时共享工具(含自动IP发现、完整注释与可运行工程)

本文还有配套的精品资源,点击获取 简介:直接运行就能用的C# WinForm局域网屏幕共享方案,服务端抓取本地桌面画面,通过Socket实时推送给多个客户端显示。代码包含服务端(fuwu.cs)和客户端(keh…

2026/7/17 2:04:56 阅读更多 →
GPT-Live全双工语音交互:从架构原理到工程实践详解

GPT-Live全双工语音交互:从架构原理到工程实践详解

在语音交互领域,很多开发者都遇到过这样的困境:传统的AI对话模式像是"对讲机",必须等用户说完才能回应,稍微停顿就可能被打断,这种交互体验与真人对话的自然流畅相去甚远。OpenAI最新推出的GPT-Live通过全双…

2026/7/17 2:04:56 阅读更多 →
Process Explorer:超越Windows任务管理器的系统诊断工具

Process Explorer:超越Windows任务管理器的系统诊断工具

1. 为什么需要替代Windows任务管理器 Windows自带的任务管理器(Task Manager)是大多数用户查看和管理系统进程的首选工具,但它存在明显的功能局限。原生任务管理器只能显示基本的进程列表、CPU和内存占用等表层信息,对于深入的系统…

2026/7/17 2:04:56 阅读更多 →
全志T3与Logos FPGA异构核心板开发指南

全志T3与Logos FPGA异构核心板开发指南

1. 全志T3Logos FPGA核心板硬件架构解析 这款工业级核心板采用了全志T3 ARM处理器与紫光同创Logos FPGA的异构架构设计。T3处理器内置四核Cortex-A7,主频1.2GHz,搭配Mali-400 MP2 GPU,支持1080P视频编解码。FPGA部分提供PGL25G和PGL50G两种型…

2026/7/17 2:02:55 阅读更多 →
Windows系统regsvr32.exe工具详解与DLL注册指南

Windows系统regsvr32.exe工具详解与DLL注册指南

1. regsvr32.exe的本质解析regsvr32.exe是Windows操作系统中的一个关键系统组件,位于C:\Windows\System32目录下。这个命令行工具的主要功能是注册和注销系统中的动态链接库(DLL)和ActiveX控件(OCX)文件。它的工作原理是通过调用DLL文件中特定的导出函数&#xff08…

2026/7/17 2:02:55 阅读更多 →
大模型量化技术:LLM.int8()与GPTQ原理与实践

大模型量化技术:LLM.int8()与GPTQ原理与实践

1. 大模型量化技术概述在深度学习领域,模型量化是将浮点权重和激活值转换为低精度表示(如8位整数)的技术手段。对于参数量动辄数十亿甚至上千亿的大语言模型(LLM)而言,量化技术已经成为实际部署中不可或缺的…

2026/7/17 2:00:54 阅读更多 →

日新闻

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行 外贸工厂、工贸企业建设官网,核心需求与普通展示型网站并不相同。除了页面整洁、多语言适配和海外访问体验,企业还要重点考虑数据能否导出、站点能否迁移、源码是否可控、后续费用是否透明,以及更换服务…

2026/7/17 0:02:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

3D 翻转动画实现——ArkTS 动画系统全解析引言 在移动应用中,卡片翻转动画是最受欢迎的交互动效之一,它能给用户带来直观的"物理世界"操作感。在我们的英语学习 App 的单词学习页面(CourseHomePage.ets)中,就…

2026/7/17 0:02:10 阅读更多 →
2026键盘推荐|IQUNIX EV63多场景适配,不允许有人不知道!

2026键盘推荐|IQUNIX EV63多场景适配,不允许有人不知道!

现在很多用户都需要一款能适配多场景的键盘,既能满足交流码字的需求,又能应对居家电竞的性能需求,最好还得有点小颜值。而大多键盘都只能兼顾其中一两个场景。这次我实测了IQUNIX EV63三款配色(银武士、黑武士、紫罗兰&#xff09…

2026/7/17 0:04:10 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/15 21:09:01 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/15 19:42:20 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/16 23:40:37 阅读更多 →

月新闻