Repo2Run论文及源码学习
论文情况
Author:Ruida Hu Chao Peng Xinchen Wang Junjielong Xu Cuiyun Gao
time: 2025
paper: Repo2Run
source code: bytedance/Repo2Run
该论文获得2025 NeurIPS spotlight.
论文学习
基本概要
利用大模型(LLM)智能代理工具,为Python项目自动化生成可靠的Dockerfile,简化项目的部署难度和方便依赖管理。利用Dockerfile部署的环境运行项目中的测试文件,并能够成功通过。
问题和措施
- SWE-agent不能解决依赖冲突、基础镜像版本不匹配、环境变量缺失、源码语法错误
- 难以追踪有效的成功的执行路径
- 命令 造成 环境污染
针对以上问题,论文中提出了一些创新的解决方法:
- 版本回滚,利用
docker commit
,当命令污染时,可以回滚到之前的版本 - 内外双层环境架构,内层环境是docker容器环境,负责执行shell指令和动作(比如运行测例);外层环境是一个agent,可以执行高权限动作(如切换基础镜像)
- Dockerfile生成器:记录在内层环境中成功执行的路径代码到Dockerfile中
下面是Repo2Run
的关键执行流程:
关键部件
- external environment:
- 回滚:当某条指令(如
cat a.txt >b.txt
)执行失败会修改代码或文件的结构,此时环境会进入到一个未知状态,因此在论文中使用docker commit
保存镜像的快照,方便回滚。但是论文中提到某些“安全”指令(如cat a.txt
ls
)等执行失败时是不用回滚的。 - 切换基础镜像:根据agent的response切换到其他版本镜像,同时需要清空之前的所有操作和记录。
- 输出处理:只保留重要的输出,避免LLM agent模型超载。
- internal environment:
- 环境监控
- 依赖安装:
pip install
apt-get install
等 - 运行测试
- 代码修改:利用LLM agent修改源码中的语法问题,同时不能修改测试文件
- 执行shell
- Dockerfile synthesizer
实验和结论
实验1:与baseline对比
在github中收集420个python相关项目,start > 100。
对照组(baseline):
- pipreqs: 自动生成requirement.txt的python工具,利用他生成的requirements.txt手动构造Dockerfile
- LLM generator: 根据README构造Dockerfile
- SWE-agent: 调整了prompt,保留基础设置
实验结果:
结论:
- rollback在处理依赖冲突和切换基础镜像方面很有必要
- Repo2Run在不同领域的代码测试中准确率较高,对于真实项目环境部署很有用
实验2:与自身对比
两组实验:
- 破坏双环境架构测试:没有外部环境,只保留内部环境
- 删除Dockerfile 生成器,直接使用LLM agent生成Dockerfile
- 删除rollback机制
实验结果:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ya0rk の Blog!