跑 AI 代理生成的代码,最怕的不是它写错,而是它干坏事:删库、发请求、读不该读的文件。以往的做法是丢进沙箱,但“沙箱”是个模糊词——容器算沙箱,虚拟机也算,到底多严?没人给出可验证的答案。Plimsoll(取自船体吃水线 Plimsoll line,那根标在船壳上的载重线,任何人都能一眼看到船能装多满)把这个模糊词变成了硬指标:每次运行都明确报告隔离强度,并且调用方可以设定最低强度,达不到就拒绝执行,什么都不跑。

核心是四级隔离强度,从弱到强:process(进程级,没有操作系统墙)、container(容器,共享你的内核)、kernel(内核级,比如 gVisor 隔层)、vm(虚拟机,比如 Firecracker 微VM)。每个结果都带着一个 tier 字段,不只是文档里的宣传语。请求可以设置 MinimumIsolation 作为底线,比如要求至少是 vm,如果当前 provider 只能给 container,daemon 直接返回 ErrInsufficientIsolation,代码根本不执行。这比“尽力而为”的沙箱强得多——你能明确知道代码是在哪堵墙后面跑的。

更妙的是,这套机制不仅能“关住”代码,还能“考”它。Plimsoll 内置了一个考试运行器:模拟一个系统(比如经典的 cart-pole——一根杆子铰接在小车上,控制器推动小车左右移动让杆子不倒),把代理人写的控制器程序放进去跑。模拟器编译成 WebAssembly(一种运行在宿主程序里的可移植字节码),场景文件在程序启动前就删除,程序无法偷看题目。每轮运行都会记录完整轨迹,并算出 SHA-256 指纹——同样输入必定得到同样指纹。用同一个控制器跑两次,指纹完全一致;如果把控制器里的某个增益系数符号改错,5.96 秒时杆子倒下,指纹立刻不同。这种可复现性让“考试”有了客观标准:你不能骗自己说“运行结果差不多”。

还有一个很有意思的设计:capability grants。它让代理代码能调用你的 API,但代理代码本身永远拿不到你的凭据、API 地址、甚至没有网络访问权。机制是:沙箱里有一个小客户端,代码调用它,由沙箱外的 broker(代理器)做真正的 HTTP 请求,broker 检查调用者和精确路由,然后附上每一轮运行时临时生成的短命凭据。代码如果要绕过客户端直接发网络请求,根本走不通,因为强制规则的是 broker 而不是客户端。也就是说,即使 AI 代理完全失控,它也没法拿着你的钥匙去开你的门。

Plimsoll 还支持会话(session):一个沙箱容器可以保留多轮调用,解释器(QuickJS 或 Python)里的变量能跨调用存活,适合多步任务的 agent。每个工具调用结果都会说明这一轮是否全新启动、隔离级别、以及运行记录的 SHA-256 哈希——相当于一张收据,客户端能验证请求和响应没被篡改。

它跟主流 agent 框架(Vercel AI SDK、Google ADK、CrewAI、Trigger.dev、Mastra 等)都有现成集成,一行安装就能把 executeCode 工具接进去。部署方式也灵活:本地快速试可以用 wasm provider(在你自己进程里跑 QuickJS,零依赖),生产环境可以用 docker + gVisor(内核级隔离),或者用 E2B、Docker Cloud Sandboxes 这些托管微VM服务。默认 provider 是 Disabled——什么都不跑,避免开发者忘了配置导致代码意外执行。

最让人安心的是它的透明态度:文档里明确说“没有经过第三方安全审计,没有外部用户,作者自己的自检记录也不公开”,但 CI 跑全套检查,包括 race test、govulncheck、docker-suite 等。每个隔离层级依赖什么证据都写在 docs/isolation-tiers.md 里。它甚至提供交互式教程(纯静态页面,无网络无分析),让你在浏览器里回放一次运行,看轨迹和指纹怎么对上的。

这套思路对做 AI 应用的人非常直接:凡是让模型生成的代码去操作外部世界,都可以用 Plimsoll 这类“明确标定隔离强度 + 可验证运行记录”的设计。它把“安全”从一句口号变成了每个调用都带上的一组可校验数据。踩坑提示:如果自己部署,内核级(gVisor)需要手动安装并注册 runtime;想要微VM隔离就得用 E2B 或 Docker Cloud 的付费服务。另外,会话模式里前一轮代码可以影响后一轮,同一凭据跑多个客户的代码时必须每个客户一个独立会话,别省这个隔离。归根结底,安全和性能是一笔账,但至少现在你能看清自己付的是哪一档的钱,而不是赌运气。

阅读原文 → 返回 AI 技术文档

内容与图片版权归原作者所有 · 原文: https://github.com/plimsollmark/plimsoll