Bohea

让碰钱的 AI Agent 受治理:agent 只提议,永不执行

2026年7月15日

整套设计靠一条铁律撑起来:agent 可以提议,但永远不能对任何有物质后果的东西动手。每一个写操作——一笔付款、一条记账、一次账户变更——都离开模型可及范围,过一个模型无法编写、也无法绕过的授权服务,再过一个有对应角色的人。治理是当架构来建,不是靠一段措辞讲究的提示词。

Agent 治理MCP最小权限Stripe / Escrow

为什么"把提示词写仔细点"注定失败

如果模型手里握着一个能动钱的工具,那你钱的安全就取决于模型在每一次调用上的判断——包括那些被检索到的邮件、被投毒的文档、或一句有歧义的指令带偏的调用。提示词是一种"请你表现良好"的请求,它不是一道强制边界。一旦某个有物质后果的动作能从模型的工具面里够得着,你就把模型变成了最后一道防线——而模型恰恰是你没法完全预测的那部分。

所以解法不是更好的提示词,而是让危险动作从模型所在的地方根本够不着

那一条铁律,以及每条保证怎么被强制

agent 从最小权限、只读的数据源读取,起草一个"提议的动作"。它能吐出的只有这个提议——绝不是一次直接写入。所有要紧的事,都强制在一个 agent 没有任何工具能触达的层里:

一个实例:钱到底从一条托管支付流的哪里溜走

同一种直觉——假设那条危险路径一定会被走到,并把它设计成可控——正是"守得住的托管支付流"和"悄悄漏钱的托管支付流"之间的分界。两方谈判、达成一致、卡上放一笔预授权。把它端到端画出来,以下是钱真正溜走的四个地方,以及每个的设计对策:

贯穿其中的那条线

无论是一个记账 agent 还是一条支付流,纪律都一样:把不可逆的动作,放在你没法完全信任的那部分够不着的地方;让每个有后果的数字都带着它的来源;只给每个集成它真正需要的那点权限;并假设最丑的那条路一定会被走到,于是提前为它做设计。这和我在工业侧用的是同一条规则——安全关键的限值在控制器侧重新核验,绝不从上层拿来就信。能被绕过的治理,不叫治理。

这就是我设计这类系统的方式——这套模式来自多年后端工作,以及构建那些"一次写错就有真实代价"的生产级 LLM 流水线与 MCP 工具调用系统的经历。

这套论证是可运行的。我把它做成了公开仓库:一个 agent 无法调用的授权服务、绑定内容且一次性的审批、职责分离、必须带溯源的金额、只可追加的哈希链审计日志,以及一个复现上面全部四种托管支付故障模式的 mock 提供方。然后十二次攻击试图让钱动起来——提示注入、自我审批、审批后偷换金额、重放的 webhook,以及一个几千次就被暴力破解的"匿名"手机号哈希。十二次全部失败,约一秒跑完、零依赖——harness 每次推送都在 CI 里跑。  代码 →

如果你造的机器需要一套界面、一个设备连接,或者数据必须落到别处去——告诉我它现在正让你付出什么代价。你会得到一个诚实的判断:能不能解;通常还会收到一个能跑的东西。从这里开始 →

← 全部笔记