工具使用原则

第二部分为智能体的每次调用提供了工作集,使注意力状态以已知成本得以维持,并提供了对照来源核验过的持久证据,但其中构建的一切都不会改变模型之外的世界。第三部分沿着提议转化为实际效果的路径展开:工具调用读取文件、重启服务或发送消息,由此为 H·S·A 中的权限暴露形成闭环。权限既涵盖操作可以读取和发送的内容,也涵盖其可以更改的内容。将客户记录返回到上下文中的只读工具,或具有开放网络路由的沙箱,即使不修改任何内容,也可能泄露数据,因此读取访问同样构成暴露。两个问题决定实际效果是否安全,本部分依次回答这两个问题。第一个问题是调用是否可以发生,以及一旦派发,是否恰好发生一次。第二个问题是,获准调用背后的代码一旦运行,其作用范围能延伸多远。

Principle 8: 类型化操作契约
不变量:工具调用只能以类型化提议的形式到达环境;运行时会依据封闭模式验证该提议,并根据会话明确持有的授权决定是否允许执行。服务器公布某个工具,只能证明该工具存在,绝不意味着当前会话可以调用它。完整论述见 可互操作的工具发现。

推论:每个工具的模式、副作用类别及所需授权都存放在运行时拥有的描述符中,而不由发现该工具的协议持有。语法约束解码消除了解析失败,却不能替代验证或授权。被拒绝的提议会向模型返回结构化诊断信息,而跨越边界返回的观测结果在进入上下文之前,会受到范围限制并被赋予类型。

验证与授权决定调用是否可以派发,但它们并不说明派发超时时运行时应当如何处理。

Principle 9: 重试前先确定执行结果
不变量:对于会修改状态的调用,派发超时并不能说明实际效果是否已经发生。请求可能已经丢失,工具可能在修改过程中崩溃,也可能修改已经提交,只是回复丢失了。完整论述见 幂等动作执行。

推论:运行时只有在使用端点能够据以去重的幂等键时,或在只读探测表明环境仍处于派发前的状态后,才会重试非幂等操作。如果探测发现中间状态,就应停止自主操作,直至完成恢复;任何执行租约的有效期都必须长于其所保护的超时时限。

即使调用已经获得授权且执行结果已经确定,它运行的仍然是模型选择的代码,而且往往是模型编写的代码。

Principle 10: 在模型下层实施约束
不变量:模型将系统指令和不可信数据作为同一个词元序列读取,因此,给模型的任何指令都无法保证其下一项提议是安全的。所以,每个被派发的操作都必须在一个由其所包含代码的下层机制强制实施的隔离边界内运行;边界内的任何内容,除非通过运行时控制的通道,否则都无法访问宿主机、其他租户或网络。完整论述见 各权限级别的影响范围。

推论:隔离边界的强度取决于其运行的代码、任务持有的权限,以及持有权限的时长。任意原生代码都需要在硬件虚拟化保护下使用独立的客户机内核,而纯计算则可以在无法直接发起系统调用的字节码沙箱中运行。在一条轨迹中,隔离边界内的能力只能逐步收窄;凭据保留在边界之外,由出口代理附加;网络出站访问仅能到达明确指定的目的地。隔离环境通过销毁或快照回滚来重置,绝不能通过原地清理来重置;其启动成本通过维护预备就绪的隔离环境池来摊销,而不是通过削弱边界来降低。

工具调用 将前两项原则融入工具调用循环:每个工具都有描述符,每次调用的授权由运行时决定,派发后先确定执行结果再重试,观测结果在进入上下文前先经过整形。智能体沙箱 从授权所能约束的范围之外展开,将第三项原则落实为能力、隔离边界、每条轨迹专属的工作区,以及出站访问与数据流控制,其代价体现为启动延迟和内存开销。这两章每次都只处理一个操作。一条轨迹会在数小时内串联数百个这样的操作,而在这一时间跨度内使其始终受到约束、获得批准并保持可恢复性,正是第四部分的任务。

回到顶部
← 三卷书架