04 - 开源产品怎么做
前置:02 篇的三条路线。
本篇回答:两个生产级开源 Agent 产品,各自把沙箱边界划在哪里、为什么划在那里。
本篇会用到的词:
| 词 | 意思 |
|---|---|
| workspace | OpenHands 的抽象:把「Agent 在哪里干活」定义成一个接口,底下可以换成本机、容器、远端服务等不同实现 |
| apptainer | 一种免 root 的容器方案,普通用户不需要管理员权限就能跑,在高性能计算集群里用得多 |
| OCI | Open Container Initiative,容器镜像与运行时的标准。符合它的运行时可以互相替换 |
| 沙箱内代理服务 | 跑在沙箱里、代表宿主执行操作的那个进程(E2B 叫 envd,OpenHands 叫 sandbox-agent-server) |
| 协议边界 | 宿主与沙箱之间只通过一组明确定义的消息通信,宿主不直接读写沙箱内部。边界越窄,缺口越少 |
一、OpenHands:把 workspace 做成可替换的抽象
OpenHands/software-agent-sdk(★1,008,MIT)的做法是不选一种沙箱,而是把"Agent 在哪里干活"抽象成 workspace,提供五种实现。
对应的源码位置与体量:
| 后端 | 路径 | 大小 |
|---|---|---|
local | openhands-sdk/openhands/sdk/workspace/local.py | 7 KB |
docker | openhands-workspace/openhands/workspace/docker/workspace.py | 15 KB |
apptainer | openhands-workspace/openhands/workspace/apptainer/workspace.py | 15.5 KB |
remote_api | openhands-workspace/openhands/workspace/remote_api/workspace.py | 16 KB |
cloud | openhands-workspace/openhands/workspace/cloud/workspace.py | 37 KB |
| 远端基类 | openhands-sdk/openhands/sdk/workspace/remote/base.py | 36 KB |
1.1 apptainer 的存在说明了什么
五个后端里最不常见的是 apptainer。它是 HPC(高性能计算)领域的容器运行时,最大特点是不需要 root 权限就能运行容器。
这个后端的存在意味着 OpenHands 认真对待一类用户: