
HyperAgents Docker 沙箱安全机制深度解析如何用 git容器隔离执行不可信模型代码【免费下载链接】HyperAgentsSelf-referential self-improving agents that can optimize for any computable task项目地址: https://gitcode.com/gh_mirrors/hy/HyperAgentsHyperAgents 是一个让 AI 智能体自我进化、优化任意可计算任务的开源项目而它最核心的安全设计就是Docker 沙箱所有由模型生成的代码都不直接运行在你的宿主机上而是被关进一个即用即毁的容器里配合 git 检查点实现跑完即还原。本文将带你完整看懂这套git 容器双重隔离机制。为什么必须用 Docker 沙箱HyperAgents 的工作方式是元智能体meta agent自动修改代码任务智能体task agent再被评估执行。也就是说项目里持续运行的是不可信的、由模型生成的代码。项目官方在 README.md 的 Safety Consideration 一节中也明确警告本仓库涉及执行不可信的、模型生成的代码……此类代码可能因模型能力或对齐的局限而表现出破坏性行为。那么问题来了如何让一个可能写出危险代码的 AI 在你的机器上安全地跑起来HyperAgents 的答案是三层防线全部围绕 utils/docker_utils.py 和 utils/git_utils.py 两个核心模块构建️第一层容器隔离—— 代码只能活在容器里 第二层git 检查点—— 容器内的修改可被瞬间还原 ⏱️第三层超时 强制清理—— 任何失控进程都会被终止并回收下图展示了智能体在沙箱中执行的一类真实任务NetHack 游戏环境NLE的像素渲染。这类需要调用图形库、编译依赖的重型环境正是沙箱要隔离的对象第一层Docker 容器隔离机制镜像是怎么来的项目根目录的 Dockerfile 定义了沙箱镜像基于nvidia/cuda:13.0.0-devel-ubuntu22.04内置 Python 3.12、CUDA 运行时和全部依赖requirements.txt在构建时一次性装好。镜像只需构建一次之后每一代智能体、每一个任务实例都复用同一张镜像——宿主机上的环境永远不会被污染。容器是怎么拉起的关键函数是 utils/docker_utils.py 中的build_container()它的做法有几个安全细节镜像幂等如果同名镜像已存在则跳过构建保证沙箱基线稳定受控挂载宿主机仓库目录以只读意图挂载到容器内的/{REPO_NAME}宿主机的其他文件对容器完全不可见空命令保活容器启动命令是tail -f /dev/null——容器本身什么都不干一切执行都由外部通过exec_run逐条下发相当于每次执行都经过看门人。数据进出只走打包通道宿主与容器之间不共享裸文件句柄所有数据交换都经过 tar 打包传入utils/docker_utils.py 的copy_to_container()把文件打成内存 tar 流再put_archive进容器传出copy_from_container()用get_archive取回并解包到宿主机指定目录。这意味着容器里生成的垃圾比如失败的编译产物、半截的日志不会直接落进你的工作目录只有被显式取回的文件才算数。第二层git 检查点让破坏可撤销这是 HyperAgents 安全设计里最精巧的一环模型代码的每次修改本质上只是一份 diff而 diff 永远只发生在容器内部。修改如何进入容器流程在 utils/gl_utils.py 的apply_diffs_container()中把上一代智能体产出的补丁文件拷入容器在容器内执行patch -p1 parent_patch.txt应用修改git add --all 一次占位提交拿到 commit hash 作为本代基线。宿主机的仓库始终停留在干净的根提交上危险代码从未在宿主机落地。跑完之后如何还原generate_loop.py 中每个阶段的finally块都保证执行同两个命令git reset --hard root_commit—— 丢弃所有已跟踪文件的改动git clean -fd—— 清掉所有未跟踪的新文件。也就是说无论模型代码在容器里写了什么、删了什么、编译出了什么10 秒内一切归零。配套的底层工具如reset_to_commit()、commit_repo()、diff_versus_commit()都可以在 utils/git_utils.py 中逐一对照阅读。第三层超时保护与强制清理隔离不是万能的超时才是。HyperAgents 给容器内的每条命令都套上了timeout壳执行内容超时上限所在位置元智能体改代码6 小时generate_loop.py智能体评测5 小时generate_loop.pypolyglot 任务智能体10 分钟domains/polyglot/harness.pypolyglot 测试脚本2 分钟domains/polyglot/harness.py任何死循环、失控进程都会被timeout直接杀死。而 utils/docker_utils.py 中的cleanup_container()保证容器必然被stopremove(forceTrue)domains/polyglot/docker_utils.py 还进一步实现了兜底逻辑——如果 Docker API 停止失败就查出 PID 直接SIGKILL。配合每次运行都带时间戳的容器名如hyperagents-gl-container-run_id彻底避免残留容器互相串扰。更严格的玩法每任务一个独立容器在多语言编程域polyglot中安全等级被推到了最高。参考 domains/polyglot/harness.py 与 domains/polyglot/docker_build.py每个评测实例都基于 SWE-bench 风格构建base → env → instance三级镜像缓存创建独立的单任务容器且按语言配置决定以nonroot用户运行、用nano_cpus限制 CPU模型补丁通过patch -p1打进容器内的/testbed仓库后运行测试结束时finally中无条件调用cleanup_container()销毁容器。一个任务挂掉只销毁它自己的容器其他任务毫发无损——这是容器隔离故障域最小化的典型价值。新手上手3 步跑通 HyperAgents 沙箱如果你想在本地体验这套机制步骤其实很简单构建镜像执行docker build --networkhost -t hyperagents .见 README.md 的 Setup 一节初始化环境bash ./setup_initial.sh脚本会按你选定的域准备数据集子集参考 setup_initial.sh启动进化循环python generate_loop.py --domains domain此后每一代智能体的生成都自动完成起容器 → 应用补丁 → 执行 → git 还原 → 销毁容器的完整闭环。提示运行前请把OPENAI_API_KEY等 API Key 写入.env文件输出统一存放在outputs/目录。总结一套值得借鉴的 AI 代码沙箱范式HyperAgents 的 Docker 沙箱机制可以浓缩为三句话容器是边界不可信代码只能在受控容器里执行数据交换走 tar 通道utils/docker_utils.pygit 是时光机所有修改以 diff 形式进容器、以 commit 形式留痕、以reset --hard形式归零utils/git_utils.py超时是保险丝timeout 强制清理确保任何任务都有终点generate_loop.py。这套git 容器的组合拳也为任何需要安全执行 AI 生成代码的项目——无论是 SWE-bench 式评测、智能体进化系统还是代码自动修复服务——提供了非常实用的参考模板。【免费下载链接】HyperAgentsSelf-referential self-improving agents that can optimize for any computable task项目地址: https://gitcode.com/gh_mirrors/hy/HyperAgents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考