在本地开发和运行 AI 代理时,一个核心挑战是如何安全执行 AI 生成的代码或工具调用。这些代码可能包含未知逻辑、潜在恶意行为或资源滥用,直接在主机环境中运行风险极高。传统的容器如 Docker 虽提供隔离,但内核共享仍存在逃逸漏洞,尤其是面对复杂 AI 工具链。ERA 工具通过 microVM 技术,提供类似容器的开发体验(devX),却拥有更强的隔离性和 200ms 级启动速度,完美契合本地 AI 代理沙箱需求。
为什么选择 microVM 而非传统容器?
观点:microVM 如 krunvm 采用轻量虚拟化,在用户态启动完整 guest kernel,仅共享硬件虚拟化层,避免了容器内核逃逸风险。对于 AI 代理,工具执行(如 shell 命令、网络请求)常涉及系统调用,microVM 确保 guest 内行为不波及主机。
证据:ERA 基于 krunvm 和 buildah,krunvm 使用 Firecracker-like 架构,启动时间仅 200ms,支持 OCI 镜像。GitHub 仓库描述:“Run untrusted or AI-generated code locally inside microVMs that behave like containers for great devX, 200ms launch time, and better security。”
可落地参数:
- 资源配额:创建 VM 时指定
--cpu 1 --mem 256(单位 MB),限制单代理 CPU 单核、内存 256MB,避免 OOM 或 CPU 垄断。
- 网络策略:
--network allow_all 允许出站(适合工具如 API 调用),或自定义 deny_all 仅内网,防范数据外泄。
- 语言支持:
--language python / javascript / go / ruby,自动拉取预置镜像。
安装与环境配置清单
ERA 安装简洁,但 macOS/Linux 有平台差异。优先 Homebrew,确保依赖就位。
-
安装 CLI:
brew tap binsquare/era-agent-cli
brew install binsquare/era-agent-cli/era-agent
brew install krunvm buildah
-
macOS 特定设置(关键,krunvm 需 case-sensitive APFS 卷):
$(brew --prefix era-agent)/libexec/setup/setup.sh
- 自动创建
/Volumes/krunvm 卷(diskutil apfs addVolume)。
- 导出环境:
export AGENT_STATE_DIR=/Volumes/krunvm/state、KRUNVM_DATA_DIR=/Volumes/krunvm、CONTAINERS_STORAGE_CONF=/Volumes/krunvm/containers-storage.conf。
- 验证:
agent vm exec --help 无误。
-
Linux:包管理器安装 krunvm/buildah,设 AGENT_STATE_DIR 为可写目录,非 root 运行。
配置调优:
AGENT_LOG_LEVEL=debug 调试日志。
AGENT_ENABLE_GUEST_VOLUMES=1 启用 /in /out /persist 挂载,持久化代理状态。
核心使用:沙箱化 AI 代理工具执行
观点:ERA 支持长运行 VM(持久代理会话)和临时执行(单次工具调用),stdout/stderr 自动捕获,返回 JSON 格式,便于代理解析。
示例1:临时执行 Python 工具(ephemeral,零状态):
agent vm temp --language python --cpu 1 --mem 128 --cmd "python -c 'import requests; print(requests.get(\"https://api.example.com\").text[:100])'"
输出捕获:{"stdout": "...", "stderr": "", "exit_code": 0}。资源限 128MB,防内存炸弹。
示例2:创建持久 VM 执行多步代理:
VM_ID=$(agent vm create --language javascript --cpu 2 --mem 512 --network allow_all)
agent vm exec --vm $VM_ID --cmd "node -e 'console.log(\"Agent step 1\"); /* AI code */'"
agent vm exec --vm $VM_ID --cmd "node tool.js" # 捕获工具输出
- 隔离:guest 内工具(如 fs.writeFile)不触主机。
- 清理:
agent vm stop --all; agent vm clean --all,释放资源。
安全清单:
- 防逃逸:默认无 host 访问,network policy 控制出站。
- 配额监控:预设
--mem 256-1024,结合 agent vm list 检查使用。
- 超时:CLI 无内置,代理层加 timeout wrapper,如 Python
subprocess 5s 限。
- 回滚:异常时
agent vm clean,主机无状态污染。
监控与生产参数建议
观点:本地沙箱需运维化,监控 VM 生命周期,避免 zombie 进程。
参数表:
| 参数 |
建议值 |
目的 |
| --cpu |
1-2 |
代理计算密集 |
| --mem |
256-1024 MB |
平衡性能/安全 |
| --network |
deny_outbound |
仅信任 API |
| AGENT_STATE_DIR |
/opt/era-state |
独立分区 |
| 清理周期 |
每小时 cron agent vm clean --idle>300s |
闲置 5min 删 |
集成 AI 框架:如 LangChain,替换 executor 为 ERA exec,捕获输出 feed 回 LLM。
ERA 的云层(Cloudflare Worker)可选,但本地优先零依赖。
资料来源:基于 GitHub binsquare/era 官方文档,ERA 使用 krunvm 实现微型 VM 隔离,支持快速启动 AI 代码沙箱。era-agent README 详述配置。