ClaudeCode连续压缩三次丢失超半数指令,加一段提示词可将丢失率降至0%
开发者 Murooka 实测发现,Claude Code 在连续执行三次 /compact 操作后,用户指令丢失率高达 33% 至 57%;但仅需在压缩指令后附加一段明确要求“抄录全部历史用户消息”的...
在长周期开发任务中,AI 编程助手的对话记忆能力至关重要。近期,日本开发者 Murooka(dev.to 账号 murooka_az_dev)通过实证研究揭示了一个关键缺陷:Anthropic 的 Claude Code 在连续触发对话压缩(compaction)时,会系统性丢失大量用户指令——第三轮压缩后,两组真实开发对话的指令丢失率分别达到 33% 和 57%。更值得注意的是,该问题并非模型能力不足所致,而源于压缩逻辑的设计盲区;仅通过添加一行提示词,即可将丢失率稳定降至 0%。
压缩机制与问题暴露
Claude Code 支持手动输入 /compact 或在对话过长时自动触发压缩,其作用是将历史对话替换为一份精简摘要,以维持上下文窗口效率。然而,当项目周期拉长、会话反复压缩时,部分关键决策——如「此处禁用某术语」「该功能暂不实现」——因未直接写入代码或文档,极易在摘要中被遗漏。
Murooka 的实验基于其开发 VS Code 插件的真实日文对话(记为对话 A 与 B),模拟了三次连续压缩流程:截断对话 → 执行 /compact → 接续后续内容 → 再压缩,循环三次。每段对话中,他预先标记 18 条明确的用户指令(如设计约束、修改要求等),并由另一实例的 Claude Opus 5.5 对压缩后摘要进行盲评,判断指令是否仍可见于摘要文本中。
实验环境严格统一:摘要模型固定为 Opus 5.5,Claude Code 版本为 2.1.319–2.1.322,未启用额外记忆或配置文件。结果清晰显示:首轮压缩未丢失任何指令;但从第二轮起,指令开始成批消失。
具体数据如下:
- 对话 A:第1/2/3轮压缩后指令保留率分别为 100% / 76% / 67%(即丢失 0% / 24% / 33%)
- 对话 B:对应为 100% / 82% / 43%(丢失 0% / 18% / 57%)
例如,在第三轮压缩后丢失的原始指令包括「先修 bug」与「只要别把设计搞乱就行」——前者在三次重复实验中全部未被保留。
根因定位:摘要链断裂
Murooka 指出,问题核心不在于单次摘要质量差,而在于压缩逻辑存在“信息断层”:每次 /compact 生成的摘要,默认仅包含本轮新增的用户消息,而不会主动继承上一轮摘要中已提炼出的用户指令列表。
这导致一个递归衰减过程:第一轮摘要尚能覆盖全部原始指令;第二轮压缩时,系统只看到“第一轮摘要 + 本轮新消息”,却未将第一轮摘要中隐含的用户指令显式纳入输入;第三轮则进一步丢失前两轮累积的关键约束。图1直观呈现了这一机制:普通 /compact 下,早期消息(斜纹区域)在第二、三轮中完全未被抄录,最终仅剩本轮消息(橙色块)。
值得强调的是,首轮压缩实际丢失的并非指令,而是两类辅助性上下文:一是任务进展事实(如“已完成模块X”),70%被完整保留,23%部分提及,7%完全缺失;二是高频出现的文件名与 ID,保留率低至 21%–71%。用户误以为“压一次就忘”,实则是多次压缩叠加效应被感知为单次失效。
解决方案:强制抄录历史用户消息
Murooka 提出的修复方案极为简洁:在执行 /compact 后,追加一段明确指令:“请将上一轮摘要中列出的所有用户消息,原样抄录到本次摘要开头”。该提示词本质是要求模型在摘要生成时显式继承历史用户输入链。
测试结果显著:在相同三轮压缩流程下,两段对话的指令丢失率均降为 0%(图2中绿色线)。三轮后,对话 A 的 23 条指令全部保留(23/23),对话 B 的 41 条与 71 条也全部完整(41/41,71/71)。
该方法的有效性验证了问题本质是提示工程缺失,而非模型能力瓶颈。但 Murooka 同时指出其边界条件:当单次会话消息量超过百条、总 token 数达万级时,即使要求“原样抄录”,大模型仍可能出现漏抄或截断;且大量原文挤占摘要空间,可能削弱对关键逻辑的凝练表达。
行业启示与实践建议
此项发现对依赖长对话流的 AI 编程工具具有普适参考价值。当前主流编程助手(如 GitHub Copilot、Cursor、CodeLlama 等)虽机制各异,但均面临“上下文压缩-记忆衰减”权衡难题。Claude Code 的问题暴露了一个共性风险:用户隐性约束(non-code directives)比显性输出更易在摘要中流失。
对开发者而言,短期可采用 Murooka 的提示词策略——在关键节点手动执行 /compact + 抄录指令 组合操作;长期则需推动工具链改进:理想状态应支持用户标记“必保留指令”,或在压缩摘要中专设「Design Constraints」章节,自动聚合所有否定性、限制性语句。
从产品设计角度,该案例也提醒:自动化摘要不应仅服务于 token 节省,更需保障决策可追溯性。尤其在工程协作场景中,一条被遗忘的“禁止使用某库”的指令,可能导致数日返工。
目前,Anthropic 尚未公开回应此问题。Murooka 已将其完整实验报告发布于 dev.to 与 Zenn,供社区复现验证。对于正深度使用 Claude Code 进行复杂项目开发的团队,建议在关键里程碑前主动备份原始对话,或建立外部指令清单作为冗余保障。
技术演进常始于微小裂缝。这一次,是压缩算法漏掉的几行文字;下一次,或许就是整个架构方向的偏移。
