news 2026/5/10 19:01:03

RAG 系列(十二):高级分块策略——Parent-Child 与 Contextual Retrieval

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RAG 系列(十二):高级分块策略——Parent-Child 与 Contextual Retrieval

分块的两难困境

RAG 系统里有一个经典矛盾:

  • Chunk 太小:向量匹配精准,但返回给 LLM 的内容是片段,缺乏上下文,无法完整回答问题
  • Chunk 太大:内容完整,但语义太分散,embedding 质量下降,检索命中率降低

这不是调参能解决的问题,而是 Naive 分块的结构性缺陷。

小块适合检索,大块适合生成——这两个需求本来就是矛盾的,用同一个尺寸的 chunk 同时满足两者,必然顾此失彼。

本篇介绍两种突破这一困境的方案:

  1. Parent-Child Chunking:用小块做检索,命中后返回对应的大块
  2. Contextual Retrieval(Anthropic 方案):给每个 Chunk 加上文档上下文描述,让 embedding 更"聪明"

Parent-Child Chunking

核心思路

索引阶段: 父文档(800字)→ 存储在 docstore(InMemoryStore) ↓ 切割 子 Chunk(200字)→ 存入向量库 检索阶段: query → 向量检索匹配子 Chunk(精准) → 找到子 Chunk 对应的父文档 → 返回父文档给 LLM(完整)

检索用的是小 chunk,LLM 拿到的是大 chunk。两个需求,各自最优,互不干扰。

代码实现

LangChain 的ParentDocumentRetriever封装了这个逻辑:

fromlangchain_classic.retrieversimportParentDocumentRetrieverfromlangchain_classic.storageimportInMemoryStorefromlangchain_text_splittersimportRecursiveCharacterTextSplitter child_splitter=RecursiveCharacterTextSplitter(chunk_size=200,# 小块:用于向量检索chunk_overlap=20,)parent_splitter=RecursiveCharacterTextSplitter(chunk_size=800,# 大块:命中后返回给 LLMchunk_overlap=50,)vectorstore=Chroma(collection_name="parent_child",embedding_function=embeddings)store=InMemoryStore()# 存储父文档的 docstoreretriever
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 18:56:32

WeChatMsg终极指南:3步永久备份微信聊天记录,打造专属数字记忆库

WeChatMsg终极指南:3步永久备份微信聊天记录,打造专属数字记忆库 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/Git…

作者头像 李华
网站建设 2026/5/10 18:53:13

利用 Taotoken 多模型聚合能力优化智能客服场景响应

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用 Taotoken 多模型聚合能力优化智能客服场景响应 智能客服系统是许多企业与用户沟通的关键触点,其响应速度与回答质…

作者头像 李华
网站建设 2026/5/10 18:45:34

Fooocus:5步掌握AI图像生成的终极免费工具,完全离线使用

Fooocus:5步掌握AI图像生成的终极免费工具,完全离线使用 【免费下载链接】Fooocus Focus on prompting and generating 项目地址: https://gitcode.com/GitHub_Trending/fo/Fooocus 在AI图像生成工具百花齐放的今天,有一款软件以其极致…

作者头像 李华