type
status
date
slug
summary
tags
category
icon
password
状态
专注质量
预计(分钟)
开始时间
结束时间
原创文章

🤔 简介

🗒️
AutoGPT思路以及代码解读
两个月前,笔者发布了一篇关于AutoGPT的文章。在这两个月中,陆续发布了许多与LLM相关的文章和项目,例如LLM游玩我的世界、ToT(Tree of thought)理论、GPT-Engineer等,进一步展示了LLM的能力边界。
因此,在这篇文章中,我也想分享一下GPT-Engineer的相关思路。
该项目的主页如下:
notion image
 
项目主打一键生成整个代码库。开发者以“贪吃蛇”游戏为例,演示了如何使用GPT-Enginner创建一个完整的网页端运行的贪吃蛇小游戏。与AutoGPT相比,项目规模更小,部署难度也更简单。

📝代码解读

在正式进入代码解读之前,首先来看一张截图:
notion image
AI阅读代码已经成为不可或缺的工具。记得很久之前,李宏毅教授曾经说过,AI最擅长的就是“猜”,无论是分类任务还是预测任务,都属于猜测。而程序员在接收别人写过的代码时所做的第一件事是什么呢?也是猜测。根据文件名、函数名、变量名以及注释对项目有一个宏观的把握。既然都是猜测,让AI来做有时比我们自己来要容易。况且,即使不正确,也可以作为参考。
笔者也非常建议所有人都来尝试使用AI。它能省去很多时间成本。举个例子,我之前虽然有一定的编程基础,但都是基于C#和Unity游戏开发相关的,对Python以及cmd命令接触很少。通过在线版本的ChatGPT plus以及IDE里面的阅读代码功能相结合,部署和阅读的时间都得到了很大提升。将项目主页的运行说明贴上去,并说明自己要使用哪种模式运行,ChatGPT就能编写出一个可运行的命令。
notion image

从main.py主文件梳理项目运行流程

入口函数代码:
刨开最开始的一系列对参数的解析,剩下的功能还是比较清晰的。
比如以上代码,对提示词进行了整理。DBs类里存储了多个DB数据库,有的分管日志输出,有的记录用户输入,有的指向生成的代码库。当然,还有一些预定义好的固定提示词。
然后就是这段代码。可以看到,GPT-Engineer的核心逻辑与AutoGPT完全不同。这里只是按照步骤执行,遍历所有的步骤并逐个执行。某个步骤只需从dbs中获取所需数据即可。最后,还会将每个步骤执行的结果保存在一个字典中。

解析官网案例中使用的Step

notion image
在Steps.py文件中,展示了所有的AI可执行的步骤,最底部是不同的模式都配置了哪些步骤,这些步骤将会顺序执行。
接下来我们就按照顺序一个一个挨着分析,首先是clarify:
这段代码逻辑很长,看看AI对其的解释作为参考:
这段的系统提示词是这样的:
那么我们就明白了,GPT会针对用户最初的需求列出一个清单,然后挨个询问用户。如果用户回答了,就在清单上打勾并继续下一个问题。如果用户输入“c”,就会跳出循环,让GPT自己回答这个问题。具体效果可参考项目宣传视频:
notion image
第二个是gen_clarified_code:
到这里,代码就容易了起来,这里先得到了上一个step中获取到的清单及答案。
然后拿到了系统消息,使用setup_sys_prompt函数,代码如下:
为了降低理解难度,我将最终的提示词翻译并整合成中文,如下:
这一步结束后,就会得到所有的代码了,感觉这里很可能会超过token,由于我是用的是32k,如果不是32k版本的GPT4,可能要做一些优化?
再接下来是gen_entrypoint,代码如下:
这里是针对代码编写一些所需的依赖库,以及再编写一个run.sh文件,安装这些依赖。
接着是execute_entrypoint代码:
这一段是运行代码库,比较容易理解,由于系统兼容性可能会运行不起来。
最后是human_review,主要代码如下:
实际用途不大,毕竟程序不是一个循环。到此为止,已经执行结束了。这些人类反馈数据只会存在数据库中。如果后面定义了自己的调试步骤,可能会用到这些数据。

🤗总结归纳

GPT-Engineer的项目思路比较简单。总体来说,在开始正式编写代码之前,重视人类反馈。未完成清单的想法比较有趣并可以借鉴。
此外,项目的厉害之处在于代码库编写得非常漂亮。它把生成代码库这件事情拆解为多个步骤,在多个步骤之间顺序传递顺序。开发者可以比较方便地编写自己的Step并加入到配置中。可扩展的能力非常强,是所有LLM开发者都值得学习的。
然而,项目也有一些不好的地方。比如,这里可能仍然解决不了Debug的问题。当我们已经拥有了很多代码的时候,如何遵循既有的代码库和规则编写代码,是这个项目根本无法解决的问题。这些问题可以作为后续开发者和研究者的方向,并且可以就着这个项目编写Step和DB管理脚本。
 
致谢:
💡
Written by Gao Yue,edited by Notion AI.
 
 
代码随想录—双指针当一个月提示词工程师是什么体验?
Aryue
Aryue
一个普通的干饭人🍚
公告
type
status
date
slug
summary
tags
category
icon
password
状态
专注质量
预计(分钟)
开始时间
结束时间
📧:578626935@qq.com