跳转到内容

长上下文失效:7 个实用做法

模型可能读到了规则,却没有执行。减少遗漏,先少放无关资料,把本轮任务和关键约束放在一起,交付前逐条检查。 这些方法能降低风险,不能保证零遗漏。

先确认规则确实发给了模型。被截断、被摘要删掉,或 Skill 没加载时,要把缺少的内容补回当前请求。

固定规则保留在平台规定的指令层。本轮任务的材料,可以先试下面的顺序:

本轮任务材料的组织顺序本轮输入依次放相关资料、当前进度、任务与关键约束;模型生成结果后,逐条核对证据。相关资料只取必要片段当前进度已完成 + 下一步本轮任务必须遵守的约束模型生成结果交付前检查逐条核对证据
方法直接怎么做
少放资料文档只读相关段落,Skill 按需加载,日志只取报错附近。
末尾重申长材料之后,简短列出本轮任务和关键约束。
分清主次强约束保留原文,参考资料可摘要,过期要求清理掉。
先找证据先定位原文、函数或运行结果,再作判断。
保存进度阶段交接时,带上目标、约束、进度、待办和来源。
逐条复查单独一轮提供约束与结果,逐条给出检查证据。
程序兜底字段用 Schema 校验,接口兼容用回归测试,工具权限由执行层限制。

“优先级高”只是提示模型重点,不会改变平台权限。末尾重申的约束,也要与原有规则一致。

假设让编码 Agent 给订单查询增加分页:

参考资料(可摘要):订单接口文档的分页段落。
已确认:旧客户端仍在使用无分页参数的请求。
本轮任务:增加可选分页参数。
必须遵守(交接时原样保留):
C1. 保留旧请求的返回字段和默认行为。
C2. 不修改数据库结构。
交付前逐条检查:
C1 → 给出旧请求的测试结果。
C2 → 给出数据库相关改动的 diff 检查结果。
未验证就写“未验证”;检查失败,修正后重查。

复查时提供的是原始约束 + 实际结果。只问“你检查过了吗”,模型的一句“检查过了”不能作为证据。

结论依据与适用边界
长度影响Chroma 在任务复杂度不变时,也观察到输入变长后的性能下降;干扰内容同样会影响表现。Context Rot
位置影响受测模型的问答与检索任务中,开头或结尾的信息通常比中间更容易被利用,不能说遗漏与位置无关。Lost in the Middle
末尾提问Anthropic 对 Claude 的长文档输入推荐“材料在前,问题在后”,并建议先提取相关原文;不代表所有模型始终最关注末尾。官方建议
压缩有损摘要可能遗漏关键细节。强约束保留原文,重要事实保留可回查的来源。Anthropic 上下文工程
自检限制ICLR 2024 发现,当时受测模型在缺少外部反馈的推理自纠错中可能变差;不证明所有复查无效,但自检不能代替证据。自纠错研究

验证效果:固定模型与任务,多跑几次,比较约束遗漏率、任务通过率、Token 和耗时。

相关笔记:上下文工程、RAG 原理与实践。