为什么你的 AI 编程效果"越用越差"
很多人都有这种感受:刚开始用 Cursor / Claude Code 神奇得很,几个月后越用越觉得”AI 变笨了”。其实模型没变,变的是你的项目和工作流。本文拆 6 个真正原因。
一、上下文膨胀
刚开始项目 100 个文件,AI 自动检索准;半年后 1000 个文件,AI 检索的”相关文件”里夹了 80% 噪音。
修复:
- 用
.cursorignore/.aiderignore排除生成代码、文档、资源 - @ 显式指定,少依赖 @codebase 自动
- 大目录拆 monorepo workspace
二、依赖蔓延 + 风格不一致
每次 AI 写代码引入一个新依赖、用一种新风格,半年后项目有 5 种状态管理库、3 种错误处理模式、混乱的命名。
AI 看到混乱代码,自然产出更混乱。
修复:
- 一次性清理:列所有依赖、去重、统一风格
.cursorrules加严格的 “禁止引入新依赖” 条款- 团队 review 时严抓”引入新依赖” 的 PR
三、Rules 文件过期
半年前写的 .cursorrules 列了用 Next.js 13、jest 28、CSS Modules。现在项目早升级了,Rules 没更新。
AI 按过期的 rules 出代码 → 你觉得”AI 不懂项目”。
修复:
- 每个 milestone 后 review rules 文件
- 大依赖升级时同步更新 rules
- 记录”学到的教训”段,持续追加
四、Prompt Caching 失效
Claude / GPT 缓存 5-10 分钟。如果你的 system prompt 频繁变化(哪怕一个字),缓存命中率会下降,响应变慢、成本上升。
可能的原因:
- system prompt 里嵌入了时间戳 / 随机 id
- 工具列表频繁增减
- 历史对话压缩策略不稳定
修复:
- system prompt 保持稳定
- 变化的内容放到 user message 末尾
- 检查
cache_read_input_tokens命中率
五、模型版本悄悄变了
OpenAI / Anthropic 的模型名 claude-sonnet-4-6 指向的实际后端可能变。同样的 prompt 输出可能微妙不同。
修复:
- 用具体版本号(
claude-sonnet-4-6-20250915)而非 alias - 维护回归 benchmark
- 怀疑模型变化时跑评估对比
详见 LLM 评估实战。
六、Prompt 模式僵化
你最初的 prompt 是为某个版本的模型调优的。模型升级后,老 prompt 反而不适合。
例子:
- 老模型需要 “step by step” 引导,新模型默认就会
- 老模型 tool call 不稳,老 prompt 用了一堆”如果工具失败”逻辑
- 老模型上下文 64k 时代写的”精简”指令,对 200k 已经过度
修复:
- 模型升级时 review 现有 prompt 是否还合适
- 试着删一些”看起来必要的指令”,看效果
- 用最少 prompt 测试基线
七、第七个隐藏原因:你
刚开始用 AI 时新鲜感拉满,每次 prompt 都认真写。久了懒了,prompt 越写越随便,期待越来越模糊。AI 输出变差不是它的锅。
修复:
- 复杂任务正经写 prompt
- 用 prompt 模板
- 把”懒”承认了,恢复纪律
八、综合自检清单
效果退化时按这个排:
-
.cursorrules/CLAUDE.md多久没更新? -
.cursorignore有没有更新? - 项目是否引入了过多新依赖?
- system prompt 是否包含动态变化内容?
- 模型版本是否固定?
- 你的 prompt 是否变得越来越随便?
- 当前任务的上下文是否过大?
- 中转是否换过 / 异常?
九、跑一次”基线测试”
写 5 个标准任务:
- 写一个 fibonacci 函数
- 修一个明确 bug
- 写一组单元测试
- 重构一段代码
- 写一段文档
用同一个 prompt 模板跑(不带任何项目 rules / 历史)。
- 如果基线表现正常 → 项目问题(清理上下文)
- 如果基线也差 → 中转 / 模型问题(换模型或换中转)
十、长期可持续的工作流
为了避免重复退化:
- 每月一次 audit:rules、依赖、prompt 模板
- 每季度一次 benchmark:回归测试
- 每半年一次”刷新”:项目知识重写一遍
- 持续学习:模型升级时跟着调整
十一、相关阅读
- .cursorrules 最佳实践
- Cline Rules 与 Memory Bank
- AI 编程的 12 个常见错误与避坑指南
- LLM 评估实战
- prompt caching 在国内中转下省成本指南
- AI Agent Prompt Engineering 中文实战
用稳定的中转 + 固定版本号能减少很多变量。YoTradeApi 后台可以查每条请求的实际模型版本,便于排查。