
如何在本地创建、重连并清理 Cua 沙箱ephemeral、create 与 connect 怎么选【免费下载链接】cuaScale computer-use 2.0 with open-source drivers, cross-OS fleets, and benchmarks for training, evaluation, and data generation.项目地址: https://gitcode.com/GitHub_Trending/cua/cua如果你在自己的机器上用 Cua 的 Python Sandbox SDK 跑沙箱最常见的困惑是任务跑完的沙箱怎么自动删掉需要跨脚本保留状态的沙箱怎么建进程重启后怎么接回原来那台还在跑的机器Cua 的本地生命周期文档给出了三个入口——Sandbox.ephemeral、Sandbox.create、Sandbox.connect——分别对应用完即焚持久保留重新附着。这篇文章基于 Manage local sandbox lifecycle 和 Sandbox SDK 参考给出一条完整的本地操作路径装好 SDK、选好运行时然后按创建、重连、验证、清理的顺序把三个方法各用一遍。准备条件SDK 安装与本地运行时本地执行统一通过localTrue选择。Cua 文档说明这属于操作模式示例不是完整安装教程运行前需要先在 runtime support 参考 中确认自己的宿主和镜像类型是兼容的。SDK 安装有两个分发Sandbox SDK reference分发导入方式Python 要求说明cua-sandbox0.4.3cua_sandbox3.11,3.14独立 Python Sandbox 包提供Sandbox、Image、Pool、Templatecua0.1.6cua3.12,3.14伞形包re-exportSandbox和Image不含Pool独立安装cua-sandbox的命令pip install cua-sandbox0.4.3本文示例沿用官方 how-to 文档的写法from cua import Sandbox, Image对应cua伞形包如果你只装了cua-sandbox把导入改为from cua_sandbox import Sandbox, Image即可。运行时选择由镜像类型决定Linux 容器走 DockerLinux VMImage.linux()默认走裸机 QEMU需要宿主上有qemu-system-x86_64有/dev/kvm时会自动使用macOS VM 走 LumeWindows VM 走 QEMU 或 Hyper-V。注意文档特别强调这是选择规则不是开机检查——构造函数能返回Image不代表该 guest 能在你的宿主上启动。宿主缺 QEMU 时调用会直接抛错而不是悄悄换后端RuntimeError: Image.linux() is a VM and needs QEMU, which was not found on this host.另一个容易踩的点见 Build a local sandbox image显式传runtimeQEMURuntime()会选中modedocker把 QEMU 包进容器而不是启动固定的 containerDisk要手写 runtime 时用QEMURuntime(modebare-metal)或者干脆不传runtime让默认选择生效。三个入口怎么分工入口行为适用时机Sandbox.ephemeral(...)异步上下文管理器退出代码块时自动销毁沙箱脚本、CI、一次性任务Sandbox.create(...)返回已连接的Sandbox沙箱必须比当前脚本活得久时用持久沙箱跨进程/跨会话复用Sandbox.connect(name)附着到一台已在运行的沙箱从不启动或停止它只管网络连接重连、验证状态、执行清理核心区别在于所有权ephemeral 沙箱归属于一段代码块块结束即清理create出来的持久沙箱会一直存在直到你显式删除所以必须给它起名字别的进程才连得回来connect只管理连接本身断开连接不会让沙箱停掉。第 1 步用 ephemeral 验证环境可用先用最轻量的方式确认镜像 运行时 连接整条链路是通的。这是官方文档给出的完整可运行示例import asyncio from cua import Sandbox, Image async def main(): async with Sandbox.ephemeral(Image.linux(), localTrue) as sb: result await sb.shell.run(echo hello) print(result.stdout) # hello\n # sandbox deleted here asyncio.run(main())# hello\n是文档示例中展示的stdout输出。shell.run返回CommandResult有stdout、stderr、returncode字段success属性在returncode 0时为真——这是判断单条命令是否成功的依据。async with块退出时沙箱被删除本地ephemeral()在退出时调用destroy()。文档也提醒清理可能失败它不是删除的保证所以重要结果要在块内取回不要依赖善后。如果你的宿主没有装 QEMU可以用可选分支走容器路径它不需要 QEMU# local Docker desktop container async with Sandbox.ephemeral( Image.linux(kindcontainer), localTrue, ) as sb: ...第 2 步用 create 建立带名字的持久沙箱当沙箱需要活过当前脚本例如装了依赖的开发环境改用Sandbox.create并用name参数固定名字sb await Sandbox.create(Image.linux(), namemy-dev-sandbox, localTrue) await sb.shell.run(apt-get install -y vim) await sb.disconnect() # sandbox keeps runningcreate()返回已连接的Sandbox实例。await sb.disconnect()只丢弃连接沙箱继续在后台运行——这正是后面connect能按名字找回它的前提。create()的完整签名在 SDK 参考 中给出本地场景常用参数是image、name、local、runtime以及cpu、memory_mb、disk_gb仅在选择的后端接受时生效。第 3 步用 connect 重连并确认状态还在新开一个脚本或新进程按名字连回同一台沙箱async with Sandbox.connect(my-dev-sandbox, localTrue) as sb: result await sb.shell.run(vim --version) print(result.stdout)第 2 步在沙箱里apt-get install过 vim所以这里能打印出 vim 的版本输出就是连回的是同一台、状态已保留的直接验证。Sandbox.connect同时支持await和async with上下文管理器退出时自动调用disconnect()沙箱仍然保持运行async with Sandbox.connect(my-sandbox, localTrue) as sb: await sb.shell.run(echo reconnected) # connection dropped, sandbox keeps running需要强调的是文档的原话Sandbox.connectnever starts or stops the sandbox它只管理网络连接。如果沙箱根本没在运行connect不会帮你把它拉起来。第 4 步用 list 核对正在运行的沙箱任何阶段都可以用Sandbox.list(localTrue)列出当前本地沙箱sandboxes await Sandbox.list(localTrue) for info in sandboxes: print(info.name, info.os_type, info.status)返回值是SandboxInfo列表必填字符串字段为name、status、source另含可选字段os_type、host、vnc_url、api_url、created_at。建议把它作为整个流程的检查点create之后my-dev-sandbox应出现在列表里destroy之后应消失。清理disconnect、destroy 与 delete 的区别三者常被混为一谈官方文档的对照表是方法效果时机await sb.disconnect()沙箱保持运行之后还要重连时await sb.destroy()永久销毁用完了await Sandbox.delete(name)永久销毁按名字无需连接类方法不连接时清理通过已连接的实例删除async with Sandbox.connect(my-dev-sandbox, localTrue) as sb: await sb.destroy()不需要先连接时直接按名字删await Sandbox.delete(my-dev-sandbox)删除会丢弃沙箱的全部状态所以要在删除前把需要的结果取回sb.files提供download()、read_text()等把文件搬出来的方法。限制与边界本文所有模式都针对localTrue的本地执行。Fleet 托管路径的 claim 释放、池容量删除是独立操作不能套用这里的本地生命周期结论。在cua-sandbox0.4.3 中Sandbox.snapshot()对本地沙箱未实现Fleet 也拒绝 snapshot 派生的镜像想复用配置状态只能靠持久沙箱本身或提前把软件装进镜像。镜像的构建期定制apt_install()、pip_install()、env()、run()、copy()等 builder 方法只在本地执行时生效要加软件请编辑Image的层而不是在沙箱里临时装。运行时选择QEMU / Docker / Lume / Hyper-V不校验 guest 是否真的能在你的宿主上启动宿主侧的 CPU、内存、磁盘和虚拟化支持由你自己确认。下一步如果要给本地沙箱预装软件、拷文件或暴露端口参考 Build a local sandbox image所有权模型的完整解释见 Sandbox lifecycle。【免费下载链接】cuaScale computer-use 2.0 with open-source drivers, cross-OS fleets, and benchmarks for training, evaluation, and data generation.项目地址: https://gitcode.com/GitHub_Trending/cua/cua创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考