跳转到内容
本站为社区维护的非官方中文翻译,与 Cloudflare, Inc. 无关联。本站不提供账户登录,请勿在任何非官方站点输入您的 Cloudflare 账户信息。官方文档:developers.cloudflare.com

在 sandbox 中运行 Devin

最后更新 查看 MarkdownAgent 设置

Devin ↗ 在其自己的服务中运行 Agent 循环。每个 session 都在一台机器上工作,Devin 在那里运行命令、编辑文件并打开浏览器。Devin Outpost 将该机器迁移到你选择的基础设施。Devin Outpost 模板会让每个 session 在自己的 Linux sandbox 中运行:由一个 Durable Object 为该 session 启动的 Container。

前提条件

你需要:

  • 有权管理 outpost 和服务用户的 Devin Enterprise 组织
  • 可访问 Containers 的 Cloudflare Workers 付费计划账户
  • 手动部署时需要 Node.js 24 ↗ 以及正在运行的 Docker ↗ daemon

获取 Devin 凭据

  1. 打开 Devin 组织的 outpost 设置。在此 URL 中,将两处 my-org 都替换为你的组织 slug:

    https://my-org.devinenterprise.com/org/my-org/settings/enterprise-environment?tab=outposts
  2. 创建或选择一个 outpost,并复制其 outpost ID 以用于 DEVIN_OUTPOST_ID。

  3. 对于 DEVIN_API_TOKEN,请使用具有 Run outpost workers 权限的 Devin 服务用户 token。

关于 outpost 的更多信息,请参阅 Devin Outposts 概览 ↗。

一键部署

Deploy to Cloudflare 按钮会创建 Worker、cron 触发器、Durable Object 命名空间和 container 应用。

Deploy to Cloudflare

部署流程提示时请输入这些值:

变量 值
DEVIN_OUTPOST_ID 你的 Devin Outpost ID
DEVIN_API_TOKEN 具有 Run outpost workers 权限的 Devin 服务用户 token

部署完成后,创建 Devin session 时从 Virtual environment 菜单中选择你的 outpost。

自定义并手动部署

当你需要向 container 镜像添加依赖、工具或环境变量时,请手动部署。

  1. 从 Devin Outpost 模板创建项目:

    npm create cloudflare@latest -- cloudflare-devin-outpost --template=cloudflare/sandbox-sdk/templates/devin
  2. 进入项目目录并登录你的 Cloudflare 账户:

    cd cloudflare-devin-outpost
    npx wrangler login
  3. 在 wrangler.jsonc 中,将空的 DEVIN_OUTPOST_ID 值替换为你的 outpost ID。

    默认的 DEVIN_API_URL 是 https://api.devin.ai/opbeta。仅当你的 Devin 环境使用其他 API URL 时才更改此值。

  4. 将 Devin API token 存储为 Worker secret:

    npx wrangler secret put DEVIN_API_TOKEN

    Wrangler 提示时输入你的服务用户 token。不要将 token 添加到 wrangler.jsonc。

  5. 部署 Worker 和 container:

    npm run deploy

    Wrangler 会构建 container 镜像并部署 Worker、container 应用和 cron 触发器。

  6. 使用 Wrangler 输出中的 Worker URL 检查部署:

    curl https://<YOUR_WORKER>.workers.dev/

    Worker 会返回:

    {
    	"service": "devin-outpost",
    	"status": "ok"
    }

运行 Devin session

在 Devin 中创建 session,并从 Virtual environment 菜单中选择你的 outpost。Worker 默认每 10 秒检查一次新 session,因此 session 的 sandbox 会在你创建后不久启动。

模板如何运行 session

cron 触发器每分钟运行一次 Worker。每次运行期间,Worker 每 10 秒向 Devin 查询你的 outpost 的 session,如果你设置了 DEVIN_RECONCILE_INTERVAL_MS 则使用该毫秒间隔。Worker 会将每个 session 的状态发送给该 session 的 Durable Object:

Devin 状态 模板的行为
pending、running 如果该 session 的 sandbox 未运行,则启动它;如果有 snapshot 则从 snapshot 启动。
suspended 等待 Devin CLI 退出,保存 sandbox 的 snapshot,然后停止它。
terminated 停止 sandbox 并忘记其 snapshot。

Durable Object 只负责启动和停止其 container。在 sandbox 内,Devin CLI(devin worker start)会领取 session 并运行它。

当 Devin 挂起 session 时,Devin CLI 会退出。sandbox 会继续运行,直到 Durable Object 保存其磁盘的 snapshot。session 继续时,sandbox 会从该 snapshot 启动,Devin CLI 会再次领取该 session。snapshot 会保留 session 的文件和已安装软件包。它不会保留正在运行的进程。如果 Devin CLI 在 session 仍在运行时退出,模板会保存 snapshot 并从中启动新的 sandbox。

更多信息请参阅 使用 snapshot 保存并恢复 sandbox。

安全

每个 session 都在自己的 container 中运行,不会与其他 session 共享文件或进程。在 container 内,Devin 以 root 运行,可以访问互联网,并持有 Devin API token。在 session 中运行的代码可以读取该 token。请为不得共享访问权限的每组用户部署单独的 outpost。

更多信息请参阅 Sandbox 安全。

相关资源

这篇文档对您有帮助吗?