轻量级、零依赖的提示,防止AI代理丢失上下文
一种针对AI编码代理的提示约定,使用仅追加的设计日志和原地编辑的索引,以保持长期项目中的推理和歷史记录,避免上下文丢失。该方法通过保留错误信念、强制列出未完成项和廉价自我纠正来提升代理可靠性。
对于需要多会话处理的AI编码代理,保持上下文一致性是一个关键挑战。一种新的提示约定提出了一种简单但强大的解决方案:使用两个具有相反策略的文档。第一个文档是一个仅追加的设计日志(DESIGN.md),其中每个工作单元都添加一个编号、日期的节段,且从不编辑早期内容。当发现错误时,新节段会通过编号引用并更正,但保留错误原文。每个节段必须以明确的“未完成”列表结尾,列出故意跳过、推迟或未验证的项目。第二个文档是一个原地编辑的索引(CLAUDE.md或AGENTS.md),每次会话自动加载,包含当前规则和少量关键事实。这种模式确保推理历史完整,而代理始终拥有最新指南。
该约定源自一个实际项目,经过数十次会话和约六十个节段的演变。其核心机制在于廉价自我纠正:由于不要求回溯编辑早期错误,代理更愿意承认错误。此外,未完成列表强制暴露项目中被隐藏的20%问题,防止代理仅报告成功部分。编号系统使得“后续节段优先”的规则可操作,矛盾通过较高编号自动解决。
然而,这种方法也有代价。仅追加日志会变长,并包含错误的陈述。一个从头到尾阅读日志的人可能会得到错误的印象。因此,第二个文档至关重要,它提供当前真相,作为日志的入口点。作者强调,不要清理或压缩日志,因为看似混乱的记录——包含已知错误的旧节段——正是系统的价值所在,它保留了决策的历史和背景。
该约定最适用于跨会话的复杂项目,特别是那些容易出错且错误发现较晚的领域,如移植、逆向工程、协议开发或性能调优。对于简短、明确的工作,获益有限。三个主要失败模式为:节段未编号、加载文件中没有指向日志的指针、以及“未完成”列表退化为模糊的“未来工作”。通过在每次会话开始处引用约定,可以确保日志被持续读写。此外,作者提供了精确的开场指令,包括在DESIGN.md中保持设计-工作日志、在CLAUDE.md中添加引用行,以及可选地将提交消息格式对齐。该约定不依赖于特定语言或领域,其成功取决于跨会话的工作、昂贵的重新推导以及后期发现错误的可能性。总之,这种两文档模式为AI代理在长期项目中保持上下文和可靠性提供了一种实用且经过验证的方法。