长上下文失效模式与评测
本节目标
把“模型支持长窗口”转化为具体任务上的证据,测试位置、冲突、干扰、引用和预算退化。
装得下不等于找得到、用得对
研究显示,模型对长上下文中相关信息的位置可能敏感,信息位于中间时表现可能下降。随着有效上下文增加,召回和准确性也可能出现“context rot”,但不存在适用于所有模型和任务的一条固定退化曲线。论文、单针检索演示和供应商 benchmark 都只能提供线索;应在自己的模型快照、文档长度、语言、证据数量和问题类型上复现。
常见失效模式:
- 位置遗漏:关键事实放在开头能答,放中间就漏。
- 干扰:大量相似但无关片段覆盖真正证据。
- 冲突处理失败:新旧政策同时出现却选了旧版。
- 引用漂移:答案正确但引用到另一段,或引用 ID 不存在。
- 指令污染:文档中的命令被当成应用指令。
- 截断与预算退化:输出或工具描述被挤出预算。
- 多证据不完整:找到一个“needle”却漏掉完成比较所需的其他证据。
- 工具历史膨胀:旧工具结果与失败重试长期滞留,覆盖当前状态。
最小评测矩阵
对同一问题构造:
| 变量 | 取值示例 |
|---|---|
| 证据位置 | 开头 / 中间 / 结尾 |
| 干扰量 | 无 / 少量 / 大量 |
| 必需证据数 | 单条 / 多条互补 / 多条分散 |
| 来源关系 | 一致 / 新旧冲突 / 权威与非权威冲突 |
| 表达形式 | 原文 / 表格 / 摘要 |
| 注入文本 | 无 / 直接 / 间接 |
| 历史类型 | 纯文档 / 多轮消息 / 工具调用与结果 |
检查答案正确、必需证据覆盖率、引用有效、冲突说明、拒绝是否合理、输入/输出/缓存用量与延迟。对非确定输出重复运行,并记录模型与上下文策略版本。变更选择、顺序、摘要、compaction 或缓存策略后运行同一矩阵;缓存命中不应改变质量门槛。
何时拆任务
若问题包含多个独立子任务,可先检索与回答每个子问题,再由最终步骤合并;若要求全局比较,应保留跨文档一致字段。拆分会增加调用与错误传播,必须用任务指标验证,而不是默认更好。
练习与自测
用三份各 20 段的模拟文档,把唯一答案分别置于第 1、10、20 段并加入一条过期冲突。定义通过标准:答案、来源 ID、生效日期三者都正确。自测:只测“答案包含关键词”会漏掉哪些错误?
掌握检查
- 我测试证据位置、长度、干扰、冲突、多证据、注入和工具历史,而不只测最大窗口。
- 每个实验固定模型与上下文策略版本,并对关键案例重复运行。
- 通过标准同时覆盖答案、完整性、来源、时效、权限、安全、用量和延迟。
- 我不会把单针检索成功率或供应商展示数字直接当作自己任务的质量证据。
- 拆任务、长窗口、RAG 和 compaction 的选择由同一任务级评测比较。
下一步
参考资料
- Liu 等,Lost in the Middle: How Language Models Use Long Contexts(原始论文)
- Bai 等,LongBench: A Bilingual, Multitask Benchmark for Long Context Understanding(原始论文)
- Anthropic:Context windows(访问于 2026-07-21)
- Google:Long context(访问于 2026-07-21)