论文情况

AuthorRuida Hu Chao Peng Xinchen Wang Junjielong Xu Cuiyun Gao
time: 2025
paper: Repo2Run
source code: bytedance/Repo2Run

该论文获得2025 NeurIPS spotlight.

论文学习

基本概要

利用大模型(LLM)智能代理工具,为Python项目自动化生成可靠的Dockerfile,简化项目的部署难度和方便依赖管理。利用Dockerfile部署的环境运行项目中的测试文件,并能够成功通过。

问题和措施

  1. SWE-agent不能解决依赖冲突、基础镜像版本不匹配、环境变量缺失、源码语法错误
  2. 难以追踪有效的成功的执行路径
  3. 命令 造成 环境污染

针对以上问题,论文中提出了一些创新的解决方法:

  1. 版本回滚,利用docker commit,当命令污染时,可以回滚到之前的版本
  2. 内外双层环境架构,内层环境是docker容器环境,负责执行shell指令和动作(比如运行测例);外层环境是一个agent,可以执行高权限动作(如切换基础镜像)
  3. Dockerfile生成器:记录在内层环境中成功执行的路径代码到Dockerfile中

下面是Repo2Run的关键执行流程:

关键部件

  1. external environment
  • 回滚:当某条指令(如cat a.txt >b.txt)执行失败会修改代码或文件的结构,此时环境会进入到一个未知状态,因此在论文中使用docker commit保存镜像的快照,方便回滚。但是论文中提到某些“安全”指令(如cat a.txt ls)等执行失败时是不用回滚的。
  • 切换基础镜像:根据agent的response切换到其他版本镜像,同时需要清空之前的所有操作和记录。
  • 输出处理:只保留重要的输出,避免LLM agent模型超载。
  1. internal environment
  • 环境监控
  • 依赖安装pip install apt-get install
  • 运行测试
  • 代码修改:利用LLM agent修改源码中的语法问题,同时不能修改测试文件
  • 执行shell
  1. 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:与自身对比

两组实验:

  1. 破坏双环境架构测试:没有外部环境,只保留内部环境
  2. 删除Dockerfile 生成器,直接使用LLM agent生成Dockerfile
  3. 删除rollback机制

实验结果: