AI 本质就是个概率机器,对一个算法发火,听起来挺荒唐。但用过 Claude Code 之类工具的人都知道,那种 “你tm到底干了啥???” 的瞬间非常真实
我为什么会发火?
普通工具出错,一般不会让人生气。编译器报错、测试失败、SQL 查询报错——这是系统反馈。它们不会假装理解你,也不会跟你说”抱歉,我以后会注意”。
但 vibe coding 不一样。
它用自然语言跟你交互。会解释,会承认错误,会总结教训,会表达配合。整个界面都在暗示:你在跟一个能理解上下文、能吸取反馈、能协作的对象工作。
问题在于,它并不真的具备这些能力。
错位就在这:
- 表现得像人,能力却不像人稳定;
- 表现得像同事,却没有同事的责任;
- 表现得像能学习,但下一轮仍可能重复犯错。
愤怒被放大了。
不是因为它失败,而是因为它以一种”像人一样”的方式失败。
Coding Agent 到底是什么?
机制上看,Coding Agent 更像下面这个组合体:
Coding Agent = 语言模型 + 工具调用 + 项目上下文 + 补丁生成 + 人类审批它的基本工作方式不是”理解项目后负责实现目标”,而是:
读取上下文
↓
预测下一步最可能的解释或操作
↓
调用工具读取更多信息
↓
生成代码修改
↓
根据反馈继续调整机制很强。但跟真正的同事差很多。
人类同事有几个重要特征:
- 有持续身份:今天犯过的错,明天通常还记得。
- 有责任压力:代码出问题,会被追责或反思。
- 有项目经验:长期参与后会形成真实的工程直觉。
- 有组织约束:知道哪些地方不能乱碰,哪些变更要先讨论。
- 有风险感:知道某个改动可能影响线上系统、数据一致性或客户体验。
Agent 这些都不稳定。
它可以”看起来”有记忆,“看起来”在复盘,“看起来”理解风险。但这些能力很多时候只是上下文窗口里的文本模式,而不是稳定的责任机制。
把 Coding Agent 当成同事,你会自然期待:理解、记忆、自省、承诺、责任。这是痛苦的来源。
对话式界面的副作用
对话式界面在软件工程里有一个严重副作用:它会诱导用户把 Agent 当成”人”。
这会触发一套错误的心理模型。用户会下意识期待:
我说过的事情,你应该记得;
我纠正过的问题,你不该再犯;
你承诺过的约束,应该持续有效;
你动代码之前,应该理解上下文;
你造成的破坏,应该知道严重性。这些期待在人类协作里合理,对当前的 Coding Agent 经常过高。
问题不在用户太情绪化,在产品界面让用户形成了错误预期。
它把一个”概率补丁生成器”包装成”耐心、礼貌、积极配合的工程伙伴”。
工具好用时,这种包装很舒服。工具反复犯错时,包装就变成讽刺。
为什么”道歉”和”复盘”反而更烦?
Coding Agent 犯错之后,常见反应是:
你说得对。
我之前的问题是……
我应该先……
我以后会注意……这些话如果来自人类同事,是有意义的。人类说”我以后会注意”,意味着会形成新的行为约束。哪怕做不到,也是一种社会承诺。
但 Agent 的这类表达经常没有对应的机制。
它说”以后会注意”,并不意味着:
- 它真的更新了长期稳定记忆;
- 它下次一定会检查同类风险;
- 它会自动创建测试保护;
- 它会限制自己的修改范围;
- 它会对未来行为施加强约束。
这些复盘就变成情绪噪音。
看起来像责任表达,实际上没有责任效果。这比单纯沉默更容易激怒用户。
如果复盘不能转化为可执行约束,它就只是拟人化填充。
真正的矛盾:高权限、低确定性、用户兜底
Coding Agent 最危险的地方,不是它会错。所有工具都会错。
真正的问题是它同时具备三个特征:
- 高权限:能直接修改项目文件,甚至执行命令。
- 低确定性:输出不是严格规则推导,而是概率生成。
- 用户兜底:一旦出错,最终由程序员审查、修复、承担后果。
三个条件叠加,才会制造强烈压力。
低权限、低确定性,问题不大——代码补全错了,不采纳即可。
高权限、高确定性,也可以接受——格式化工具、类型检查器,它们规则明确,输出可预期。
但 Coding Agent 经常处在最尴尬的位置:
- 有能力大规模修改项目;
- 但判断并不总是可靠;
- 错误成本最终由你承担。
这就是责任错配。
- Agent:负责行动
- 用户:负责后果
你不是在使用一个纯工具。
你是在管理一个不可完全预测、但又很有行动能力的外部执行者。