L2MAC 徽标 :第一个实用的基于 LLM 的通用存储程序自动计算机(冯·诺依曼架构)框架,这是一种基于 LLM 的多代理系统,用于生成广泛且一致的输出,不受 LLM 固定上下文窗口限制的约束。
新闻
🌟 2024年5月7日 - 11日:我们将在2024年国际学习表示会议(ICLR)上展示 L2MAC。欢迎在奥地利维也纳的 ICLR 会议上与我们见面!如果您有兴趣见面,请通过 sih31(at)cam.ac.uk 联系我,也接受虚拟会议!
🌟 2024年4月23日:L2MAC 完全开源,初始版本已发布。
🚀 2024年1月16日:论文《L2MAC: 用于广泛代码生成的大型语言模型自动计算机》被接受在 ICLR 2024 上展示!
LLM 自动计算机(L2MAC)框架擅长解决大型复杂任务,例如生成大规模代码库或甚至编写整本书,这些都绕过了传统 LLM 固定上下文窗口的限制。
•LLM 自动计算机可以接收一个单行输入提示 并生成广泛且大量的输出,例如生成整个复杂的代码库。
在内部,LLM 自动计算机使用一个提示程序 ,这是一系列提示,每个提示提供一个执行的指令步骤。除非明确给出,否则提示程序 是自生成(自举)并执行的。具体来说,提示程序 的每个指令步骤都被加载到一个新的 LLM 代理中执行,其上下文由控制单元管理,并提供工具,使其可以读写持久性存储(此处为文件存储),其中包含最终和中间输出。这使得它能够自动执行通用提示程序来解决复杂任务,这些任务需要广泛的连贯输出,而输出不受 LLM 底层上下文窗口限制的约束。
LLM 自动计算机(L2MAC)实例化,用于根据 单个用户提示 为整个应用程序编写大型复杂代码库。这里我们为 L2MAC 提供了额外的工具来检查代码中的任何语法错误,并运行任何单元测试(如果存在)。
入门
安装
确保你的系统上已安装 Python 3.7 以上版本。你可以使用以下命令检查:python --version
。你可以使用 conda 创建虚拟环境:conda create -n l2mac python=3.9 && conda activate l2mac
然后通过以下方式安装 L2MAC:
pip install --upgrade l2mac
# 或 `pip install --upgrade git+https://github.com/samholt/l2mac`
# 或 `git clone https://github.com/samholt/l2mac && cd l2mac && pip install --upgrade -e .`
有关详细的安装指导,请参考安装文档[1]。
配置
你可以通过运行以下命令初始化 L2MAC 的配置,或者手动创建~/.L2MAC/config.yaml
文件:
# 查看 https://samholt.github.io/L2MAC/guide/get_started/configuration.html 获取更多详细信息
l2mac --init-config # 它将创建 ~/.l2mac/config.yaml,只需根据需要进行修改
你可以根据示例[2]和文档[3]配置 ~/.l2mac/config.yaml
:
llm:
api_type: "openai" # 或 azure 等,检查 ApiType 了解更多选项
model: "gpt-4-turbo-preview" # 或 "gpt-4-turbo"
base_url: "https://api.openai.com/v1" # 或转发 url / 其他 llm url
api_key: "YOUR_API_KEY"
使用
安装后,你可以使用 L2MAC CLI:
l2mac "创建一个美观、可玩且简单的贪吃蛇游戏,使用 pygame。让蛇和食物对齐到相同的 10 像素网格上。" # 这将在 ./workspace 中创建一个代码库
或将其作为库使用:
from l2mac import generate_codebase
codebase: dict = generate_codebase("创建一个美观、可玩且简单的贪吃蛇游戏,使用 pygame。让蛇和食物对齐到相同的 10 像素网格上。")
print(codebase) # 它将以字典形式打印完整的代码库(repo),并在 ./workspace 中生成一个本地代码库文件夹
快速入门[4]
•🗒 在线文档[5] •💻 使用方法[6] •🔎 L2MAC 可以做什么?[7] •🖼️ 示例作品展示[8] •🛠 如何运行 L2MAC?
• L2MAC 使用与开发指南 | L2MAC 101[9]
•🧑💻 贡献
• 开发路线图[10]
•🔖 使用案例•创建一个最先进的大型代码库[11]•写完整本书[12]
要获取最新的研究和开发进展,请关注 @samianholt[12] 在 Twitter 上。
要在出版物中引用 L2MAC,请使用以下 BibTeX 条目:
@inproceedings{
holt2024lmac,
title={L2{MAC}: Large Language Model Automatic Computer for Unbounded Code Generation},
author={Samuel Holt and Max Ruiz Luyten and Mihaela van der Schaar},
booktitle={The Twelfth International Conference on Learning Representations},
year={2024},
url={https://openreview.net/forum?id=EhrzQwsV4K}
}
L2MAC 与 AutoGPT、GPT-4 及现有方法的比较如何?
LLM 自动计算机(L2MAC)实例化,用于根据单个用户提示 为整个应用程序编写大型复杂代码库。代码库生成系统设计任务的结果显示了完全实现的功能特性百分比(Features %)、生成代码中的语法错误数量(# Errors)、代码行数(LOC)和通过的测试数量(Tests Passed)。L2MAC 在所有任务中,通过生成功能齐全且语法错误极少的代码,并通过大量自生成的单元测试,通过了最高百分比的用户指定任务功能要求,因此在生成大型输出代码库方面处于最先进水平,在生成大型输出任务方面也具有竞争力。结果取自10个随机种子的平均值。
1.L2MAC 在本文中的所有系统设计任务中全面实现了最高百分比的用户指定任务功能要求(如上图所示),通过生成功能齐全且语法错误极少的代码,并通过大量自生成的单元测试。因此,L2MAC 在完成这些系统设计大型代码库生成基准任务方面处于最先进水平。 2.我们进一步在标准 HumanEval 基准上评估了 L2MAC,发现它获得了 90.2% Pass@1 的最先进分数。 3.L2MAC 还适用于通用的广泛文本任务,例如从单个提示编写整本书。
HumanEval
LLM 自动计算机(L2MAC)在 HumanEval 编码基准上表现强劲,目前在全球编码行业标准排行榜中排名第三。
与 AutoGPT 和 GPT-4 的深入比较
L2MAC 能否正确执行面向任务的上下文管理?
任务说明中保留的用户指定功能要求的百分比。
为了探索在操作过程中,基准方法是否包含完成任务所需的上下文信息,我们调整了我们的 Features % 指标,以计算任务说明中保留的用户指定任务功能要求数量,即这些说明在操作过程中最终被输入其上下文窗口的数量,如上图所示。经验表明,L2MAC 能够在其提示程序中保留大量用户指定的任务功能要求,并执行面向指令的长时间运行任务。我们注意到 AutoGPT 也会将用户指定的任务功能要求翻译为任务说明;然而,它以更高的压缩率完成此操作——将信息压缩成仅六句话的描述。此过程导致了完成整体任务所需的关键信息丢失,使得任务无法正确完成,无法与用户详细指定的任务对齐。
Code-L2MAC 能否执行整个文件存储的精确读写操作?
文件访问热图。显示在一次操作过程中读取、写入文件以及在每个写入操作步骤中创建文件的情况。
我们希望了解在执行任务指令的过程中,L2MAC 是否能够理解代码库中的现有生成代码——这些代码可能是许多指令之前创建的,并通过其理解创建与现有文件相关联的新文件,最重要的是在实现新功能时更新现有代码文件。为了获得见解,我们在上图中绘制了在一次操作中读取、写入文件以及在每个写入操作步骤中创建文件的热图。我们观察到 L2MAC 能够理解现有生成代码,并允许其更新现有代码文件,即使是许多指令步骤之前创建的文件,并且可以在不确定时查看文件并通过写入文件来更新文件。相比之下,AutoGPT 通常只在最初创建文件时写入文件,并且只能更新其当前上下文窗口中保留的文件。尽管它也有一个读取文件工具,但由于其上下文窗口处理方法是对最早的对话消息进行总结,即在完成任务操作过程中持续有损压缩先前的进展,它往往会忘记许多迭代之前创建的文件。
L2MAC 能否检查生成的输出并进行错误校正?
(b) 代码库中的语法错误数量。(c) 通过和失败的自生成单元测试的堆叠柱状图。
当使用概率模型(LLM)作为生成器输出代码时,其输出中可能会自然出现错误。因此,我们希望验证在出现错误时,相应的基准方法能否对代码库进行错误校正。我们在上图 (b) 中绘制了运行过程中代码库中的语法错误数量。我们观察到 L2MAC 能够正确地对之前生成的包含错误的代码库进行错误校正,这些错误可能来自最后写入的文件中的语法错误或依赖于最近写入文件的其他文件中的错误。它通过在错误出现时显示错误输出,并在继续执行当前指令的同时修改代码库来解决错误。相比之下,AutoGPT 无法检测到代码库中出现的错误,并继续运行,这可能会导致代码库中出现更多的错误。
此外,L2MAC 在生成功能代码的同时生成功能测试,并使用这些测试作为错误检查工具,检查代码库生成过程中的功能性,并可以使用这些错误来修复代码库,以通过在更新现有文件部分后失败的单元测试。我们在上图 (c) 中展示了这一点,并观察到尽管 AutoGPT 也被提示为所有生成的代码编写单元测试,但它无法使用这些测试作为完整性错误检查工具,这可能是由于 AutoGPT 忘记了之前创建的文件,并因此无法在进行新修改时修改现有的已遗忘代码文件,导致代码文件不兼容。
总结
我们展示了 L2MAC,这是第一个基于 LLM 的通用存储程序计算机框架,该框架有效且可扩展地增强了 LLM 的记忆存储能力,用于生成长期输出任务,而这在以前未能成功实现。特别是当应用于长代码生成任务时,L2MAC 超越了现有解决方案——是一个极为有用的快速开发工具。我们欢迎贡献,并鼓励您使用和引用该项目。点击此处开始使用[13]。
我们展示了一组完全由 LLM 自动计算机(L2MAC)从单个输入提示生成的示例应用程序。L2MAC 擅长解决大型复杂任务,例如在生成大型代码库方面处于最先进水平,甚至可以编写整本书,这些都绕过了传统的 LLM 固定上下文窗口限制。
可玩的贪吃蛇游戏
只需输入 l2mac "创建一个美观、可玩且简单的贪吃蛇游戏,使用 pygame。让蛇和食物对齐到相同的 10 像素网格上。"
, 你就会得到一个完整的可玩游戏的代码库,如下所示。
点击此处获取 GitHub[14] 上的完整文件或下载它们[15]。生成此代码和提示在此处[16]。
大型复杂 URL 缩短器 Web 应用程序
点击此处获取 GitHub[17] 上的完整文件或下载它们[18]。生成此代码和提示在此处[19]。
整本书 | 意大利面食谱书
只需给 L2MAC 提示 "为以下书名《旋转与品味:意大利面之旅》编写完整的食谱书"。描述:"《旋转与品味》邀请您踏上一场美味的意大利之旅,探索从托斯卡纳阳光明媚的山丘到那不勒斯繁忙街道的多样化面食风景。发现各地区的特色,了解每道菜背后的故事,并通过易于遵循的食谱掌握面食制作的艺术,承诺让您的感官得到满足。"
它可以自动生成一本完整的26页书。
点击此处[20] 获取完整的书籍;L2MAC 生成了书中的所有文字,所有图像均由 DALLE 创建。
完整的输出文本文件在 GitHub[21] 上;您可以在此处[22]下载它们。生成此代码和提示在此处[23]。
可玩的 Blackjack CLI 游戏
点击此处获取 GitHub[24] 上的完整文件或下载它们[25]。生成此代码和提示在此处[26]。
贡献您自己创建的应用程序
我们积极寻找您在此处上传自己精彩的应用程序,可以通过提交 PR,分享 GitHub issue,或在 Discord 频道[27]分享。
更多信息
本文由笔者翻译整理自:https://github.com/samholt/l2mac,如对您有帮助,请帮忙点赞、转发、关注,谢谢!
References
[1]
安装文档:
https://samholt.github.io/L2MAC/guide/get\_started/installation.html#install-stable-version
[2]
示例:
https://github.com/samholt/L2MAC/blob/master/config/config.yaml
[3]
文档:
https://samholt.github.io/L2MAC/guide/get\_started/configuration.html
[4]
快速入门:
https://samholt.github.io/L2MAC/guide/get\_started/quickstart.html
[5]
在线文档:
https://samholt.github.io/L2MAC/
[6]
使用方法:
https://samholt.github.io/L2MAC/guide/get\_started/quickstart.html
[7]
L2MAC 可以做什么?:
https://samholt.github.io/L2MAC/guide/get\_started/introduction.html
[8]
示例作品展示:
https://samholt.github.io/L2MAC/guide/use\_cases/gallery.html
[9]
L2MAC 使用与开发指南 | L2MAC 101:
https://samholt.github.io/L2MAC/guide/tutorials/l2mac\_101.html
[10]
开发路线图:
https://samholt.github.io/L2MAC/guide/roadmap.html
[11]
创建一个最先进的大型代码库:
https://samholt.github.io/L2MAC/guide/use\_cases/codebase\_generator.html
[12]
写完整本书:
https://samholt.github.io/L2MAC/guide/use\_cases/book\_generator.html
[13]
@samianholt:
https://twitter.com/samianholt
[14]
点击此处开始使用:
https://samholt.github.io/L2MAC
[15]
GitHub:
https://github.com/samholt/L2MAC/tree/master/docs/generated\_examples/snake\_game
[16]
下载它们:
https://github.com/samholt/L2MAC/blob/master/docs/public/snake\_game.zip
[17]
此处:
https://github.com/samholt/L2MAC/blob/master/examples/generate\_codebase\_simple\_playable\_snake.py
[18]
GitHub:
https://github.com/samholt/L2MAC/tree/master/docs/generated\_examples/url\_shortener\_web\_application
[19]
下载它们:
https://github.com/samholt/L2MAC/blob/master/docs/public/url\_shortener\_web\_application.zip
[21]
点击此处:
https://samholt.github.io/L2MAC/TwirlsAndTastesAJourneyThroughItalianPasta.pdf
[22]
GitHub:
https://github.com/samholt/L2MAC/tree/master/docs/generated\_examples/italian\_pasta\_recipe\_book
[23]
在此处:
https://github.com/samholt/L2MAC/blob/master/docs/public/italian\_pasta\_recipe\_book.zip
[24]
此处:
https://github.com/samholt/L2MAC/blob/master/examples/generate\_book.py
[25]
GitHub:
https://github.com/samholt/L2MAC/tree/master/docs/generated\_examples/blackjack\_game
[26]
下载它们:
https://github.com/samholt/L2MAC/blob/master/docs/public/blackjack\_game.zip
[27]
此处:
https://github.com/samholt/L2MAC/blob/master/examples/generate\_codebase\_simple\_blackjack.py
[28]
Discord 频道:
https://github.com/samholt/l2mac