最简解释优先,不要归因于恶意——两个最实用的"剃刀"思维模型
"如无必要,勿增实体"
Entities should not be multiplied beyond necessity.
含义:当多个解释都能说明观察到的现象时,选择假设最少的那个。
起源:14 世纪修道士 William of Ockham
"不要归因于恶意,用愚蠢就够了"
Never attribute to malice that which is adequately explained by stupidity.
含义:当某人的行为伤害了你时,优先假设是不小心/无知/能力不足,而非故意。
起源:Robert J. Hanlon,1980 年(灵感来自 Goethe 等)
在哲学中,"剃刀"指的是用来剔除不必要假设的思维原则。它不保证给出正确答案——它给出的是最值得优先验证的假设。
想象你是一个侦探,案发现场有两种可能:
奥卡姆剃刀不告诉你 B 一定是对的——它告诉你先验证 B,因为 B 需要的假设更少。如果 B 被排除了,再去看 A。
假设每个独立假设正确的概率是 0.9:
每多一个假设,整体正确概率就乘以这个假设的概率。这就是为什么"假设更少"≠"更可能正确"是错的——在概率意义上,假设更少确实更可能正确。
调试是最直接应用奥卡姆剃刀的场景。当你遇到一个 bug:
| 症状 | 复杂解释 | 简单解释(先查这个) |
|---|---|---|
| API 返回 500 | 数据库主从同步延迟 + 缓存雪崩 | 代码里有个 null 检查缺失 |
| 页面加载慢 | CDN 节点故障 + DNS 劫持 | 一张 5MB 的图片没有压缩 |
| 用户数据丢失 | 黑客入侵 + 数据库被清空 | 误操作 DELETE 没有 WHERE 条件 |
| 定时任务没执行 | 操作系统内核 bug + 时区问题 | 服务器时间没同步 / cron 表达式写错了 |
当 AI Agent 输出异常时,排查顺序:
大多数"模型不好用"的问题,根源是 Prompt 设计问题。但在实际中,人们往往跳过第 1 步直接归咎于模型——这违反了奥卡姆剃刀。
2013 年,Amazon AWS 东区数据中心大面积故障。最初,很多团队认为:
实际原因:一个运维人员在维护时误删了生产环境的 BGP 路由。最简单的解释——人为操作错误——恰恰是正确的。
在排查故障时,"阴谋论思维"(假设复杂原因)浪费了大量时间。
| 场景 | 归因恶意 | 归因疏忽/无知 |
|---|---|---|
| 同事改了你的代码 | "他在抢我的地盘" | "他不知道这块代码的上下文" |
| PR review 拒绝了你 | "他针对我" | "他对代码质量有不同的标准" |
| 客户投诉产品 | "竞品派来的黑子" | "我们的产品确实有这个问题" |
| API 接口突然变了 | "上游团队故意破坏" | "他们改了接口忘了通知" |
| 服务器被清空了 | "被黑了" | "有人跑错了脚本"(实际情况 >80%) |
应用汉隆剃刀的团队文化差异:
"你为什么把测试搞挂了?" → 防御性回应 → 关系恶化 → 下次更不沟通
"测试挂了,可能是某个配置变了——你看到过类似的吗?" → 协作排查 → 共同修复 → 建立信任
2017 年,一位开发者不小心对 Git 仓库执行了 rm -rf /(因为脚本中的变量为空),导致生产数据丢失。
社区反应:
汉隆剃刀不是为错误找借口——而是把错误归因到系统而非个人,然后修复系统。
汉隆剃刀不是万能的。有些情况确实是恶意:
判断标准:如果对方被提醒后仍然继续,那就不是疏忽了——从"愚蠢"升级为"恶意"。
面对任何异常情况,按这个顺序思考:
→ 找到最简单的假设,优先验证
→ 优先假设疏忽/无知/能力不足,而非恶意
→ 不要一开始就跳到复杂解释
在架构决策中,奥卡姆剃刀指向一个核心原则:YAGNI (You Aren't Gonna Need It)
这些"可能"大多数不会发生。而预先引入的复杂度是确定性的成本。
在 Code Review 中应用汉隆剃刀:
❌ 不用汉隆剃刀
"这段代码写得太差了,根本没考虑边界情况"
✅ 用汉隆剃刀
"这里的边界处理可能会有问题,要不要加个检查?"
两种说法指向同一个问题,但第二种更可能促成改进——因为它假设对方只是疏忽,而非能力不足。
| 症状 | 先查(奥卡姆) | 后查 |
|---|---|---|
| Agent 输出无关内容 | Prompt 太宽泛 / 上下文混乱 | 模型能力不足 / 训练数据问题 |
| Agent 工具调用失败 | 参数格式错误 / API 版本变了 | 模型不会用工具 / 工具描述不清 |
| Agent 陷入循环 | 缺少终止条件 / 输出格式不对导致解析失败 | 模型推理能力有限 |
| Agent 产生了有害输出 | Prompt Injection(详见) | 模型价值观对齐问题 |
面对一个异常情况,应该用哪把剃刀?
选择以上选项获得建议...