OpenAI Agents SDK 沙箱执行如何做故障恢复:快照、重hydration 与凭据隔离
来源:17golang原创
时间:2026-08-27 02:11:50 439浏览 收藏
一个能读文件、跑命令、改代码的 AI 智能体,最容易在“任务已经跑了一半”时暴露工程短板:沙箱容器失效了,模型知道自己做到哪一步,却找不到原来的工作目录;如果把云端凭据直接塞进执行环境,恢复能力又可能变成新的泄露面。OpenAI Agents SDK 的新沙箱能力把这两个问题拆开处理:用 Manifest 描述工作区,用外置状态和快照让任务在新容器里接着跑。
要点速览
- Manifest 解决“输入文件放在哪里、产物写到哪里”的可重复问题。
- 快照恢复保存的是任务状态,不等于把失效容器原样复活。
- 模型生成代码和凭据应分处不同边界,不能把密钥当作普通工作区文件。
- 上线前要用恢复耗时、断点成功率和敏感信息暴露检查来验收。
从一次沙箱中断看出智能体平台的缺口
假设一个资料分析智能体已经读完 data/metrics.md,正在生成比较结果。此时执行容器过期,重新拉起的容器当然可以继续接受模型请求,但它未必拥有原来的临时文件、工具上下文和中间结果。只做“失败后重试”会让任务从头读取、重新计算,甚至重复写入外部系统。
这也是 Agents SDK 把 harness(编排外壳)和 compute(实际执行环境)分开的价值:编排层记录任务进度,沙箱只负责在受控范围内读写文件和运行工具。容器消失不必然等于任务消失。
Manifest 先固定工作区,再谈可恢复
恢复的第一步不是复制整个容器,而是让新容器得到同样清晰的文件边界。官方示例用 Manifest 把本地目录挂载到 data,智能体的指令也明确要求“只使用 data/ 下的文件”。这类声明比在提示词里写一长串绝对路径更稳定。
from agents.sandbox import Manifest, SandboxAgent
from agents.sandbox.entries import LocalDir
agent = SandboxAgent(
name="Dataroom Analyst",
instructions="Answer using only files in data/. Cite source filenames.",
default_manifest=Manifest(entries={
"data": LocalDir(src=dataroom),
}),
)
实际项目还应把输入目录、输出目录和临时目录分开记录。这样重建环境时,输入可以只读挂载,输出可以按任务 ID 重新绑定,临时文件则明确允许丢失。

快照恢复保存什么,不能保存什么
快照和 rehydration 的正确理解是“把任务状态带到新的执行环境”,不是把旧容器做成永不消失的虚拟机。可恢复内容通常包括已完成的步骤、工具调用结果、输出文件索引和下一步所需的上下文;操作系统进程、临时端口和未提交的内存状态不应被当作可靠资产。
把每个阶段变成可验收的检查点
一个长任务可以在“读取证据”“计算结果”“写出报告”之间设置检查点。每个检查点写入任务 ID、输入摘要、输出路径和状态,例如 analysis-042 / evidence-read / completed。恢复时先核对最后一个 completed 检查点,再决定是继续还是重做该阶段。
这里别急着把所有中间文件都持久化。更稳妥的做法是保存可重算的引用和不可重算的外部结果;如果某一步会产生扣费、发信或写库动作,还需要业务侧幂等键,避免恢复后重复执行。
凭据隔离决定了恢复边界是否安全
沙箱里的代码可能是模型临时生成的,输入文件也可能含有诱导模型泄露信息的内容。OpenAI 的说明把 prompt injection 和 exfiltration 直接列为设计前提,因此凭据不应该作为普通文件挂载进模型可读的 data/ 目录,更不应写进日志和快照。
可操作的边界是:模型只拿到完成任务所需的最小工具接口,真正的密钥由编排层或受控代理在调用时注入;快照只保存引用、权限范围和调用结果摘要,不保存原始令牌。恢复后重新授予短时权限,并重新检查任务所属用户和沙箱租约。

哪些团队适合先采用,哪些场景要谨慎
需要跨多步处理文件、命令和工具的研发助手、资料分析器、代码迁移助手,最能从“统一工作区 + 可恢复执行”中受益。它们的共同点是任务较长,且中间结果可以被明确记录。
如果任务包含不可逆操作、强实时性交易或高度敏感的原始数据,沙箱能力不能替代业务授权、审计和人工确认。先从只读资料分析或生成补丁开始,确认恢复链路稳定后,再逐步开放写入和外部工具。
落地时用三条指标判断恢复是否真的可用
- 断点成功率:主动终止或模拟容器过期后,任务能否从最近检查点继续并得到相同的关键结果。
- 恢复耗时:从失效事件到新沙箱重新可用的时间,是否低于业务可接受的任务窗口。
- 暴露面检查:快照、日志、输出目录和错误信息中是否出现令牌、个人数据或超出授权范围的文件。
验收时不要只测“容器重启后能否返回 200”。应该故意让任务停在工具调用前、工具调用后和输出写入后三个位置,分别检查是否重复执行、是否丢文件、是否越权恢复。
相关问题
Agents SDK 的沙箱恢复是不是等同于虚拟机快照?
不是。它更接近把智能体的任务状态和工作区描述带到新执行环境,进程、临时端口等易失状态仍应按失败处理。
Manifest 为什么比提示词里的路径说明更重要?
Manifest 是执行环境的结构化边界,能在本地目录和不同沙箱提供商之间保持一致;提示词只能告诉模型规则,不能自动创建目录或控制挂载权限。
恢复时能不能把 API Key 一起写进快照?
不建议。快照只保留权限引用和必要的调用摘要,恢复后由外层权限服务重新发放短时凭据。
把“能运行”推进到“能恢复、可控权”
Agents SDK 沙箱能力真正改变的不是某个 API 名称,而是智能体的运行单位:工作区有明确边界,任务状态可以外置,执行环境可以替换,凭据也能留在模型之外。先用只读任务验证检查点和恢复指标,再逐步开放写入权限,通常比一开始追求全自动更容易把风险关在可见范围内。
-
284 收藏
-
450 收藏
-
387 收藏
-
328 收藏
-
426 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习