最近在尝试用Cursor和Claude的Agent模式写一些自动化脚本,比如批量处理Excel、爬虫之类的。发现一个很烦的问题:每次我提出新需求(比如“加个错误重试”或者“换一种输出格式”),Agent好像就忘了之前已经做过的设计,会重新生成一大段代码,甚至把之前写好的逻辑改掉了。搞得我经常要手动对比版本。想问下各位大佬,是我prompt写得太抽象了?还是说这种工具本质上就不适合做迭代开发?有没有什么技巧能让Agent“记住”之前的选择和设计思路?
用AI Agent写Python脚本,每次改需求都要重新描述上下文,怎么破?
全部回复
共 167 条这个问题我太有共鸣了,Agent迭代改代码确实容易“失忆”。我的做法是把关键设计决策单独写在一个README或者注释块里,每次提新需求时让它先读那个文件再动手。另外尽量把需求拆小,一次只改一个点,改完立刻让它总结当前逻辑,下次带着总结继续。Cursor里用.cursorrules或者项目级的规则文件也能帮它记住一些约定。说白了就是别指望它自己记住,得你帮它把上下文“固化”下来。
这个问题的核心其实是Agent没有持久化的项目上下文,它每次都在用你最新的prompt重新理解整个任务,之前的设计决策根本没存下来。我一般会在项目根目录放一个DESIGN.md,把关键约定比如错误处理策略、输出格式、依赖库都写进去,然后每次对话开头让它先读这个文件。另外改需求时尽量用增量描述,比如“在process_data函数里加try-except,不要动其他逻辑”,比笼统说“加个重试”效果好很多。Cursor的rules功能也可以把这类约束固化下来,省得每次重复交代。
这问题太真实了,我也踩过同样的坑。后来发现关键是把需求拆成小步,每次只让Agent改一个点,别一口气塞太多。另外可以在对话里先让它复述一遍当前代码结构和你的约束,再让它动刀,比直接说“加个重试”稳很多。还有个土办法,把已确认的设计写成注释放在代码顶部,Agent读文件时能看到,就不容易跑偏了。
这个问题的根子在于Agent每轮基本是拿当前上下文重新推理,它并没有真正“记住”你的设计决策,只是被动跟着你这次说的话走。我的做法是维护一个简短的design.md,把已经定下来的接口、字段、异常策略写进去,每次改需求前先让Agent读一遍再动手,能省掉不少重复劳动。另外改需求时尽量说“在现有代码基础上只改X,别动Y”,比笼统描述管用很多。
这个是Agent通病,它每次都是基于当前对话窗口重新理解需求,你之前聊的设计细节如果没写进代码注释或者单独的文件里,它就真当没发生过。我的做法是维护一个简短的“设计决策”文档,每次让Agent改代码前先把这文档丢给它,明确告诉它哪些逻辑不能动。另外尽量小步提需求,别一次让它重构,改完一个点就确认一下,比一口气憋大改靠谱多了。
我一般会在项目根目录放个AGENTS.md或.cursorrules,把已经定下来的设计决策、命名习惯、输出格式都写进去,Agent每次会先读这个,改动就不会太离谱。另外迭代时别让它重写整个文件,直接说“只改xxx函数,其他别动”,比笼统提需求稳很多。说实话这类工具确实更适合从零生成,真要长期维护还是得自己控制改动范围。
这个问题我深有体会,之前用Agent改一个数据清洗脚本也是这毛病。我觉得不完全是prompt抽象的问题,Agent每次其实是重新读一遍文件然后按当前理解重写,它没有真正的“记忆”,你上一轮说过的设计约束只要没落在代码注释或某个doc里,它就可能忽略掉。我的做法是在项目根目录放一个CONTEXT.md或者叫design_notes.md,把已经确定的设计决策、函数职责、边界条件都写进去,每次改需求前先让Agent读这个文件再动手。另外我会把需求拆得很小,一次只让它改一个函数,改完立刻git commit,这样就算它乱动也能一眼看出diff。还有个技巧是在prompt里明确说“只修改xxx函数,其他部分保持原样不要重写”,这句话挺管用的。不过说实话,迭代次数多了之后我也懒得跟它斗智斗勇,复杂逻辑还是自己写,Agent适合做那种一次成型的脚手架或者重复性代码。