Agent 安全的两层结构,制造业早已给过答案

AI 圈这两年在密集讨论 Agent 安全:怎么防止一个自动化的代理删掉生产库、执行不该执行的命令、越权调用工具。各种架构层出不穷——prompt 层的约束、schema 层的校验、运行时的人工审批、工具层的验证、生命周期钩子。
如果你在制造业待过,会有种奇怪的既视感。因为这套东西,工厂叫了它三十年,名字叫 Poka Yoke,防错。
这不是”长得像”。是同一个原则,换了一种介质在跑。
防错本来就分两层
制造业的防错,从来是两个层次。
第一层是检测拦截:传感器联锁、检具、在线检测。错误还是可能发生,但在流出到下一道工序之前被拦下来。它的特点是”成形后拦截”——缺陷已经产生,只是没让它跑出去。
第二层是结构预防:把零件做成非对称的几何形状,做成自定位、自紧固的结构。错误不是被拦住,而是物理上根本装不上去。你想装反都装不进去。
(较真的同行会指出:严格定义里,检验和过程控制不等于防错——对。这里我刻意用一个更宽的两分框架来看问题:拦截已成形的错误,还是让错误无法成形。经典 Poka Yoke 追求的正是后者。)
检测拦截解决”发生了怎么办”,结构预防解决”让它压根发生不了”。
Agent 安全落在一模一样的两层里
把 Agent 安全的那几层逐一拆开,五层各就各位:
- Prompt 层的约束——像作业指导书:写给”人”看的规则,最依赖遵守方自觉的那一层;
- 人工审批——像关键工序的停线专检:靠一个人在动作生效前把关;
- Hooks、linter、pre-commit 检查——像在线检测:违规动作已经成形,在生效之前被拦下;
- Schema 校验——像检具:不合规格的调用直接塞不进接口;
- Sandbox、工具访问控制——像非对称几何:agent 被隔离在容器里,删生产库的那条路径压根不存在。
前三个是检测拦截,后两个是结构预防。同一套两层结构,一个长在车间,一个长在终端里。

三个共享属性,说明这不只是修辞
说”AI 像工厂”很容易,但类比常常只是表面像。这里有三个工程属性实实在在对得上,说明两边跑的是同一个约束原则。
其一,检测拦截要持续维护,结构预防的维护成本低一个量级。传感器要定期校准,检具会磨损更换;而非对称的几何几乎不会”退化”。搬到 Agent 这边:hook 要人去写、去更新,而进程一旦被隔离在容器里,agent 不需要”记住”任何禁令——越界的路径被结构收窄了。
其二,检测拦截依赖人配合,结构预防大幅减少这种依赖。联锁装置被操作员图省事拔掉的故事,每个工厂都有;开发者一个跳过权限的参数,就把 hook 绕过去了。但非对称零件装不反,不管操作员心里怎么想;容器里的 agent 摸不到生产库,不管 prompt 怎么写。当然,结构预防也不是魔法——容器同样依赖权限、挂载和漏洞管理,schema 挡不住”格式合法但语义有害”的调用。它消灭的是一大类错误,不是全部错误——这正是还需要纵深的原因。
其三,纵深防御的逻辑相同。任意单层失效,其余各层照样兜底;反过来,一次严重的删库事故,往往是几层同时缺席。这种情况在制造业有个现成的名字,叫”没有质量体系”。
最强的防错,来自结构
制造业花了几十年,才把一件事学扎实:检测拦截是必要的,但不充分;结构预防才是根本解。
这个教训直接可以搬过来。你想让 agent 别干蠢事,在 prompt 里写一条更严的规则,本质上是在最靠”自觉”的那层打补丁——它没有缩小 agent 能做的动作范围,只是多加了一句劝告。真正管用的做法,是把最坏的那个动作从可能空间里直接拿掉:用容器,而不是靠对话。
有意思的是,AI 这一侧正在用远比制造业更短的时间重走同一条路——从”写更好的规则”往”改结构约束”迁移。
所以下次你给一个 AI 系统定”红线”时,不妨停一秒问自己:这条红线,是让它装不上去,还是只是在求它别装反?