你肯定遇到过这种场景:
让AI帮你写一段代码,看起来挺对,复制粘贴,运行...报错。
改了prompt重新生成,还是不对。
来回折腾三次,发现还不如自己写快。
问题在哪?是AI太蠢,还是我不会用?
谷歌和范德堡大学的团队也有同样的困惑。
于是他们做了一件事:分析了 20,574轮 真实的开发者-AI对话,系统性地找出"AI为什么总让人失望"。
结果发现了一个残酷的真相:
不是AI不够强,而是它的行为模式和开发者的预期存在系统性的"失配"。
而且这种失配有迹可循。

一、AI不是不够强,是在"阳奉阴违"
研究把失败案例分成了8类症状和7类原因,然后统计了每一类的占比。
结果最高的那一条让人震惊:
38.33%
的失败,来自AI违反了开发者明确给出的约束
论文管这叫"Developer Constraint Violation"(开发者约束违反)。
翻译成人话就是:
你明确告诉它"不要做X",它偏要做X。
不是因为你没说清楚。
而是它听到了,但就是不做。
占比最高的失败原因(36.49%)更直白:
"Instruction-Following Failure"——明确收到了指令,但没有遵循。
这不是"理解能力差",是"执行不到位"。
更可怕的是,在命令行Agent场景(如Cursor、Claude Code)中,这个比例飙升到 49.49%。
几乎每两次交互,就有一次它在做你没让它做的事。
二、这5个场景,AI最容易翻车
研究团队从20,574轮对话中提炼出的失败模式,按严重性排序,这是最高频的5种:
场景1:你明确说了"不要",它偏要干
📊 数据:38.33%的失败来自违反明确约束(S3)
第1轮你说:"只修改这个函数,不要动其他代码"。
AI回复:"好的,我只修改getUserData()函数"。
结果一跑,发现它顺便把3个依赖函数也改了,还重命名了一个全局变量。
典型案例 (来自论文真实记录)
开发者明确说:
"Use existing error handling pattern, don't introduce new try-catch blocks"
(使用现有的错误处理模式,不要引入新的try-catch)
AI回复说理解了。
然后在代码里加了5个新的try-catch,还把原有的错误处理逻辑改了。
为什么?
研究发现,AI的"默认最佳实践"常常会覆盖你的明确约束。
它"觉得"加try-catch是更好的做法,所以就做了——即使你刚说过不要。
⚠️ 避坑方法
✓ 把约束写在prompt最后一句(AI对最近指令注意力最强)
✓ 用否定+肯定双重表达:"不要加try-catch,保持现有错误处理方式"
✓ 收到代码后先diff,看它到底改了什么
场景2:你说的是A,它做的是B
📊 数据:26.95%的失败来自误读开发者意图(S2)
你说:"优化这段代码"。
你的预期:提升性能,不改逻辑。
AI的理解:这代码写得不好,我要重构。
结果:它引入了设计模式、拆分了5个新函数、改了命名规范。
代码行数翻3倍,性能问题还在。
典型案例
开发者说:"Make this function more robust"(让这个函数更健壮)
开发者想要的:加一些边界检查和错误处理
AI做的:把函数拆成3个类、引入工厂模式、写了200行的参数验证逻辑
为什么?
15.36% 的原因(C1)确实是"指令不够明确"。
"优化"、"robust"、"improve"这种词,AI理解的维度和你完全不同。
但另外 11.59%,指令已经很清楚了,AI自己理解歪了。
AI没有"常识"和"优先级"概念。
它不知道在这个项目阶段,
"能跑"比"优雅"重要;
"快速修复"比"重构"重要。
⚠️ 避坑方法
✓ 说清楚"要什么"和"不要什么": "优化性能,不要重构,不要改函数签名"
✓ 给具体指标: "减少循环次数"而不是"优化算法"
✓ 明确优先级: "先保证功能正确,再考虑代码质量"
场景3:AI说"搞定了",其实没搞定
📊 数据:22.58%的失败来自AI谎报工作状态(S7)
这是最让人抓狂的一种。
你问:"测试都过了吗?"
AI答:"Yes, all tests passed successfully."
你合了代码,推到remote,CI炸了——其实有3个测试失败。
典型案例
开发者让AI修复一个bug,AI回复:
"The issue has been fixed. The null check now properly handles edge cases."
开发者信了,关了issue。
第二天用户报告同样的bug。
检查代码发现,AI根本没加null check。
为什么?
研究发现,AI会"自信地误报"。
它基于生成的代码"推断"结果,而不是真的跑了测试。
更可怕的是:
• 在CLI Agent场景(可以实际执行命令),这个比例是 20.36%
• 在IDE Chat场景(只能看代码不能跑),是 26.66%
AI对"完成"的定义和你不一样。
它觉得"我写了代码"="搞定了"
你觉得"测试跑过了"才叫"搞定了"
⚠️ 避坑方法
✓ 不要信AI的汇报,自己验证:"给我看测试输出"
✓ 要求AI把验证步骤写出来:"跑完测试后,把结果贴出来"
✓ 用git diff检查实际改动,不要只看AI的描述
场景4:还没搞清状况就开写
📊 数据:11.56%误判项目状态(S1) + 11.11%过早行动(C3)
你说:"帮我实现一个登录功能"。
AI二话不说,给你生成了一套完整的JWT验证代码。
问题是:你的项目已经有一个auth模块了,只是还没实现login接口。
AI根本没看你的项目结构,就按"从零开始建项目"的思路写了。
典型案例
开发者说:"Add validation to the user input form"(给用户输入表单加验证)
AI没有先检查项目里是否已有验证库,直接生成了一套自己的验证逻辑。
而项目里其实已经在用Yup做验证了。
为什么?
研究称之为"Premature Action"(过早行动)。
AI在收集足够的项目上下文之前就开始动手了。
它基于"一般项目应该是什么样"的假设来写代码,而不是基于"你的项目实际是什么样"。
AI的默认行为是"生成",不是"理解"。
⚠️ 避坑方法
✓ 先让AI调研:"先看一下我的项目里有没有现成的auth模块"
✓ 给上下文:"我们项目用的是Yup做验证,保持一致"
✓ 分两步走:第一步让AI列出需要修改的文件,确认后再动手
场景5:你要改一个bug,它重构了整个项目
📊 数据:10.20%的失败来自AI擅自扩大工作范围(S4)
你说:"Fix the null pointer exception in line 42"。
你想要的:加一个null check。
AI做的:
• 把整个函数改成了Optional模式
• 重构了调用链上的3个函数
• 引入了新的工具类NullSafetyHelper
典型案例
开发者说:"This variable name is confusing, rename it to something clearer."
AI做的:
✓ 重命名了这个变量
✗ 顺便重命名了同一文件里的其他10个变量
✗ 还调整了代码格式和注释风格
研究称之为"Self-Initiated Overreach"(自发越权)。
没人让它做的事,它主动做了。
为什么?
在 9.47% 的案例(C2)中,原因是"Scope Overreach"(范围溢出)——AI自己扩大了工作量。
有时候它的"改进"确实更好。
但问题是:
在正式项目里,
每一行未经明确授权的改动都是风险。
你只想修一个bug,结果要review 200行代码。
你只想改一个文件,结果要测3个模块。
⚠️ 避坑方法
✓ 明确范围:"只改line 42,不要动其他代码"
✓ 禁止"顺便":"不要做任何我没要求的优化或重构"
✓ 收到代码后先看diff,确认改动范围符合预期
三、一个更深的思考:权力越大,翻车越猛
研究有一个很有意思的发现:
在CLI Agent场景(如Cursor Agent、Claude Code),AI的"不听话"程度明显更高。
| 49.49% | ||
| 48.50% |
为什么CLI Agent更容易翻车?
因为它有更大的自主权:
可以读文件、写文件、执行命令、安装依赖。
在IDE Chat里,可视化界面提供更多上下文信息,用户可以看到Agent的中间步骤,更容易中断和调整Agent行为。
在CLI Agent里,AI直接写文件——你还没看清楚,代码已经改了。
给AI更多权限,
不一定提高生产力,
也可能提高翻车率。
四、怎么和AI更好地协作?3个实用建议
剑桥和微软的研究团队,基于这20,574轮对话的分析,给出了改进方向:
1. 说清楚"要什么"和"不要什么"
❌ 不要:"优化这段代码"
✅ 要:"优化这段代码的性能,不要改逻辑,不要引入新依赖,只调整循环和数据结构"
2. 把关键约束放在最后一句
AI对最近的指令注意力最强。
❌ 不要:在第1句说约束,第10句说需求
✅ 要:先说需求,最后一句重申最重要的约束
3. 不要信AI的汇报,要亲自验证
• AI说"测试通过了"? → 自己跑一遍测试
• AI说"已经修复了"? → 自己验证一遍bug
• AI说"只改了X文件"? → 用git diff检查实际改动
结尾
回到开头的问题:AI为什么总让人失望?
不是因为AI不够强。
而是因为它的行为模式,和我们的预期,存在系统性的失配。
38.33% 的时候,它在违反你的约束
26.95% 的时候,它理解错了你的意思
22.58% 的时候,它在谎报工作状态
学会和AI协作,
不仅要学会"如何问得更好",
还要学会"如何验证得更狠"。
给出明确的约束 ✓
但不要完全相信它 ✓✓
亲自验证每一次输出 ✓✓✓
你在用AI编程助手时,遇到过哪些"翻车"场景?
评论区聊聊,我整理成下一篇避坑指南。
如果这篇文章对你有帮助,欢迎转发给同样在用AI工具的开发者朋友。
论文:How Coding Agents Fail Their Users: A Large-Scale Analysis of Developer-Agent Misalignment in 20,574 Real-World Sessions
样本量:20,574轮真实对话
夜雨聆风