一个编码Agent安装了依赖、修到一半、等待人类回复,不应该为了省钱关掉计算后就从零开始。Cloudflare的新答案是文件系统快照:让Linux环境睡眠,保留可恢复的工作区。但工程上最重要的一句补充是:恢复出相同文件,并不等于恢复出可信上下文。
官方发布了什么
Cloudflare在2026年9月30日宣布重构Containers,针对Agent按任务创建、暂停和恢复沙箱的模式,提供durable_object调度策略、运行时镜像与实例规格选择,以及公共预览的文件系统快照。官方称容器启动超过6倍加速;ComputeSDK的独立基准中,中位数从4秒多降到648毫秒。
这里要分清证据层级:6倍和数十万容器突发测试是厂商披露,本文未复现。直接可用的API事实是,开发者可用ctx.container.snapshotContainer()创建不可变快照,保存句柄,再在start()中传入它恢复;快照仅支持新的durable_object策略。
官方同时给出明确迁移时间表:新功能仅供原生ctx.container路径使用,旧Container类和旧Sandbox类维护至2026年12月31日;已有部署届时仍会运行,但不再获得新功能。因此团队不应近期只做性能压测,还要盘点哪些代码依赖旧基类,以及迁移后谁负责容器的睡眠、唤醒、出站网络和快照保留策略。
技术原理:计算与控制面分家
新架构把Container视为Durable Object的计算扩展。Container负责Shell、编译器和开发服务器;Durable Object保留稳定身份、会话状态、凭据授权、网络策略和生命周期。容器暂停时,控制面仍能接收消息;需要执行时再唤醒Linux环境。
这种拆分还适合评测:从同一基础快照分叉N个尝试,分别运行,由外部协调器评分,再保存最佳结果。它降低重复git clone和安装依赖的成本,但也会把恶意依赖、污染缓存或遗留凭据一起复制。
快照句柄应被当作能力型凭证,而不是普通文件名。保存它的Durable Object状态需要与用户、任务和环境标识绑定,不能让其他租户提供一个句柄就恢复。恢复后还要重建短期权限,不应把旧环境中的身份状态默认为仍有效。这正是控制面与文件系统分离的安全价值。

最小实践:快照与控制状态分开
依赖安装:npm install @cloudflare/workers-types,并在Cloudflare Containers项目中使用支持durable_object调度的当前SDK。核心逻辑如下:
import { DurableObject } from "cloudflare:workers";
export class AgentWorkspace extends DurableObject {
async save() {
// 快照前应先删除临时令牌和未加密机密
const snapshot = await this.ctx.container.snapshotContainer({});
await this.ctx.storage.put("snapshot", snapshot);
await this.ctx.storage.put("schemaVersion", 3);
}
async restore() {
const snapshot = await this.ctx.storage.get<ContainerSnapshot>("snapshot");
const version = await this.ctx.storage.get<number>("schemaVersion");
if (!snapshot || version !== 3) {
throw new Error("snapshot missing or incompatible");
}
this.ctx.container.start({
containerSnapshot: snapshot,
enableInternet: false,
});
}
}
snapshot只保存文件系统,schemaVersion则在控制面指明恢复契约;enableInternet: false用失败关闭方式恢复,待审计通过再开放必要网络。示例未在本次任务中实际运行:当前环境没有Cloudflare账号、Wrangler配置和Containers权限,因此不虚构部署结果。
在真实项目中,schemaVersion还不够。Manifest至少应包含镜像不可变摘要、依赖锁文件哈希、源码提交、创建时间、任务所有者和快照前清理版本。恢复器先验证Manifest,再启动禁网容器,运行一组本地健康检查,最后才请求短期凭据。任一步不匹配都应重建干净环境,而不是边运行边修补。
常见失败与边界
第一,把快照当备份。快照依赖平台生命周期,核心代码、产物和审计日志仍要进正式存储。第二,把快照当密钥保险箱。恢复环境不应继承已过期或跨用户凭据,最好由控制面在启动后按需注入短期令牌。第三,忽略副作用;文件状态能回滚,已发送的邮件、已提交的PR和外部数据库写入不会自动撤销。第四,默认所有快照可互换;镜像摘要、CPU架构、依赖锁和任务所有者都应进Manifest。
第五,只测恢复成功,不测恢复失败。团队应主动演练句柄丢失、快照过期、镜像不兼容、Manifest被篡改和健康检查超时。失败时应转入干净重建或人工复核,而不是不断重试同一个可疑快照。
我的判断与立即行动
沙箱快照会让长任务Agent的交互体验明显变好,但“持久化”会把临时错误变成长期风险。我更看好“不可变快照+外部Manifest+短期凭据”三件套,而不是把整个会话责任都塞进文件系统。团队可以先做一个检查表:快照前清密钥,创建时签版本,恢复时验哈希,启动后先禁网,副作用用幂等键单独去重。
第一个试点建议选择可丢弃、可重建的开发任务,对比每次从零安装与快照恢复的P50/P95时间、存储成本和失败率。不要先拿生产密钥、客户数据或唯一工作区做试验。
只有快速恢复与可验证恢复同时成立,这项优化才是生产能力。
你最想用Agent沙箱快照优化依赖安装、长任务续跑,还是并行评测?
关注「蜗牛聊AI」,一起看懂技术变化背后的真正机会。
本文首发于 java4u.cn,转载请注明出处。

