Havenlon|杂谈:瑞士奶酪模型与执行边界
2026/7/8 12:57:49 网站建设 项目流程

一、灾难很少来自单点

很多复杂系统的灾难,表面上看起来都是一个点出了问题。

一个人按错了按钮,一个系统放过了异常,一个审批没有看清楚,一个权限配置得过宽,一个告警被忽略了。事故发生之后,人们复盘时,很容易把责任归到某一个具体错误上:如果当时那个人更谨慎一点,就不会出事;如果那个系统判断更准确一点,就不会出事;如果那次审批没有通过,就不会出事;如果那条告警被及时处理,就不会出事。

这些说法都没有错,但也都不完整。

因为真正的灾难,通常不是一个错误造成的。真正的灾难,是一个错误穿过了所有本该阻挡它的边界。

单点归因之所以流行,是因为它符合人的直觉,也符合事后叙事的需要。一个清晰的责任人、一个明确的失误动作,能让复盘迅速收尾,能让组织获得"我们已经找到原因"的安全感。但这种安全感往往是虚假的。它掩盖了一个更重要的事实:如果这个系统足够健康,那个单点错误本应该在中途被某一层防线拦下来。它没有被拦下来,才是真正值得追问的问题。

换句话说,值得研究的不是"谁犯了错",而是"为什么这个错误一路走到了终点"。前者指向个人,后者指向结构。前者能安抚情绪,后者才能改进系统。

二、瑞士奶酪模型:承认每一层都有孔洞

这就是瑞士奶酪模型最有价值的地方。

心理学家詹姆斯·里森(James Reason)提出过一个经典的系统安全模型:复杂系统中的防御机制,就像一片片瑞士奶酪。每一片奶酪代表一层防线,而每一层防线都有自己的孔洞。孔洞代表漏洞、缺陷、误判、疏忽、组织惯性、流程失效、技术盲区。

单独一个孔洞,并不一定会导致灾难。真正危险的是,当多片奶酪上的孔洞刚好连成一条线时,风险就会一路穿透所有防线,最终变成现实世界里的事故。

这件事听起来很简单,但它背后的安全观非常深。

它提醒我们:复杂系统里没有完美的一层。人不完美,流程不完美,软件不完美,审批不完美,风控不完美,组织不完美,硬件也不完美。任何一层,只要放到足够长的时间和足够多的场景里,都会暴露出它的孔洞。这不是某个团队不够努力,而是复杂系统的固有属性。

因此,安全的重点,不是幻想某一层永远正确,而是承认每一层都可能出错,然后设法让这些错误不要轻易连成一条通道。

这是一个视角上的转变。传统的可靠性思路,往往是不断加固单层:让这个环节更严格,让那个规则更精细,让某个人更负责。这种努力当然有意义,但它有天花板——因为任何单层的可靠性都无法趋近百分之百。而瑞士奶酪模型给出的是另一条路:与其追求单层的绝对可靠,不如追求多层之间的相互独立。当各层的孔洞位置足够错开,即使每一层都不完美,整体系统依然可以维持很高的安全水位。

里森模型还隐含着一个容易被忽略的区分:孔洞分为两类。一类是"活动性失误",也就是一线操作中即时发生的错误,它们往往显眼、易于归因;另一类是"潜在条件",也就是长期埋在系统里的结构性缺陷,比如设计妥协、资源不足、激励错位、流程冗余失效。前者像是瑞士奶酪上临时出现的孔洞,后者则是那些一直存在、只是平时没有对齐的孔洞。真正致命的事故,往往是一个显眼的即时失误,恰好落进了早已存在的结构性孔洞之中。所以只盯着"谁按错了按钮",等于只处理了活动性失误,而放过了那些一直潜伏的潜在条件。

三、界面不等于边界

很多系统的问题,恰恰出在这里。

它们看起来有很多防线:有账号体系,有权限控制,有审批流程,有日志审计,有风控规则,有安全告警,有管理员复核。从组织架构图上看,防线一层接一层,似乎相当稳固。

但仔细一看,这些防线可能都建立在同一个软件系统里,依赖同一套身份,服从同一套权限模型,被同一批管理员配置,甚至可以被同一个攻击路径同时影响。

这就很危险。因为这不是多层独立防御,而是把同一种防御重复包装了很多遍。看起来有很多片奶酪,实际上孔洞可能是一起移动的。

