Skip to content

10.3.5 长文档、多文档、跨文档问题分别怎么优化? ​

先给结论:长文档、多文档、跨文档问题虽然都会让 RAG 变难,但它们难的点并不一样。长文档更像“在一个大空间里稳定找到并组织关键局部”,多文档更像“在多个来源里选对并拼对”,跨文档则更像“在多个来源之间建立正确关系”。如果用同一套优化方法对待它们,效果通常不会稳。

很多系统一看到复杂问题答不好,就容易统一归因成:

  • 上下文不够
  • 模型不够强

但真实情况通常更细。因为不同复杂场景卡住的位置不同,优化顺序也会不同。

一、长文档问题更像“单源内定位和组织” ​

长文档问题的核心难点通常是:

  • 关键信息埋得深
  • 同一文档里局部相关和全局背景混在一起
  • 标题、段落、表格、附录之间关系复杂

这类问题最容易暴露:

  • 切块策略不合理
  • 标题结构没有保留
  • 长上下文排序不利于模型使用

长文档问题优先关注什么 ​

更值得先看的通常是:

  • 结构化切块
  • 分层检索
  • 相邻块扩展
  • 文档内局部证据聚合

重点不是立刻扩大上下文,而是:

  • 让关键局部更稳定地被找到并保留下来

二、多文档问题更像“多来源选择和组合” ​

多文档问题的难点在于:

  • 不是只有一个来源可用
  • 需要从多个来源里挑出真正相关的那几个

这类问题最容易暴露:

  • recall 不足
  • Rerank 不稳
  • 多来源证据选择混乱

多文档问题优先关注什么 ​

更值得先看的通常是:

  • 候选池覆盖面是否足够
  • 混合检索是否能补盲
  • Reranker 是否能稳定把关键来源排上来
  • 去重和聚合是否合理

重点不是把所有文档都塞进去,而是:

  • 让真正关键的几个来源进入最终上下文

三、跨文档问题更像“关系建立和约束保留” ​

跨文档问题通常更难,因为它不只是要“把几个来源找出来”,而是要:

  • 正确理解它们之间的关系

常见包括:

  • 比较不同版本
  • 合并不同规则
  • 识别例外条件
  • 区分不同来源的适用边界

这类问题最容易暴露:

  • 证据边界混淆
  • 来源关系丢失
  • 生成阶段错误归纳

跨文档问题优先关注什么 ​

更值得先看的通常是:

  • 是否保留来源标识
  • 是否明确文档间的时间、版本、作用范围
  • 上下文组织是否让模型看清“谁说了什么”
  • 是否需要分阶段归纳,而不是一步直接生成最终答案

重点不是更多,而是:

  • 更清楚地展示来源关系

为什么三类问题不能共用一套优化逻辑 ​

因为它们各自最容易卡住的地方不同:

  • 长文档更容易卡在定位和切块
  • 多文档更容易卡在选择和排序
  • 跨文档更容易卡在关系组织和忠实归纳

如果你用同一套方法全部处理,比如统一做:

  • 增大 TopK
  • 拉长上下文

那很可能出现:

  • 某一类问题略好
  • 另一类问题明显更差

一个更实用的优化顺序 ​

处理长文档时 ​

优先顺序更像:

  1. 调整结构化切块
  2. 做文档内定位和相邻块扩展
  3. 再看最终上下文组织

处理多文档时 ​

优先顺序更像:

  1. 扩大有效候选覆盖
  2. 优化 Rerank
  3. 做去重和多来源选择

处理跨文档时 ​

优先顺序更像:

  1. 保留来源和边界信息
  2. 组织文档间关系
  3. 必要时做分阶段归纳

一个最小对应示意 ​

python
optimization_focus = {
    "long_document": ["chunking", "hierarchical_retrieval", "local_context_building"],
    "multi_document": ["recall_coverage", "rerank", "selection_and_dedup"],
    "cross_document": ["source_boundary", "relation_organization", "multi_step_synthesis"]
}

这个示意想强调的是:

  • 复杂问题不是一种复杂
  • 每一类复杂都有更合适的优化重点

一句话总结 ​

长文档问题更偏定位和组织,多文档问题更偏选择和排序,跨文档问题更偏关系和边界。把这三类问题分开优化,通常比用同一套方法硬顶更稳。