:波音 737 MAX——当单一信号获得过大的执行权)
这是历史中的执行控制系列的第十八篇。第一篇[历史中的执行控制一诺曼底登陆 D-Day 的天气窗口]——没有正确的执行窗口就不执行。往期还包括切尔诺贝利不要让错误穿过所有边界、阿波罗 13失败不是终点边界才是韧性、Bletchley Park不是破解密码而是重构决策优势、珍珠港信号必须及时改变执行状态、挑战者号工程边界不能被执行压力压过、Therac-25软件不能替代硬件边界、火星气候轨道器接口通过不代表语义一致、阿丽亚娜 5 号复用成功代码不代表新场景安全、三哩岛信号很多不代表状态判断正确、Petrov告警不等于行动、Arkhipov单点权力不能决定灾难性执行、Knight Capital机器速度会放大错误、Flash Crash局部正确不代表整体安全、Titanic看见风险不代表还有时间转向、哥伦比亚号历史幸存会让组织逐渐接受异常、北美大停电局部错误必须有传播边界。这一篇回到一个最基础、也最尖锐的问题一个单一输入为什么能够拥有如此大的执行影响力摘要波音 737 MAX 的两起空难通常被放进航空工程、软件设计、飞行员训练和适航认证的框架里讨论。但从 Havenlon 的视角重新看它暴露的是一个更普遍的执行控制问题——一个单一信号错误时它是否仍然拥有足够大的权限把自己的错误不断转化成真实执行。真正值得思考的并不是传感器会不会坏。任何传感器都可能坏任何模型都可能误判任何 Agent 都可能理解错误。真正危险的是当一个单点错了它还有没有能力独自把错误变成不可逆的现实。737 MAX 给 Havenlon 的第十八课是单点信号不应该直接成为最终事实单点判断不应该直接获得最终执行权。一、先把历史讲准确波音 737 MAX 是 737 系列的换代机型。为了装上更省油、但更大更靠前的 LEAP-1B 发动机737 机身离地很低发动机只能前移上抬飞机在大迎角下产生了轻微的抬头倾向。为了让它飞起来和老 737 一样、从而沿用同一型别等级、免去昂贵的飞行员改装训练波音加装了一套软件——机动特性增强系统 MCAS当迎角传感器报告迎角过大时它会自动推动水平安定面、压低机头。而这套系统当初并没有被写进飞行手册、也没有出现在改装课程里飞行员根本不知道它的存在。致命的设计在于MCAS 在原始版本中只依赖两个迎角传感器中的一个。2018 年 10 月 29 日狮航 610 航班从雅加达起飞约 13 分钟后坠入爪哇海189 人罹难——事后查明那只迎角传感器在坠机前一天刚被更换、却因校准不当而失准同样的故障在前一晚的航班上就已出现过错误的高迎角数据让 MCAS 反复触发把安定面一次次推向低头极限机组用电动配平反抗最终没能赢过它。不到五个月后的 2019 年 3 月 10 日埃塞俄比亚航空 302 航班从亚的斯亚贝巴起飞约 6 分钟后坠毁、157 人罹难黑匣子显示出与狮航几乎一模一样的 MCAS 激活序列。两起事故共夺去 346 条生命。美国 NTSB 的数据显示事故航班上左侧迎角读数比右侧高出约 20°狮航乃至约 59°埃航——如此巨大的左右分歧本应是这个数据不可信的最强信号。还有一个体制层面的关键点当年MCAS 非指令性激活被评定为major重大级别的危害而非更高的hazardous/catastrophic——正是这个偏低的评级让只用单一传感器在认证上得以通过。评估同时假设飞行员会像处理安定面失控一样在几秒内识别并纠正 MCAS但真实事故中机组面对的是多个告警同时炸响抖杆、空速/高度不一致、配平反复自动动作……根本没有条件按那套理想假设去反应。事故后737 MAX 全球停飞近 20 个月2019 年 3 月至 2020 年 11 月。FAA 批准复飞时的修改方向恰恰是把这些单点一一拆掉MCAS 改为比较两个迎角传感器当两者相差超过 5.5° 时不再按原方式激活、并向机组给出AOA Disagree提示每次高迎角事件只允许 MCAS 激活一次、不能被重置后反复触发MCAS 也不再拥有能压过驾驶杆的权限。这份修改清单其实就是一份如何不让单点独裁的说明书。二、问题不是传感器会出错而是系统如何对待它的错误任何复杂工程系统都要用传感器——飞机得知道速度、高度、姿态、迎角、发动机状态。所以问题从来不是我们能不能相信传感器而是如果这个传感器错了系统会发生什么这背后是两种截然不同的安全哲学。第一种是传感器应该可靠所以系统可以使用它。第二种是传感器应该可靠但它仍然可能失败所以系统必须限制它失败时能造成的后果。Havenlon 站在第二种一边。因为可靠性从来不是绝对属性——一个器件可以拥有极低的故障率但只要它的错误能直接触发高风险动作它就仍然是系统性的单点风险。一个东西有多可信和它该被授予多大的执行权是两个必须分开回答的问题。三、传感器值 ≠ 现实它只是关于现实的一份证词迎角传感器并不理解飞机它只测量一个物理量、再把数据送进别的系统。这意味着系统真正收到的从来不是现实本身而是对现实的一次测量。这个区别至关重要。在埃航 302 的调查里飞机刚起飞左侧迎角就迅速跳到异常值、与右侧形成巨大差异而这份错误数据随后堂而皇之地参与了飞控判断。所以——Sensor Value ≠ Physical Reality传感器值不等于现实它只是关于现实的一份证词。这和 Havenlon 的许多概念完全同构SaaS 返回允许不等于现实允许Agent 判断安全不等于现实安全Owner 发出确认不等于 Intent 没有漂移Payload 签名正确不等于其语义正确日志显示成功不等于物理结果符合预期。所有上游信号本质上都只是关于现实的一份声明。高风险系统真正的问题是谁负责重新验证这份声明四、单一来源最危险的时候是它从输入变成事实如果系统只是读取传感器数据、显示给飞行员那么单一传感器错误首先是个信息问题。但当自动控制开始直接使用这个数据性质就变了数据不再只是系统认为迎角是这样而变成了因为迎角是这样所以系统应当动作。于是一条链条出现——信号 → 解释 → 控制 → 物理动作。真正危险的地方就在第一步和最后一步之间的距离越来越短。当中间没有独立验证单一传感器就获得了一种隐含的权力它对现实的描述可以直接改变现实。这就是执行控制问题的核心。当信号和执行之间的问号被抹掉系统就退化成了 Signal → Execution。五、单一信号可以重复触发执行执行次数本身也是一种边界一次错误动作已经危险更危险的是同一个错误来源可以不断触发后续动作。狮航调查明确记录在错误迎角数据存在的情况下MCAS反复激活多重告警、重复的系统动作和各种干扰叠加共同压垮了机组的操控能力。这把问题又推进一层假设一个输入第一次被判为可信它是否就该永远可信显然不是。同一来源在短时间内连续要求执行本身就应该被当成一个新的风险信号——它可能意味着传感器异常、状态误判或者系统已进入反馈回路。这和第十三篇的 Knight Capital 惊人地相似真正危险的不是第一条错误指令而是错误获得了连续执行能力。所以传统权限系统只问你有没有权限而执行控制还必须问你已经执行了多少次。一个动作执行一次也许合理执行十次可能异常执行一万次则风险完全不同。真正的执行边界不该只有 Allow / Deny还应包含频率、次数、时间窗口、累计影响。重复执行不是第一次执行的简单复制——每一次执行都在改变下一次执行的风险状态。六、两个传感器不只是多一个保险Unknown ≠ AllowFAA 要求 MCAS 比较两个迎角传感器、并在两者显著不一致时不再按原方式工作。这个改动的深层意义不是多装一个更保险而是——单一来源失去了定义现实的绝对权力。当一个传感器说危险、另一个说没危险系统正确的结论不该是随便信一个而应是现实状态无法确认Reality Unknown。此时正确的行为往往不是挑一个继续而是降低自动控制能力、通知操作者、等待更多证据。这就是 Havenlon 说的Unknown ≠ Allow不确定不等于放行。但还要再往下一层两个传感器也不自动等于安全。如果它们来自相同设计、受相同环境影响、连着同一套软件、面对同一种攻击它们就可能一起错。所以真正可靠的验证不是简单增加数量而是Orthogonal Verification正交验证——让不同性质的证据相互印证一个来自传感器、一个来自不同的物理测量、一个来自飞行状态、最后还允许人或独立控制域重新裁决。Havenlon 也是如此两个 SaaS 投票不一定是两个独立边界两个 Agent 用同一个基础模型复核也不一定独立两个模块读同一份被污染的数据更不构成多重验证。真正的正交边界来自不同角色、不同信任域、不同设备、不同密钥、不同事实来源最后再由独立执行层收敛。这也正是为什么多签不自动等于共同治理——如果三个审批人看到的是同一张被篡改的页面3/3 通过也没有提高多少安全性。真正的共同治理不是增加票数而是增加独立边界。七、Petrov 与 737 MAX其实在讲同一个问题第十一篇写过冷战误报中的 Petrov核心是告警不等于行动预警系统报告了攻击但系统仍要判断这个告警是否真实。737 MAX 把它推进了一层——传感器不等于事实一个传感器给出高迎角但系统仍要问这份数据是否足以支持自动控制动作。两件事结构完全一样Petrov 是Signal → Attack?737 MAX 是Sensor → Dangerous AOA?而 Havenlon 是Request → Execution?。中间那个问号就是执行控制真正存在的位置。AI 时代还有一个更隐蔽的陷阱模型会给出置信度——98% 可疑、99% 恶意、高置信度。这很容易让人误以为置信度够高就可以自动执行。但一个坏掉的传感器也能非常坚定地输出错误值一个模型同样能非常自信地给出错误结论。置信度描述的是判断系统自己的确定程度不是现实的确定程度。高置信度可以提高警戒、增加验证、收紧边界但当动作高度不可逆时绝不该简单地变成99% → Execute。Confidence ≠ Authority置信度不是执行权。八、人不是最后一个万能兜底有人会说就算自动化出错不还有飞行员吗737 MAX 最沉重的教训之一恰恰是不能把系统安全建立在人最后一定能纠正机器这个假设上。NTSB 在 2019 年的安全建议中指出原有安全评估对飞行员如何识别并响应非预期 MCAS 动作做了过于乐观的假设而真实事故中机组同时面对多个告警与异常信息其反应远不符合那套理想分析——NTSB 因此要求安全评估必须更真实地考虑多个告警同时出现对人的识别与响应能力的影响。人不是无限带宽的安全模块。当多个告警同时炸响、系统连续动作、状态快速变化、而操作者又根本不知道软件内部在做什么时人的反应能力会急剧下降。最危险的设计是让人对一个自己看不见的系统负最终责任——软件握着执行权出事却要求人在几秒内反推它为什么这样做、输入来自哪、现在是什么状态、下一步会怎样。这不是合理的人机协作。真正的执行控制应当让系统行为具备可理解的边界为什么执行、依据什么事实、触发了哪条策略、执行了几次、如何进入 Safe Mode——这也是 Havenlon Evidence 的意义之一证据不只给事后调查看它本身应帮助系统在当下回答现在为什么允许执行。Human-in-the-loop 不是万能安全边界。真正可靠的系统应尽量让错误在到达人之前就被限制。九、AI Agent正在走向同样的结构737 MAX 值得今天重讲是因为 AI Agent 正在获得同构的能力它接收信号、解释信号、形成判断、调用工具、改变现实。比如监控发现异常登录 → Agent 判断账户被攻击 → 冻结账户 → 撤销 Token → 修改访问策略 → 同步到其他系统。如果最初那个信号错了呢一个错误告警会迅速变成多个真实动作。这就是 AI Agent 时代的单一传感器问题传感器变成了模型控制系统变成了 Agent而执行对象从飞机的操纵面扩展到了资产、权限、服务器、数据库、机器人和工业设备。单点判断拥有的执行能力越完整AI 越快错误进入现实也越快。十、Havenlon 的答案信号可以提出执行但不能拥有执行Havenlon 的结构把这个问题拆得很清楚。Agent 可以说我认为应该执行SaaS 可以说按策略这个请求允许Owner 可以说这是我的真实意图审批人可以说我同意设备可以报告我的状态正常——这些全是重要信号但没有任何一个信号应该独自拥有最终执行权。真正的执行应该发生在这些条件收敛之后Intent 匹配、身份成立、策略成立、审批成立、状态成立、证据完整、时间窗口成立、本地硬件边界允许——然后 Executor 才执行。这不是因为不信任这些角色而是因为没有任何一个角色值得承担我错了、整个系统就一起错的风险。由此引出 737 MAX 给 Havenlon 最重要的一条设计启发高风险系统需要的往往不是多一个赞成票而是独立否决权。如果第二个系统只有允许能力、没有真正的拒绝能力它就只是在重复确认。真正的边界应该能说我的状态与你不一致所以我拒绝我的证据不足所以我拒绝你的 Payload 合法、但与我的 Intent 不一致所以我拒绝你的 SaaS 允许了、但我的本地策略不允许所以我拒绝。传统安全总在寻找更可信的东西——更可靠的管理员、更安全的云、更强的模型、更准的传感器。但高可靠系统必须接受一个现实绝对可信的输入并不存在。传感器会坏管理员会误判AI 会幻觉SaaS 会故障硬件也会失效。所以目标不该是终于找到一个永远正确的东西而应是即使任何一个东西错了系统仍然不会直接冲进灾难性执行。不要问哪个信号足够可信、可以拥有最终执行权。要问即使这个信号错了谁还能拒绝它十一、从十八篇看主线执行控制的第十八个侧面D-Day没有正确窗口不执行。切尔诺贝利不要让错误穿过所有边界。Apollo 13失败不是终点边界才是韧性。Bletchley Park不是破解密码而是重构决策优势。珍珠港信号必须及时改变执行状态。挑战者号工程边界不能被执行压力压过。Therac-25软件不能替代硬件安全边界。Mars Climate Orbiter接口通过不代表语义一致。Ariane 5复用成功代码不代表新场景安全。Three Mile Island信号很多不代表状态判断正确。Petrov告警不等于行动。Arkhipov单点权力不能决定灾难性执行。Knight Capital机器速度会放大错误。Flash Crash局部正确不代表整体安全。Titanic看见风险不代表还有时间转向。Columbia历史幸存会让组织逐渐接受异常。Northeast Blackout局部错误必须有传播边界。Boeing 737 MAX一个单一信号不应获得与其可靠性不匹配的执行权。这十八个故事共同指向一个核心判断真正可靠的系统不是寻找一个永远正确的输入而是让任何单点即使错了也无法独自把系统推向不可逆的现实。结语737 MAX 的教训不能被压缩成一句传感器出了问题。如果只是器件故障那只是可靠性问题。真正值得执行控制系统学习的是一个传感器输出错误之后为什么这份错误能够直接进入自动控制为什么单一来源能被系统当作足够强的事实为什么错误信号能够重复参与执行为什么最后还要靠一个处于高负荷下的人去迅速理解并纠正机器FAA 的复飞修改其实已经给出了答案的一半MCAS 不再依赖单一迎角输入而是比较两侧传感器、加入不一致告警、限制激活次数与权限——本质上就是把单点直达执行这条路一段段掐断。这件事对 AI Agent 时代尤其重要。未来的传感器不一定是一块物理器件它可能是一个模型、一个风险评分、一个 SaaS、一个管理员、一个 Agent、一个第三方 API、一个 Owner。它们都可能非常可靠——但都不应该成为神。737 MAX 给 Havenlon 的第十八课是不要问哪个信号足够可信、可以拥有最终执行权 要问即使这个信号错了谁还能拒绝它真正可靠的执行系统不是寻找一个永远正确的输入而是建立一种结构——任何单点都可以错但任何单点都不能因为自己的错误独自把系统推向不可逆的现实。参考资料Summary of the FAAs Review of the Boeing 737 MAXFAA含单一 AOA 传感器、重复激活、5.5° 不一致监控、单次激活限制等整改NTSB,Safety Recommendation Report ASR-19-012019 年 9 月关于飞行员识别与响应假设的 7 项建议左右 AOA 读数约 20°/59° 差异印度尼西亚 KNKT 狮航 610 最终调查报告埃塞俄比亚 EAIB 埃航 302 调查报告法国 BEA 参与材料背景LEAP-1B 发动机与型别等级、MCAS 未向机组披露、危害等级评定为major、全球停飞2019 年 3 月–2020 年 11 月