内容提要
Run SDK 是一个用于执行不受信任的 JavaScript 和 TypeScript 的包,它通过 QuickJS 在 worker 线程中运行代码,不直接访问应用或系统。应用通过 hostFunctions 暴露窄接口,并支持中断执行以进行人工审批或认证,恢复时不会重复已完成的工作。它支持限制超时和内存,适用于 AI 代理工具执行,但需要操作系统级隔离时建议使用 Vercel Sandbox。
延伸解读
沙箱边界与宿主函数的设计权衡
Run SDK 通过 QuickJS 在 worker 线程中执行代码,切断了与 Node.js 和网络的直接连接,应用通过 hostFunctions 暴露窄接口。这种设计将权限控制集中在宿主函数中,但要求开发者谨慎设计接口粒度。文章建议将 hostFunctions 映射为具体产品操作(如 orders.refund),而非通用请求函数,以便在宿主层进行授权检查。若暴露过于宽泛的接口,沙箱的隔离意义会大打折扣。
中断恢复机制的实际价值
Run SDK 支持在宿主函数中中断执行,用于人工审批或认证流程。中断后返回带签名的令牌,应用可保存并在决策后恢复运行。恢复时重放程序,但已完成的宿主函数调用会使用记录结果,避免重复工作。这一机制特别适合需要等待用户操作或外部认证的场景,且等待期间 worker 无需保持存活,降低了资源占用。
适用场景与边界限制
Run SDK 定位为应用内的 JavaScript 计算沙箱,适合 AI 代理工具执行、代码解释器或用户自定义转换等场景。但它不提供操作系统级隔离,无法安装包或运行独立进程。对于需要这些能力的负载,文章明确建议使用 Vercel Sandbox。开发者需根据任务需求选择合适的安全边界,避免在错误场景下使用。
Q&A
Run SDK 是什么?它如何保证代码执行的安全性?
Run SDK 是一个用于执行不受信任的 JavaScript 和 TypeScript 的包。它通过 QuickJS 在 worker 线程中运行代码,代码没有直接访问 Node.js 或网络的途径,应用通过 hostFunctions 暴露窄接口,从而保证安全。
Run SDK 如何支持人工审批或认证?
当生成的代码到达敏感操作时,host function 可以调用 getHostFunctionContext() 并触发 interrupt,暂停执行。应用保存包含签名令牌的审批请求,待决策后使用该令牌恢复运行。恢复时会重放程序,但已完成的 host function 调用会使用记录的结果,不会重复执行。
Run SDK 如何限制代码执行的时间和内存?
可以使用 createRunner() 设置共享限制,例如 timeoutMs 和 memoryLimitBytes,也可以为每次运行单独设置。默认限制覆盖 QuickJS 堆和跨主机边界传递的值,应用可以根据需要调整。
Run SDK 与 Vercel Sandbox 有什么区别?
Run SDK 适用于应用内的 JavaScript 计算,提供轻量级沙箱。而需要操作系统级隔离、安装包或进程级隔离的工作负载应使用 Vercel Sandbox。
Run SDK 在 AI SDK 中扮演什么角色?
Run SDK 是 AI SDK 中代码模式工具执行的内部模块。它将 AI SDK 的工具映射为 host functions,并负责沙箱化执行,使代理能够运行生成的 TypeScript 程序来协调工具和处理结果。
Run SDK 的 host functions 有什么设计建议?
Host functions 最好映射到产品中的具体操作,例如 orders.refund(id),这样应用可以明确检查用户和订单。避免使用通用的请求函数,因为那样会使权限管理变得困难。
Run SDK 支持哪些运行时环境?
Run SDK 支持 Node.js 22.13+ 和 Bun。