Appearance
10.3.5 长文档、多文档、跨文档问题分别怎么优化?
先给结论:长文档、多文档、跨文档问题虽然都会让 RAG 变难,但它们难的点并不一样。长文档更像“在一个大空间里稳定找到并组织关键局部”,多文档更像“在多个来源里选对并拼对”,跨文档则更像“在多个来源之间建立正确关系”。如果用同一套优化方法对待它们,效果通常不会稳。
很多系统一看到复杂问题答不好,就容易统一归因成:
- 上下文不够
- 模型不够强
但真实情况通常更细。因为不同复杂场景卡住的位置不同,优化顺序也会不同。
一、长文档问题更像“单源内定位和组织”
长文档问题的核心难点通常是:
- 关键信息埋得深
- 同一文档里局部相关和全局背景混在一起
- 标题、段落、表格、附录之间关系复杂
这类问题最容易暴露:
- 切块策略不合理
- 标题结构没有保留
- 长上下文排序不利于模型使用
长文档问题优先关注什么
更值得先看的通常是:
- 结构化切块
- 分层检索
- 相邻块扩展
- 文档内局部证据聚合
重点不是立刻扩大上下文,而是:
- 让关键局部更稳定地被找到并保留下来
二、多文档问题更像“多来源选择和组合”
多文档问题的难点在于:
- 不是只有一个来源可用
- 需要从多个来源里挑出真正相关的那几个
这类问题最容易暴露:
- recall 不足
Rerank不稳- 多来源证据选择混乱
多文档问题优先关注什么
更值得先看的通常是:
- 候选池覆盖面是否足够
- 混合检索是否能补盲
Reranker是否能稳定把关键来源排上来- 去重和聚合是否合理
重点不是把所有文档都塞进去,而是:
- 让真正关键的几个来源进入最终上下文
三、跨文档问题更像“关系建立和约束保留”
跨文档问题通常更难,因为它不只是要“把几个来源找出来”,而是要:
- 正确理解它们之间的关系
常见包括:
- 比较不同版本
- 合并不同规则
- 识别例外条件
- 区分不同来源的适用边界
这类问题最容易暴露:
- 证据边界混淆
- 来源关系丢失
- 生成阶段错误归纳
跨文档问题优先关注什么
更值得先看的通常是:
- 是否保留来源标识
- 是否明确文档间的时间、版本、作用范围
- 上下文组织是否让模型看清“谁说了什么”
- 是否需要分阶段归纳,而不是一步直接生成最终答案
重点不是更多,而是:
- 更清楚地展示来源关系
为什么三类问题不能共用一套优化逻辑
因为它们各自最容易卡住的地方不同:
- 长文档更容易卡在定位和切块
- 多文档更容易卡在选择和排序
- 跨文档更容易卡在关系组织和忠实归纳
如果你用同一套方法全部处理,比如统一做:
- 增大
TopK - 拉长上下文
那很可能出现:
- 某一类问题略好
- 另一类问题明显更差
一个更实用的优化顺序
处理长文档时
优先顺序更像:
- 调整结构化切块
- 做文档内定位和相邻块扩展
- 再看最终上下文组织
处理多文档时
优先顺序更像:
- 扩大有效候选覆盖
- 优化
Rerank - 做去重和多来源选择
处理跨文档时
优先顺序更像:
- 保留来源和边界信息
- 组织文档间关系
- 必要时做分阶段归纳
一个最小对应示意
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"]
}这个示意想强调的是:
- 复杂问题不是一种复杂
- 每一类复杂都有更合适的优化重点
一句话总结
长文档问题更偏定位和组织,多文档问题更偏选择和排序,跨文档问题更偏关系和边界。把这三类问题分开优化,通常比用同一套方法硬顶更稳。