项目简介:devlooper
devlooper
是一种程序合成代理工具,能够通过运行测试自动修复其输出。这个项目的目的是通过反复迭代,最终生成符合要求的软件。以一个例子来说,devlooper
经过11次迭代,成功创建了一个用于生成维诺图(Voronoi)图的 Python 库。
工作原理
devlooper
项目基于 smol developer 扩展而来,并将其与 Modal 的 Sandbox 相结合,用于在隔离环境中运行测试。项目通过不断迭代,直至所有测试通过,从而逐步更新代码和修正环境(例如安装所需的软件包)。
环境模板
项目中使用了环境“模板”来定义某个特定语言或框架的基本设置和测试工具。当前提供了三种模板:
- React + Jest
- Python
- Rust
然而,项目并不局限于这些语言或框架,只要能够在容器中安装即可运行。开发者欢迎任何贡献新的模板(请参阅 env_templates.py
)。
沙盒环境
项目利用 Modal 的 Sandbox 来执行测试。这使得项目能够以增量方式构建图像(类似于逐层缓存构建 Dockerfile)。
调试循环
在每一轮迭代中,代理会为环境运行测试命令。如果接收到非零退出代码,代理会将来自沙盒的标准输出和错误输出传递给大模型(LLM)以诊断错误。此诊断用于生成一个 DebugPlan
,包括以下三类操作:
- 检查并修复文件
- 在图像中安装软件包
- 在图像中运行命令
更多类型的操作也可以被轻松实现,项目团队欢迎相关贡献。
使用指南
设置
-
创建 Modal 账户,如果在候补名单上可以通过邮件联系团队
-
在当前 Python 环境中安装
modal
软件包pip install modal
-
创建 Modal 令牌
modal token new
-
创建 OpenAI 账户并获取 API 密钥
-
创建名为
openai-secret
的 Modal 密匙
生成项目
准备好后,从项目的根目录运行 modal run
,并选择所需的 prompt
和 template
:
modal run src.main --prompt="a simple 2D graphics library" --template="rust"
modal run src.main --prompt="a todo-list app" --template="react"
modal run src.main --prompt="a webscraper that checks if there are new reservations for a given restaurant on Resy" --template="python"
所有测试通过后,输出文件默认会被写入同目录下的 output/
文件夹,用户可以通过 --output-path
参数改写默认路径。
展示
项目还有更多展示内容即将上线,敬请期待。
未来发展
虽然 devlooper
目前还主要是一个概念验证项目,但团队计划进行许多改进:
- 在迭代过程中引入用户反馈,或将现有项目和计划作为输入并建议更改。
- 提高调试提示质量,从代码中提取相关部分以改进调试效率。
- 在必要时自动获取软件包的文档。
- 使用之前的编辑来预防模型进入循环。
- 从头合成
EnvTemplate
。 - 将此项目推广到更多类型的大模型,包括开源的模型。