Jean's Blog

一个专注软件测试开发技术的个人博客

0%

RAG组件--文本分块之分块相关的高级索引技巧

带滑动窗口的句子切分(Sliding Windows)

image-20250813144043408

  • 核心思想:通过设置窗口节点(window_size=3)实现精细检索与全面生成的平衡,解决这对”矛盾共同体”
  • 实现方式:将文档切分为核心句子后,在metadata中存储前后3个句子作为上下文
  • 优势:
    • 检索时能精准定位核心句子
    • 生成时保留完整语义连贯性
    • 典型实现:LangChain和LlamaIndex中的相关功能
  • 应用场景:适用于需要同时保证检索精度和生成质量的场景,如问答系统、知识检索等

分块时混合生成父子文本块(Parent-Child Docs)

image-20250813144246619

  • 三级结构:
    • 父文档:完整PDF或大文本块(可达百万token)
    • 子文档:精细切分的小文本块(用于向量检索)
    • 关联机制:子文档metadata包含Parent ID链接父文档
  • 存储策略:
    • 子文档存入向量数据库
    • 父文档存储在硬盘/内存等常规存储
  • 检索流程:
    • 通过子文档精准召回内容
    • 根据Parent ID获取完整父文档上下文
  • 适用场景:当大模型处理能力强但嵌入模型输入限制时(如8000token限制)

分块时为文本块创建元数据

image-20250813144535318

  • 关键元数据类型:
    • 基础信息:文件名、页码、创建时间
    • 语义标签:类型(如10Q财报)、年份(如2024)
    • 业务标签:金融、科技等行业分类
  • 实现方法:
    • 使用LlamaIndex自动工具
    • 调用大模型分析生成标签
  • 典型应用:
    • 解决时间敏感问题(如不同年份财报对比)
    • 实现精准过滤(如”2024年Uber现金流”查询)
  • 重要性:避免检索结果的时间错位(如混淆2022/2023年数据)

在分块时形成有级别的索引(Summary→Details )

image-20250813144727252

  • 实现形式:$(\mathsf{Summary} \rightarrow \mathsf{Details})$层级结构
  • 典型构建:
    • 顶层:5000字文档块的摘要(如年度概况)
    • 底层:具体细节内容
  • 检索优势:
    • 先定位摘要层(如”2023年数据”)
    • 再深入细节层(如”2023年GDP具体值”)
  • 应用案例:
    • 游戏攻略库:先区分《黑神话悟空》与《王者荣耀》
    • 财务报告:按年份分层检索
  • 防错机制:避免跨领域错误(如混淆不同游戏Boss信息)

文档→嵌入对象(Document→Embedded Objects)

image-20250813144921330

  • 核心思想:让不同查询方式处理最适合的数据形式
  • 结构化处理:
    • 文本节点:存储摘要信息
    • 数据节点:连接结构化数据(如Pandas表格)
  • 查询路由:
    • 向量检索:处理非结构化文本查询
    • 结构化查询:处理精确数据查询(如”2023十大富豪”)
  • 典型实现:
    • LlamaIndex的DFNode节点
    • 类似Text-to-SQL的查询转换
  • 优势:避免向量检索在处理精确数据时的局限性