一个账号被盗,权限失效;一个管理员被诱导,审批失效;一个系统被攻破,日志失效;一个策略被修改,风控失效;一个软件边界被绕过,所有软件内的防线一起失效。这种情况下,系统并不是真的有多层边界,它只是有很多个界面。

界面不等于边界,流程不等于边界,审批不等于边界,日志也不等于边界。

这四者的区别值得说清楚。界面解决的是"人如何与系统交互",它关乎可用性,而不关乎阻断能力。流程解决的是"一件事按什么顺序推进",它规定了动作的次序,却不保证每一步都做了实质判断。审批解决的是"谁在名义上负责",但如果审批人拿到的信息本身是错的、或者审批只是点一下确认,那么这层防线的孔洞可能非常大。日志解决的是"事后能否还原过程",它是取证工具,而不是拦截工具——日志再完整,也无法阻止一个正在发生的错误动作。

真正的边界,必须能在关键时刻阻断风险继续向下穿透。它的价值不在于证明前面所有判断都正确,而在于当前面判断出错时,仍然有能力说"不"。一个只能记录、不能拦截的机制,无论看起来多正式,都不能算作真正意义上的边界。

判断一层机制是不是真边界,可以问三个问题:它是否独立于它所要防范的对象?它是否有能力在事发当下中断动作,而不只是事后记录?它失效时,是否会连带让其他防线一起失效?如果一层机制和它要防范的风险共用同一套前提,那么当那套前提被攻破时,这层机制也就同时失效了——它看似是一片新的奶酪,实则和前一片共享着同一个孔洞。

四、被忽略的最后一步:执行前的边界

这也是瑞士奶酪模型对执行安全最重要的启发。

很多系统只重视"决策前"的控制,却忽略了"执行前"的最后边界。

比如一个高风险动作,在真正发生之前,可能已经经过了很多环节:用户发起了请求,系统识别了身份,权限判断通过了,审批流程完成了,风控规则没有拦截,日志系统记录了过程。于是系统很自然地认为:既然前面的环节都通过了,那就应该执行。

但问题在于,前面的环节都可能带着孔洞。身份可能被冒用,权限可能配置过宽,审批可能被诱导,风控可能只看静态规则,日志可能只记录已经发生的事,组织可能默认相信流程结果。

如果最终执行层没有独立判断能力,那么所有前置环节的孔洞一旦对齐,高风险动作就会被直接释放到现实世界。

这就是执行边界存在的意义。

执行边界不是再加一个审批按钮,也不是再加一个更复杂的风控规则。它要解决的是一个更底层的问题:当前面的判断都可能出错时,最终执行是否仍然可以被独立控制?

换句话说,执行边界不是为了取代身份、审批、风控和日志,而是为了让它们的错误不能自动变成现实世界里的结果。

这里需要强调"独立"两个字。如果执行层的判断依据,完全来自前面那些环节传递下来的结论——比如"审批系统说通过了""风控系统说没问题"——那么执行层其实没有独立性,它只是把上游的判断照单执行。真正的执行边界,需要拥有一部分不依赖上游结论的判断能力:它要能基于当前状态、当前策略、当前可承受损失,重新评估这个动作本身,而不是重新确认上游是否评估过。前者是独立判断,后者只是重复盖章。

五、AI Agent 改变了错误穿透的速度

这件事在 AI 时代会变得更重要,因为 AI Agent 改变了错误穿透系统的速度。

过去,一个错误要穿过多个系统,往往需要人一步一步操作。人会停顿,会犹豫,会被界面提醒打断,会受到物理环境限制。这些看似低效的环节,客观上构成了错误传播的"摩擦力"。很多潜在事故,正是在这种摩擦中被拖慢、被察觉、被中断的。一个人在连续操作十几个步骤时,中途总有机会意识到"不太对",从而停下来。

但 AI Agent 不一样。它可以连续理解指令,可以自动调用工具,可以跨系统完成任务,可以在短时间内尝试多个路径,可以把原本分散的流程串联起来。

AI 不一定创造新的孔洞,但 AI 会让原本分散的孔洞更容易被连接起来。

