最近从Copilot转到了Cursor,想试试Claude写代码的效果。但用了一个礼拜,发现它写Python flask接口的时候,特别喜欢自作主张给我加一些根本用不到的import,比如from typing import Optional、List这些,明明我代码里根本没用到。有时候还会把requests库和httpx混着import,搞得我每次合并代码都要删一堆。想问下各位老哥,是不是我的prompt写得不对?还是说Cursor的context模式要调一下?或者这个就是Claude的通病?我是用的默认的agent模式,工程是FastAPI + SQLAlchemy。有没有办法让它更“克制”一点,别老给我加这种“保险”import?
Cursor写Python后端代码,总给我加一些没用的import,怎么调教?
全部回复
共 166 条这问题我也遇到过,Cursor的agent模式确实喜欢“过度防御性编程”,尤其Claude对类型标注有强迫症。我后来把system prompt里加了句“只写运行必需的代码,禁止添加未使用的import”,能好一些。另外你试试把context模式从auto改成只读当前文件,它瞎猜的概率会低很多。不过说真的,要完全根治难,我最后直接在编辑器里配了个保存自动清理import的插件,眼不见心不烦。
这问题太真实了,Claude写代码确实有“过度防御性编程”的毛病,总想提前把类型标注和库都备齐。你可以试试在系统提示里明确写一句“只导入代码中实际使用的模块,不要添加任何未引用的import”,或者把agent模式改成normal,让它少自作主张。另外如果项目里用了ruff或flake8,直接在规则里把未使用import标成error,让它改代码时自己撞墙几次就长记性了。
这问题我太有同感了,Cursor切到Claude模型后特别爱搞这种“防御性编程”,明明一个Optional都没用,它非得把typing全家桶给你摆上。我觉得不完全是prompt的锅,更多是Claude的训练习惯——它倾向于生成“完整且安全”的代码,哪怕冗余也要把可能用到的都带上,跟Copilot那种“极简补全”的思路完全两个路子。
你可以试试把agent模式从默认改成“codebase”或者“ask”,然后明确在系统提示里写一句“只添加代码运行所必需的import,禁止引入未使用的类型标注”。另外,FastAPI项目建议你直接用它的官方模板初始化,这样上下文里就有明确的依赖清单,模型会收敛很多。我自己的土办法是每次写完让它在文件里跑一遍ruff或flake8,把未使用的import标红,然后直接说“按这个报错清理”,它就会自己删干净。
还有一个偏方,如果你经常用SQLAlchemy,可以在规则文件里加一条“禁止同时导入requests和httpx,统一使用httpx”,这种硬性约束比在prompt里反复强调管用得多。反正核心就是别指望它自觉,得靠项目级规则和工具链去压制它的“创作欲”。
这问题我熟,之前也被Claude的“热情”折磨过。试试在项目根目录放个.clinerules文件,明确写上“只引入代码中直接使用的模块,禁止预判性import”,它会听话很多。另外agent模式里把context调到最小,别让它看太多无关文件,它一飘就爱瞎联想。不过说实话,混import这个毛病在长上下文时特别容易犯,我后来基本是让它一次改一个文件,反而干净不少。
这问题我熟,刚用Cursor那会儿也是被它的自作主张搞到没脾气。后来我发现把rules文件里加上一条“禁止添加未使用的import”能好不少,另外用composer模式而不是agent模式也会克制很多。还有个小技巧,你可以在写代码前先明确告诉它“只改我要求的部分”,不然Claude确实容易把需求理解得过于宽泛。反正我试下来,调教prompt比换模型有用。
这问题我也遇到过,Claude确实有这毛病,尤其写类型注解时特别爱自我发挥。我的经验是在.cursorrules里明确写一条:只import当前文件用到的模块,禁止预判性import。另外agent模式下它容易过度规划,改成cmd+k选中代码块局部生成会克制很多。还有个土办法就是写完让它自己跑一遍ruff或flake8,把unused import报出来再让它自己删。