尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Docling RAG 实战:如何用 HybridChunker 把文档切分成大模型友好的知识块

Docling RAG 实战:如何用 HybridChunker 把文档切分成大模型友好的知识块 Docling RAG 实战如何用 HybridChunker 把文档切分成大模型友好的知识块【免费下载链接】doclingGet your documents ready for gen AI项目地址: https://gitcode.com/GitHub_Trending/do/doclingDocling 是一款为生成式 AI 准备文档的开源文档解析工具能把 PDF、DOCX、HTML 等文件转成结构化文档在 RAG检索增强生成项目中它的内置 HybridChunker 混合切分器可以把文档直接切成带上下文、可控 token 数的知识块chunk是连接原始文档和大模型检索的关键一步。本文将带你快速上手这套切分流程。一、为什么 RAG 效果差往往输在切分环节用过大模型的同事应该都遇到过这个问题知识库检索出来的内容驴唇不对马嘴或者答案总是缺一块上下文。问题多半不在模型而在文档切分按固定字数硬切一句话被拦腰截断语义残缺向量检索命中率骤降切分不感知标题层级检索到1910s–1950s这段文字却不知道它属于IBM 历史这一章大模型容易答非所问token 数失控切出来的块要么超出 embedding 模型的上下文窗口要么短到毫无信息量。Docling 的 HybridChunker 正是针对这三个痛点设计的。二、HybridChunker 工作原理只在该切时切只在该并时并根据官方切分概念文档的说明HybridChunker 采用的是混合策略分两趟处理继承层级切分Hierarchical Chunking先利用 Docling 解析出的文档结构标题、段落、列表、表格按元素天然地分成初始块并自动挂上所属标题、图片说明等元数据token 感知优化拆分趟只有当某个块超出你设定的 token 上限时才拆且尽量在逗号等标点处断开保留句子完整性合并趟把连续且同属一个标题的小块合并避免碎片化可用参数merge_peers关闭默认开启。简单说就是只在该切时切只在该并时并。这套机制的代码入口在 docling/chunking/__init__.py它从 docling-core 导出了HybridChunker、HierarchicalChunker等全部切分器类。如上图所示Docling 的DoclingDocument内部是一棵带层级关系的文档树——Hybrid里的H就体现在这里结构信息 token 计数双管齐下这正是普通切分库按字符数硬切做不到的。三、三步完成第一次知识块切分安装后pip install docling transformers三步走from docling.document_converter import DocumentConverter from docling.chunking import HybridChunker # 1. 解析文档为 DoclingDocument doc DocumentConverter().convert(sourcewiki.md).document # 2. 创建混合切分器默认参数即可用 chunker HybridChunker() # 3. 迭代得到知识块contextualize() 生成带标题上下文的文本 for chunk in chunker.chunk(dl_docdoc): enriched chunker.contextualize(chunk) # 把 enriched 送入你的向量库做 embedding注意一个容易踩的坑chunk.text是裸文本而真正适合送给 embedding 模型的是contextualize(chunk)的返回值——它会把文档标题、章节标题拼在正文前面。比如一段正文会被增强成IBM 1910s–1950s IBM originated with several technological innovations ...检索命中时大模型就知道这段话出自IBM 的 1910s–1950s 章节回答质量立竿见影。更多交互细节可以参考 hybrid_chunking.ipynb 这个官方示例 Notebook。四、关键配置token 数对齐 embedding 模型实战中最重要的一条经验切分器的 tokenizer 必须和 embedding 模型的 tokenizer 保持一致。否则按 512 token 切可能只是切分器单方面认为的 512embedding 模型那边早已超长。Docling 支持 HuggingFace tokenizer默认和 OpenAI tiktoken配置如下from transformers import AutoTokenizer from docling_core.transforms.chunker.tokenizer.huggingface import HuggingFaceTokenizer tokenizer HuggingFaceTokenizer( tokenizerAutoTokenizer.from_pretrained(sentence-transformers/all-MiniLM-L6-v2), max_tokens512, ) chunker HybridChunker(tokenizertokenizer, merge_peersTrue)max_tokens建议设为 embedding 模型上下文窗口略小的值如 512给标题上下文预留空间。五、进阶跨块表格也能自带表头表格是 RAG 切分的重灾区——一张大表被切到第 3 块时列名是什么已经丢了。HybridChunker 提供了两个贴心参数参数默认值作用repeat_table_headerTrue表格跨块时每个块开头自动重复表头omit_header_on_overflowFalse宽表行太宽装不下表头时允许省略表头保行完整官方在示例中用一份 12 列的客户 CSV 表格演示切出的每个块都以表头行开头保证每块独立可理解。完整演示见 hybrid_chunking.ipynb 的表格章节。如果你处理的是代码、日志这类行结构敏感的内容还可以看看 line_based_chunking.ipynb。六、延伸阅读从切分到完整 RAG 管线docs/concepts/chunking.md三种切分器Base / Hybrid / Hierarchical的完整设计说明docs/examples/rag_langchain.ipynbHybridChunker 接入 LangChain 构建完整 RAG 应用docs/examples/advanced_chunking_and_serialization.ipynb高级切分与序列化技巧docs/examples/minimal.pyDocling 最简转换示例。小结RAG 的知识块质量 文档结构感知 token 精准控制 上下文增强。Docling 的 HybridChunker 把这三件事封装成了一个类chunk()切块、contextualize()增强两行核心代码就能让大模型的检索答案从缺胳膊少腿变得上下文完备。【免费下载链接】doclingGet your documents ready for gen AI项目地址: https://gitcode.com/GitHub_Trending/do/docling创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表