LLM自动计算机框架
项目描述
L2MAC:大型语言模型自动计算机框架
开创了第一个基于LLM的多智能体系统中基于LLM的通用存储程序自动计算机(冯·诺依曼架构)框架,通过生成大量和一致性的输出解决复杂任务,不受LLMs固定上下文窗口约束的限制。
新闻
🌟 2024年5月7日至11日:我们将在2024年学习表示国际会议(ICLR)上展示L2MAC。在奥地利维也纳的ICLR与我们会面!请通过sih31(at)cam.ac.uk联系我,以便我们可以见面,也接受虚拟会议!
🌟 2024年4月23日:L2MAC已完全开源,并发布了初始版本。
🚀 2024年1月16日:论文L2MAC:用于大量代码生成的LLM自动计算机已被接受在ICLR 2024上进行展示!
LLM自动计算机(L2MAC)框架擅长解决大型复杂任务,例如在生成大型代码库方面处于领先地位,甚至可以编写整本书,所有这些都绕过了LLMs固定上下文窗口约束的传统限制。
- LLM自动计算机可以接受一个单行输入提示并生成大量和大型的输出,例如生成整个复杂的代码库。
- LLM-Automatic Computer(LLM-Automatic计算机)内部使用了一个名为提示程序的工具,它是一系列提示,每个提示提供执行步骤的指令。除非明确指定,否则提示程序是自动生成(自举)并执行的。具体来说,每个指令步骤都会加载到一个新的LLM代理中执行,该代理的上下文由控制单元管理,并提供了工具,使其能够读取和写入持久性存储,这里是一个文件存储,其中包含最终和中间输出。这使得它可以自动执行通用提示程序以解决复杂任务,这些任务需要广泛的连贯输出,其中输出是无界的,不受LLM底层上下文窗口约束的限制。
LLM-Automatic Computer(L2MAC)实例化,用于根据单个用户提示编码整个应用程序的大规模复杂代码库。在这里,我们为L2MAC提供了额外的工具来检查代码中的任何语法错误,并在存在的情况下运行单元测试。
开始使用
安装
请确保您的系统已安装Python 3.7+。您可以通过使用:
python --version
来检查这一点。您可以使用conda如下:conda create -n l2mac python=3.9 && conda activate l2mac
pip install --upgrade l2mac
# or `pip install --upgrade git+https://github.com/samholt/l2mac`
# or `git clone https://github.com/samholt/l2mac && cd l2mac && pip install --upgrade -e .`
有关详细的安装说明,请参阅安装
配置
您可以通过运行以下命令来初始化L2MAC的配置,或者手动创建~/.L2MAC/config.yaml
文件
# Check https://samholt.github.io/L2MAC/guide/get_started/configuration.html for more details
l2mac --init-config # it will create ~/.l2mac/config.yaml, just modify it to your needs
您可以根据示例和文档来配置~/.l2mac/config.yaml
llm:
api_type: "openai" # or azure etc. Check ApiType for more options
model: "gpt-4-turbo-preview" # or "gpt-4-turbo"
base_url: "https://api.openai.com/v1" # or forward url / other llm url
api_key: "YOUR_API_KEY"
用法
安装后,您可以使用L2MAC CLI
l2mac "Create a beautiful, playable and simple snake game with pygame. Make the snake and food be aligned to the same 10-pixel grid." # this will create a codebase repo in ./workspace
或将其作为库使用
from l2mac import generate_codebase
codebase: dict = generate_codebase("Create a beautiful, playable and simple snake game with pygame. Make the snake and food be aligned to the same 10-pixel grid.")
print(codebase) # it will print the codebase (repo) complete with all the files as a dictionary, and produce a local codebase folder in ./workspace
快速入门
教程
- 🗒 在线文档
- 💻 用法
- 🔎 L2MAC能做什么?
- 🖼️ 示例作品集
- 🛠 如何运行L2MAC?
- 🧑💻 贡献
- 🔖 用例
- ❓ 常见问题解答
支持
加入我们的Discord
📢 加入我们的Discord频道!期待在那里见到您!🎉
联系方式
如果您对这项项目有任何问题或反馈,请随时联系我们。我们非常感谢您的建议!
- 电子邮件:sih31 at cam.ac.uk
- GitHub问题:对于更技术性的查询,您也可以在我们的GitHub存储库中创建一个新问题。
我们将在2-3个工作日内对所有问题做出回应。
引用
要了解最新的研究和发展,请关注Twitter上的@samianholt。
要在出版物中引用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-Automatic Computer (L2MAC) 实例化用于基于单个用户提示符编码整个应用的大型复杂代码库。代码库生成系统设计任务结果显示了所指定功能的实现百分比(功能%)、生成的代码中的语法错误数量(错误数量)、代码行数(LOC)以及通过测试的数量(通过测试)。L2MAC 通过生成具有最小语法错误和高通过率的自生成单元测试的完整功能代码,全面实现了所有任务中用户指定的任务功能要求最高的百分比,因此它是生成大型输出代码库的 最先进的 技术,同样适用于生成大型输出任务。结果平均了10个随机种子。
- L2MAC 通过生成具有最小语法错误和高通过率的自生成单元测试的完整功能代码,全面实现了论文中(如上所示)所有系统设计任务中用户指定的任务功能要求最高的百分比——因此,L2MAC 在完成这些系统设计大型代码库生成基准任务方面处于最先进水平。。
- 我们还对 L2MAC 在标准的 HumanEval 基准 上进行了进一步评估,并观察到它实现了 90.2% Pass@1 的最先进分数。
- L2MAC 也可用于通用的大量基于文本的任务,例如根据单个提示符编写 整本书。
与 AutoGPT 和 GPT-4 的深入比较
L2MAC 是否可以正确执行面向任务的上下文管理?
在方法任务指令中保留并在上下文中使用的用户指定功能要求的百分比。
为了探索在操作期间基准测试的方法是否包含完成任务所需的信息,我们将我们的 功能% 指标调整为计算保留在方法任务指令中的用户指定任务功能要求数量,即最终在操作期间输入其上下文窗口的指令,如上图所示。从经验上看,我们发现 L2MAC 能够在其 提示程序 中保留大量用户指定的任务功能要求并执行面向指令的长运行任务。我们注意到 AutoGPT 也最初将用户指定的任务功能要求转换为任务指令;然而,它以更高的压缩率完成——将信息压缩成简短的六句描述。这个过程导致丢失了完成任务所必需的、与详细用户指定任务相符的关键任务信息。
Code-L2MAC 是否可以对整个文件存储执行精确的读写操作?
文件访问热图。指示在线聊天应用任务中每个写入操作步骤中文件的读取、写入以及在何时创建文件。
我们希望在执行任务指令的过程中,了解L2MAC是否能够理解代码库中现有的生成代码文件——这些文件可能是很久以前创建的。通过理解这些文件,L2MAC能够创建与现有文件相互关联的新文件,并且最重要的是,在实现新功能时更新现有的代码文件。为了获得洞察,我们在上图绘制了每个写入操作步骤中文件读取、写入和创建的热图。我们观察到,L2MAC能够理解现有的生成代码,使其能够更新现有的代码文件,即使这些文件最初是在很久以前创建的。当不确定时,它还可以通过向文件写入来更新文件。相比之下,AutoGPT通常只在创建文件时写入一次,并且只能更新它知道并保留在其当前上下文窗口内的文件。尽管它也有读取文件的工具,但由于它通过总结上下文窗口中最旧的对话消息来处理上下文窗口的方法,它经常忘记它很久以前创建的文件,即,在完成任务的过程中对之前进步的持续有损压缩。
L2MAC能否检查生成的输出并进行错误纠正?
(b) 代码库中的语法错误数量。(c) 通过和失败的自生成单元测试的堆叠直方图。
当使用概率模型(LLM)作为代码输出的生成器时,其输出中可能会自然地出现错误。因此,我们希望验证,当出现错误时,相应的基准方法能否对代码库进行错误纠正。我们在上图中的 图(b) 中绘制了在出现错误时的代码库中的语法错误数量。我们观察到,L2MAC可以正确地纠正包含错误的前一代码库,这些错误可能来自最后一个写入的文件的语法错误或其他依赖最近写入的文件且现在包含错误的文件。它是通过在出现错误时显示错误输出,并在完成当前指令的同时修改代码库以解决错误来实现的。相比之下,AutoGPT不能检测到代码库中已犯的错误并继续运行,这可能会使代码库中的错误数量增加。
此外,L2MAC与功能代码一起生成单元测试,并使用这些测试作为错误检查器,检查代码库在生成过程中的功能,并可以使用这些错误来修复更新现有文件部分后现在失败的单元测试。我们在上图中的 图(c) 中展示了这一点,并观察到尽管AutoGPT也被提示为所有生成的代码编写单元测试,但它无法将这些测试用作完整性错误检查,这可以通过观察AutoGPT忘记它以前创建的文件来进一步加剧,因此无法修改新的修改中已遗忘的现有代码文件,导致不兼容的代码文件。
总结
我们介绍了L2MAC,这是第一个基于LLM的通用存储程序计算机框架,它有效地和可扩展地通过为长期输出生成任务添加存储器来增强LLM。具体来说,当应用于长期代码生成任务时,L2MAC超越了现有的解决方案——并且是快速开发的一个非常有用的工具。我们欢迎贡献,并鼓励您使用和引用该项目。点击此处 开始。
示例画廊
我们包含了一个由L2MAC自动计算机(L2MAC)完全根据单个输入提示生成的示例应用库。L2MAC擅长解决大型复杂任务,例如在生成大型代码库方面处于领先地位,甚至可以编写整本书,所有这些都绕过了LLMs的固定上下文窗口限制。
可玩蛇游戏
只需输入以下命令:l2mac "使用pygame创建一个美丽、可玩且简单的蛇游戏。使蛇和食物对齐到相同的10像素网格中。"
,你将获得一个完整的可玩游戏代码库,如下所示。
点击此处获取github上的完整文件或在此处下载。生成此代码的代码和提示在此处。
大型复杂URL缩短器网络应用
点击此处获取github上的完整文件或在此处下载。生成此代码的代码和提示在此处。
完整书籍 | 意大利面食谱书
只需给L2MAC以下提示:为以下书名“Twirls & Tastes: A Journey Through Italian Pasta”编写一个完整的食谱书。描述:“Twirls & Tastes”邀请你踏上一次美味的意大利之旅,从托斯卡纳的阳光明媚的山丘到那不勒斯的繁忙街道,探索多样的意大利面景观。发现地方特色,了解每道菜背后的故事,并通过简单易懂的食谱掌握制作意大利面的艺术,保证让你愉悦感官。
它就可以自动生成一本26页长的完整书籍。
点击此处获取完整书籍;L2MAC为该书制作了所有文本,所有图片都是使用DALLE创作的。
完整的输出文本文件在github上;你可以在此处下载。生成此书的代码和提示在此处。
可玩黑杰克命令行界面(CLI)游戏
点击此处获取github上的完整文件或在此处下载。生成此代码的代码和提示在此处。
贡献你自己的创建的应用程序
我们正在积极寻找你通过提交一个包含你所创建的应用程序的PR、通过GitHub问题分享它或在Discord频道上分享它的方式将你自己的出色应用程序上传到这里。
项目详情
下载文件
为您的平台下载文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。