Cloudflare Computer 现可帮助智能体从中断中恢复并等待批准(阅读时长:2 分钟)

TLDR AI 工具

摘要

Cloudflare 发布了 @cloudflare/computer v0.7.0,新增了通过重放从崩溃或部署中断中恢复的功能,并支持智能体在运行过程中暂停于审批关卡,获批后再继续执行外部操作。

Cloudflare Computer 的 v0.7.0 更新允许智能体在部署或崩溃后恢复代码执行,并暂停以等待外部批准。
查看原文
查看缓存全文

缓存时间: 2026/10/28 01:23

# Cloudflare Computer 现在可帮助智能体从中断中恢复并等待批准 来源:https://developers.cloudflare.com/changelog/post/2026-10-26-computer-durable-javascript/ `@cloudflare/computer`↗︎ (https://github.com/cloudflare/computer)为你的智能体提供了一个运行代码的工作区。从 v0\.7\.0 起,这些代码可以在部署或崩溃后恢复运行,也可以暂停以等待外部操作,例如批准工具调用。 #### 恢复中断的运行 在`WorkerJavaScriptBackend`上或单次运行中设置`onInterrupt: "replay"`。 `` import { DurableObject } from "cloudflare:workers"; import { Workspace } from "@cloudflare/computer"; import { WorkerJavaScriptBackend } from "@cloudflare/computer/backends/worker-javascript"; export class MyAgent extends DurableObject { workspace = new Workspace({ storage: this.ctx.storage, backends: [ new WorkerJavaScriptBackend({ loader: this.env.LOADER, onInterrupt: "replay", }), ], }); } `` `` import { DurableObject } from "cloudflare:workers"; import { Workspace } from "@cloudflare/computer"; import { WorkerJavaScriptBackend } from "@cloudflare/computer/backends/worker-javascript"; export class MyAgent extends DurableObject { workspace = new Workspace({ storage: this.ctx.storage, backends: [ new WorkerJavaScriptBackend({ loader: this.env.LOADER, onInterrupt: "replay", }), ], }); } `` 触发恢复时,JavaScript 会从头重新运行,复用已完成调用的已记录结果,而不会再次打印先前记录的输出。如果某个调用的结果在中断前尚未记录,恢复过程可能会重复该调用——即使其操作已经成功。有关重试处理,包括针对无法安全重复执行的操作使用`unsafeToRepeat\(\)`,请参阅不得执行两次的调用 (https://developers.cloudflare.com/agents/tools/filesystem/#calls-that-must-not-run-twice)。恢复会在下次调用`workspace\.runtime`时开始。若要在不等待流量的情况下恢复,请通过 Durable Object 闹钟 (https://developers.cloudflare.com/durable-objects/api/alarms/)调用`workspace\.runtime\.recover\(\)`。 #### 等待批准 运行会在审批关卡处暂停,获批后恢复,被拒绝时则失败 通过自定义模块 (https://developers.cloudflare.com/agents/tools/filesystem/#give-code-access-to-your-own-functions)公开应用程序函数。函数可以调用`ctx\.interrupt\(\)`来暂停运行,直到你的应用程序提供审批决定。例如,要提供一个 GitHub 模块,使智能体能够在获得批准后向议题发表评论,`postComment`的实现可以如下所示: `` new WorkerJavaScriptBackend({ loader: this.env.LOADER, onInterrupt: "replay", modules: { // 智能体的代码通过 `import { postComment } from "ws:github"` 导入此函数。 "ws:github": { postComment: async ([issue, body], ctx) => { const { approved } = await ctx.interrupt({ issue, body, }); if (!approved) throw new Error("评论被拒绝。"); return github.comment(issue, body, { idempotencyKey: ctx.callId }); }, }, }, }); `` `` new WorkerJavaScriptBackend({ loader: this.env.LOADER, onInterrupt: "replay", modules: { // 智能体的代码通过 `import { postComment } from "ws:github"` 导入此函数。 "ws:github": { postComment: async ([issue, body], ctx) => { const { approved } = await ctx.interrupt<{ approved: boolean }>({ issue, body, }); if (!approved) throw new Error("评论被拒绝。"); return github.comment(issue, body, { idempotencyKey: ctx.callId }); }, }, }, }); `` #### 从智能体代码中调用 当智能体的代码调用`postComment\(\)`时,运行会在`ctx\.interrupt\(\)`处暂停,直到你的应用作出响应。智能体的代码可以像调用其他函数一样调用它: `` import { postComment } from "ws:github"; export default async function ({ issue }) { return postComment(issue, "你好,世界"); } `` #### 响应审批请求 等待时间不计入运行的超时时间。等待状态也会在部署后保留。使用`workspace\.runtime\.pending\(\)`获取待处理调用,并使用`respond\(\)`处理它们: `` for (const call of await workspace.runtime.pending()) { await workspace.runtime.respond(call.id, call.callId, { approved: true }); } `` `` for (const call of await workspace.runtime.pending()) { await workspace.runtime.respond(call.id, call.callId, { approved: true }); } `` 所有待处理调用得到处理后,运行便会继续。有关设置、当前限制以及重放的工作原理,请参阅重启后恢复运行 (https://developers.cloudflare.com/agents/tools/filesystem/#resume-runs-after-a-restart)。

相似文章

面向AI代理的临时Cloudflare账户

Simon Willison's Blog

Cloudflare宣布推出临时账户,允许开发者在无需注册的情况下将Workers部署到临时项目中,账户有效期为60分钟,并可选择申请永久保留,主要面向AI代理,但具有广泛用途。

cloudflare/computer

GitHub Trending (daily)

Cloudflare Computer 是一个构建在 Durable Objects 上的预览版虚拟文件系统,具有可插拔的运行时,支持容器、Shell 和 JavaScript,从而在 Cloudflare Workers 上实现有状态的无服务器计算。

Cloudflare 临时账户

Product Hunt

Cloudflare 推出临时账户功能,让代理在完成注册前即可部署,简化了入门流程。