一个智能体只需要几个部分:
这差不多就是整个系统。安全来自把这些部分分开。
大语言模型负责思考。沙箱运行时给它一个读文件、写代码和组合步骤的地方。但沙箱里没有现成的凭证,也没有开放的网络。模型即使糊涂了,它的糊涂也留在盒子里。
盒子里的智能体很安全,却没有多大用。它需要接触外部世界。这就是服务的作用。服务可以是 Gmail、日历,也可以是一个订球场的网站。用户像附加文件一样,把某个服务附加到任务上。在那之前,对智能体来说这个服务并不存在。
每个服务都有一些动作。它们是智能体可以使用的动词:search_email、create_event、book_court。动作是接收结构化参数的固定代码。模型可以请求一个动作,却不能凭空发明新的动作。运行时会检查服务是否已经附加、动作是否存在、参数是否合法。对于发送、花钱、删除或发布之类的动作,它还可以先询问用户。
服务运行时位于智能体之外,并由它控制凭证。凭证永远不会进入沙箱。因此,能调用 search_email 的智能体,并不会因此得到 Gmail cookie 或任意访问网络的权力。它只得到一个动词。
每个服务也有技能。技能只是一段教模型如何使用服务的文字:有哪些动作、每个字段是什么意思,以及怎样把动作组合起来。这个区别很重要。技能改变模型知道什么。动作改变系统能做什么。技能本身没有任何权力。
假设你让智能体订一个网球场。你先附加球场服务。它的技能告诉模型先搜索,再预订。它的动作让模型查询时间,并请求预订。登录状态由服务保管。如果预订需要确认,可信代码会从待执行的动作里显示球场、时间和价格。最后执行的,正是你确认的那个动作。
模型仍然可能犯错。没有一种架构能彻底解决这个问题。但现在,错误有了一道清楚的边界。模型不能读取 cookie,不能调用未附加的服务,也不能把技能里的文字变成新的权力。
让模型自己守住这道边界,是个错误。提示只是建议。沙箱和一张很短的动作清单才是事实。
这就是确定性的智能体安全:让模型决定请求什么,让普通代码决定什么是可能的。
参考资料
- Ziyuan Zhu, “通往自由意志的技术” (2026) - 关于围绕用户构建本地智能体的更大论证。
- Marc Brooker, “Agent Safety is a Box” (2026) - 关于把确定性的控制放在智能体外面。