以前,设计边界、操作边界、组织边界之间,可能还有人的摩擦作为缓冲。到了 AI Agent 时代,很多摩擦会被自动化抹平。这当然提高了效率,但同时也带来了一个新问题:当错误发生时,它也会被更高效地执行。

一个错误指令,可能被 AI 解释成一组连续动作;一个错误授权,可能被 AI 扩展成完整任务链;一个错误审批,可能被 AI 自动推向最终执行;一个被污染的上下文,可能让 AI 在多个系统之间持续推进错误结果。

这时候,风险不再只是"AI 说错了什么"。真正的问题是:AI 能不能把错误一路做下去。

这里有一个关键的转变。在瑞士奶酪模型的原始语境里,孔洞的对齐通常是偶然的——多个缺陷恰好在同一时刻、同一路径上相遇,概率并不高,这也是复杂系统大多数时候不出事的原因。但一个具备规划能力的 AI Agent,会主动地、系统地去寻找一条能够完成目标的路径。当目标本身被误设、或上下文被污染时,AI 不再是被动地等待孔洞偶然对齐,而是在有效地"搜索"一条能穿透所有防线的通道。偶然的对齐变成了主动的对齐,小概率事件的假设不再成立。这不是说 AI 有恶意,而是说规划能力本身会显著提高孔洞被连成通道的概率。

六、从"输出是否正确"到"执行是否可控"

所以,AI 时代的安全问题,不能只停留在内容安全、提示词安全、模型对齐、权限管理这些层面。这些都重要,但还不够。

因为当 AI 进入真实业务流程,开始调用工具、控制系统、发起交易、触发设备、修改状态时,安全问题就从"输出是否正确"变成了"执行是否可控"。

这是两类性质不同的问题。"输出是否正确"关注的是信息层面:模型说的话对不对、生成的内容有没有害、给出的建议是否可靠。它的最坏后果,通常停留在信息层,可以通过人的复核来缓冲。而"执行是否可控"关注的是行动层:模型触发的动作会不会真的发生、发生之后能不能撤回、造成的后果是否可承受。它的最坏后果,直接落在现实世界,往往没有第二次机会。

当一个系统里的 AI 只负责"说",人负责"做"时,人这一层天然构成了执行边界。但当 AI 开始既"说"又"做",人被移出了动作回路,那道原本由人承担的执行边界就消失了。如果没有一个新的机制补上这道边界,系统实际上是在用效率换取控制力——而且这种交换常常是无意识的,是在"让 AI 多做一点"的渐进过程中悄悄完成的。

这正是执行边界要面对的问题。瑞士奶酪模型告诉我们,灾难不是某一个孔洞造成的,灾难发生,是因为孔洞对齐了。而执行边界要做的,就是让最后一片奶酪不能被前面的孔洞自然穿透。

它必须和前面的系统保持一定独立性。不能因为 SaaS 显示通过,就必然执行;不能因为审批完成,就必然执行;不能因为账号权限足够,就必然执行;不能因为 AI Agent 生成了动作计划,就必然执行;不能因为流程看起来完整,就必然执行。

七、在最后一刻重新发问

真正的执行控制,必须在最后一刻重新问一遍:这个动作是否仍然符合当前策略?这个动作是否仍然来自可信路径?这个动作是否仍然在允许范围内?这个动作是否能够被记录、证明和追溯?这个动作一旦发生,是否超出了系统可承受的损失边界?

这些问题不是为了拖慢系统,而是为了防止系统在看似正确的流程中,把错误一路送到现实世界。

值得注意的是,这几个问题的落点都在"当前"和"这个动作本身",而不在"之前是否批准过"。这是执行边界与传统审批的根本区别。审批问的是"这件事获得授权了吗",执行边界问的是"此刻真正要发生的这个具体动作,是否仍然安全"。二者之间常常存在缝隙:获得授权的是一个抽象意图,真正执行的是一串具体操作,而 AI 恰恰是在意图到操作的翻译过程中,可能引入偏差、放大范围、串联出计划外的路径。执行边界守的,正是这条从"被批准的意图"到"被执行的动作"之间的缝隙。

还有一点:可承受损失边界,是这几个问题里最容易被忽略、却最关键的一个。前面几问都是在判断动作"是否合规、是否可信",而这一问是在判断"即使一切看起来都对,万一错了,我们赔得起吗"。它承认了一个现实——判断永远可能出错——并要求系统为出错留出安全垫。一个动作如果合规、可信、在权限范围内,但一旦出错就会造成不可逆的巨大损失,那么它本身就应该被更谨慎地对待,哪怕前面所有环节都亮了绿灯。

