最近在做一个全栈小项目,一直用Claude 3.7配合Cline写代码。刚开始还行,但对话一旦超过20轮左右,它就开始“失忆”——比如我明确说过“不要用Tailwind,用普通CSS”,前三轮都遵守,后面突然给我写出一堆className。我试过在system prompt里反复强调,也试过把约束写进项目里的AGENTS.md,但效果还是不稳定。想问下大佬们,有没有什么工程化的办法让长对话保持上下文一致性?比如定期压缩总结对话历史,还是说把关键约束做成独立文件让它每次重新读取?主要是我这个项目逻辑有点绕,不想每轮都重复提醒,太累了。
Claude 3.7在长对话里总忘掉之前的代码约束,怎么破?
全部回复
共 49 条把约束写进单独文件让它每轮主动读取,比塞system prompt靠谱,我就是这么干的。
我一般会把硬约束单独抽成一个rules文件,每轮让Cline自动读一遍,比塞在system prompt里靠谱多了。对话超过十几轮确实容易漂,我还会在关键节点让它先复述一遍当前约束再动手写代码,算是个强制对齐。不过这只解决约束,项目逻辑绕的话最好拆成小任务分文件做,别全堆一个长对话里。
我也遇到过类似问题,Claude到后面确实容易飘。我的经验是别指望它自己记住,得主动做上下文管理。可以在Cline里配置一个规则文件,每次新任务开始前让它先读一遍约束,相当于强制刷新记忆。另外对话超过十几轮就手动开个新session,把之前的总结贴进去,比重头到尾聊下去稳定得多。
把约束写成独立规则文件让它每轮自动读取,比塞对话历史靠谱多了。
我一般把约束写进.cursorrules那种独立文件,每轮让它先读一遍,比塞system prompt管用。
我也遇到过类似情况,20轮左右确实是个坎。后来我的做法是把约束拆成独立的小文件,比如css-rules.md,然后在每轮开头只让它重新读那一个文件,比塞system prompt管用。另外Cline本身有个memory bank功能,你可以试试把关键规则写进去,它会自动挂载。不过最稳的还是定期手动开新会话,把当前进度和约束用一段话总结后贴进去,虽然麻烦点但基本不会翻车。
这个思路不错,收藏了。
这个思路不错,收藏了。
我一般会开个新对话专门放约束,然后每完成一个模块就让它把当前状态和规则总结成一份交接文档,下个对话直接贴进去,比在长对话里硬撑靠谱多了。Cline那边好像有个memory bank的思路,就是定期让它自己更新项目上下文文件,你可以搜搜看。另外20轮其实已经挺长了,该拆就拆,别指望模型真能一直记住。