八、每一层都以为自己不是最后责任人

复杂系统最危险的地方,不是没有规则,而是规则之间彼此默认相信。

身份系统相信审批系统,审批系统相信风控系统,风控系统相信业务系统,业务系统相信执行系统,执行系统相信前面都已经判断过了。于是,每一层都以为自己不是最后责任人。最后,风险没有被任何一层真正拦住。

这就是很多事故的共同结构。不是没人管,而是每一层都管了一点,但没有一层真正守住最终边界。

这种"责任的扩散"是一种典型的系统性失效。它不需要任何一个环节彻底失职,只需要每个环节都做了一部分、并合理地假设"剩下的自然有人把关"。每一层的假设单独看都不算错,甚至相当高效——分工本就意味着彼此信任。但当这些信任首尾相接、形成闭环时,就没有任何一个位置在做"最终把关"这件事了。信任链在提高效率的同时,也悄悄地把责任稀释成了空气。

要打破这个结构,靠的不是让每一层都更努力,而是要在系统中明确指定一层"必须假设前面都可能出错"的角色。这一层的职责不是补充信任,而是刻意保留怀疑。它存在的意义,就是拒绝加入那条相互信任的链条。

九、漏洞永远存在,通道不该形成

瑞士奶酪模型真正想表达的,不是系统一定会失败,而是复杂系统必须接受一个事实:漏洞永远存在。

所以安全的关键,不是消灭所有孔洞,而是让孔洞无法轻易连成通道。

在传统系统里,这意味着设计、流程、组织、审计、操作之间要形成互相错位的防线。这里的"错位"是重点——如果各层的孔洞恰好都在同一个位置,那么再多的层数也没有意义。防线之间的独立性,比防线的数量更重要。

在 AI 时代,这还意味着执行权不能完全交给同一个软件闭环。因为当 AI 能够理解、规划和调用工具时,它就不再只是信息系统里的一个输入端,它开始成为推动现实结果发生的执行力量。一旦执行力量进入系统,最后的边界就必须重新设计。

这也是为什么执行边界不是一个附加功能,而是一种新的安全层。它不是为了让系统变得保守,而是为了让系统在高效率运行时,仍然不会因为一串连续失误而失去控制。

需要澄清一点:执行边界并不与自动化对立。它的目标不是把人重新塞回每一个动作里,也不是给所有操作都加上摩擦。恰恰相反,它是让绝大多数低风险动作可以放心地高速通过,同时把独立判断的资源集中在少数真正不可逆、真正高损失的动作上。一个设计良好的执行边界,应该在日常中几乎无感,只在关键时刻才显形。安全和效率在这里不是零和关系——恰恰是因为有了可靠的最后一道边界,系统才敢于在前面的环节大胆地自动化。

十、可靠不是永不出错

真正可靠的系统,不是假设自己永远正确。真正可靠的系统,是在自己出错时,也不会让错误一路穿透到底。

瑞士奶酪模型讲的是孔洞,执行边界要解决的是穿透。一个复杂系统可以承认自己有孔洞,但不能允许所有孔洞连成一条直线。

这就是执行控制的意义。

安全不是没有漏洞,安全是不让漏洞连成通道。

把这两句话放在一起,其实构成了一种更成熟的安全观。前一句承认了不完美是常态——任何声称"我们已经消灭了所有漏洞"的系统,要么在自欺,要么在等待一次尚未到来的对齐。后一句则给出了在不完美之上继续运转的方法——不追求每一层都无懈可击,而是确保各层的缺陷彼此错开、最后一层始终独立。这既是对复杂系统的谦卑,也是对它的负责。

当越来越多的系统开始把行动能力交给自动化、交给 AI Agent 时,这种安全观会变得比以往任何时候都更重要。因为效率的提升会让好的结果来得更快,也会让坏的结果来得更快。而真正决定一个系统能否长期可靠的,往往不是它跑得多快,而是它在跑错方向时,还剩下几层能让它停下来。


Havenlon 杂谈 · 本文为系统安全视角下的观点整理与讨论,不构成任何具体产品或方案建议。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询