GPT Engineer|代码项目自动生成工具
该插件比较强大,可以快速生成Github代码库,并且可以学习你的编码风格。指定您想要构建的内容,AI会根据你的要求进行构建。
这个项目独特地方在于,开发者在文本文件中提交需求,GPT-Engineer 不是无条件接受这些要求,而是提出许多详细的问题来让程序员澄清缺失的细节。
翻译成人话:可以自己写你想要什么,然后让AI来帮你写代码,期间如果需要调整什么之类的,AI会问你,你根据他的问题进行回复即可生成完整的代码仓库。
项目原理
整个过程分两个阶段执行,即需求细化促进
阶段和软件构建
阶段。
需求细化促进
用户提供的包含软件需求的文本文件被提交给 GPT-Engineer,并被放置在 OpenAI 的 GPT 的初始消息中,同时还包括确定澄清问题的指示。
GPT-Engineer 系统接收来自 OpenAI GPT-4 的反馈,了解哪些需求需要澄清,并回应提示用户澄清的问题。
GPT-Engineer 会将这一过程循环,直到所有问题澄清到 OpenAI GPT-4 满意为止。
软件构建
前一阶段提炼的需求被打包,并与 OpenAI 的 GPT 指令(即系统提示)和另外一套 GPT-Engineer 希望看到的输出指令(即用户提示)一起包装起来。
GPT-Engineer 收到来自 OpenAI GPT-4 的响应,然后…
GPT-Engineer 为用户提供指令的软件项目创建源代码文件。
项目理念
- 简单获得价值
- 灵活且易于添加新的“AI步骤”。
- 逐步建立以下用户体验:
- 高级提示
- 向AI提供反馈,它会随着时间的推移记住
- AI与人类之间快速交接
- 简单,所有计算都是“可恢复”的,并持久化到文件系统。
项目仓库
GitHub:AntonOsika/gpt-engineer
网络问题
在安装过程中,你可能即便开启了魔法上网也无法下载一些编程依赖库,关于魔法上网的相关配置问题不方便在站内讲解,请自行查看【魔法上网】的教程内容。
安装教程
如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键
后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。
首先我们需要确认一个工作目录,用来存放该项目的相关环境依赖文件。本站所选择的目录为D盘
的根目录下openai.wiki
文件夹,完整路径为:D:\openai.wiki
。
检测D盘
是否在openai.wiki
目录,没有则创建该文件夹。
if not exist D:\openai.wiki mkdir D:\openai.wiki
强制切换工作路径为D盘的openai.wiki
文件夹。
cd /d D:\openai.wiki
拉取该项目的Github仓库文件,将其下载至openai.wiki
文件夹内。
git clone https://github.com/AntonOsika/gpt-engineer.git
环境部署
在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。
conda create -y -p D:\openai.wiki\gpt-engineer\ENV
初始化Conda环境,防止后续操作可能存在报错等问题。
conda init cmd.exe
激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。
conda activate D:\openai.wiki\gpt-engineer\ENV
执行如下命令,安装访项目的相关依赖库。
pip install gpt-engineer
详细安装过程如下:
(D:\openai.wiki\GPT_Engineer\ENV) D:\openai.wiki\GPT_Engineer>pip install gpt-engineer Collecting gpt-engineer Downloading gpt_engineer-0.0.6-py3-none-any.whl (13 kB) Collecting ruff==0.0.272 Downloading ruff-0.0.272-py3-none-win_amd64.whl (5.7 MB) |████████████████████████████████| 5.7 MB 726 kB/s Collecting typer==0.9.0 Downloading typer-0.9.0-py3-none-any.whl (45 kB) |████████████████████████████████| 45 kB 192 kB/s Collecting termcolor==2.3.0 Using cached termcolor-2.3.0-py3-none-any.whl (6.9 kB) Collecting pytest==7.3.1 Downloading pytest-7.3.1-py3-none-any.whl (320 kB) |████████████████████████████████| 320 kB 204 kB/s Collecting black==23.3.0 Downloading black-23.3.0-cp39-cp39-win_amd64.whl (1.3 MB) |████████████████████████████████| 1.3 MB ... Collecting mypy==1.3.0 Downloading mypy-1.3.0-cp39-cp39-win_amd64.whl (8.9 MB) |████████████████████████████████| 8.9 MB 656 kB/s Collecting pre-commit==3.3.3 Downloading pre_commit-3.3.3-py2.py3-none-any.whl (202 kB) |████████████████████████████████| 202 kB 409 kB/s Collecting openai==0.27.8 Downloading openai-0.27.8-py3-none-any.whl (73 kB) |████████████████████████████████| 73 kB 1.8 MB/s Collecting platformdirs>=2 Downloading platformdirs-3.8.0-py3-none-any.whl (16 kB) Collecting pathspec>=0.9.0 Downloading pathspec-0.11.1-py3-none-any.whl (29 kB) Collecting typing-extensions>=3.10.0.0 Using cached typing_extensions-4.6.3-py3-none-any.whl (31 kB) Collecting packaging>=22.0 Using cached packaging-23.1-py3-none-any.whl (48 kB) Collecting tomli>=1.1.0 Using cached tomli-2.0.1-py3-none-any.whl (12 kB) Collecting mypy-extensions>=0.4.3 Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB) Collecting click>=8.0.0 Using cached click-8.1.3-py3-none-any.whl (96 kB) Collecting aiohttp Downloading aiohttp-3.8.4-cp39-cp39-win_amd64.whl (323 kB) |████████████████████████████████| 323 kB 261 kB/s Requirement already satisfied: requests>=2.20 in c:\users\opena\miniconda3\lib\site-packages (from openai==0.27.8->gpt-engineer) (2.25.1) Requirement already satisfied: tqdm in c:\users\opena\miniconda3\lib\site-packages (from openai==0.27.8->gpt-engineer) (4.61.2) Collecting pyyaml>=5.1 Downloading PyYAML-6.0-cp39-cp39-win_amd64.whl (151 kB) |████████████████████████████████| 151 kB 328 kB/s Collecting nodeenv>=0.11.1 Downloading nodeenv-1.8.0-py2.py3-none-any.whl (22 kB) Collecting identify>=1.0.0 Downloading identify-2.5.24-py2.py3-none-any.whl (98 kB) |████████████████████████████████| 98 kB 544 kB/s Collecting cfgv>=2.0.0 Downloading cfgv-3.3.1-py2.py3-none-any.whl (7.3 kB) Collecting virtualenv>=20.10.0 Downloading virtualenv-20.23.1-py3-none-any.whl (3.3 MB) |████████████████████████████████| 3.3 MB 364 kB/s Collecting pluggy<2.0,>=0.12 Downloading pluggy-1.2.0-py3-none-any.whl (17 kB) Collecting iniconfig Downloading iniconfig-2.0.0-py3-none-any.whl (5.9 kB) Collecting exceptiongroup>=1.0.0rc8 Using cached exceptiongroup-1.1.1-py3-none-any.whl (14 kB) Collecting colorama Using cached colorama-0.4.6-py2.py3-none-any.whl (25 kB) Requirement already satisfied: setuptools in c:\users\opena\miniconda3\lib\site-packages (from nodeenv>=0.11.1->pre-commit==3.3.3->gpt-engineer) (52.0.0.post20210125) Requirement already satisfied: certifi>=2017.4.17 in c:\users\opena\miniconda3\lib\site-packages (from requests>=2.20->openai==0.27.8->gpt-engineer) (2021.5.30) Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\opena\miniconda3\lib\site-packages (from requests>=2.20->openai==0.27.8->gpt-engineer) (1.26.6) Requirement already satisfied: chardet<5,>=3.0.2 in c:\users\opena\miniconda3\lib\site-packages (from requests>=2.20->openai==0.27.8->gpt-engineer) (4.0.0) Requirement already satisfied: idna<3,>=2.5 in c:\users\opena\miniconda3\lib\site-packages (from requests>=2.20->openai==0.27.8->gpt-engineer) (2.10) Collecting filelock<4,>=3.12 Using cached filelock-3.12.2-py3-none-any.whl (10 kB) Collecting distlib<1,>=0.3.6 Downloading distlib-0.3.6-py2.py3-none-any.whl (468 kB) |████████████████████████████████| 468 kB 312 kB/s Collecting frozenlist>=1.1.1 Downloading frozenlist-1.3.3-cp39-cp39-win_amd64.whl (34 kB) Collecting charset-normalizer<4.0,>=2.0 Downloading charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl (97 kB) |████████████████████████████████| 97 kB 1.1 MB/s Collecting aiosignal>=1.1.2 Using cached aiosignal-1.3.1-py3-none-any.whl (7.6 kB) Collecting async-timeout<5.0,>=4.0.0a3 Using cached async_timeout-4.0.2-py3-none-any.whl (5.8 kB) Collecting yarl<2.0,>=1.0 Downloading yarl-1.9.2-cp39-cp39-win_amd64.whl (61 kB) |████████████████████████████████| 61 kB 241 kB/s Collecting attrs>=17.3.0 Using cached attrs-23.1.0-py3-none-any.whl (61 kB) Collecting multidict<7.0,>=4.5 Downloading multidict-6.0.4-cp39-cp39-win_amd64.whl (28 kB) Installing collected packages: multidict, frozenlist, yarl, platformdirs, filelock, distlib, colorama, charset-normalizer, attrs, async-timeout, aiosignal, virtualenv, typing-extensions, tomli, pyyaml, pluggy, pathspec, packaging, nodeenv, mypy-extensions, iniconfig, identify, exceptiongroup, click, cfgv, aiohttp, typer, termcolor, ruff, pytest, pre-commit, openai, mypy, black, gpt-engineer Successfully installed aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 attrs-23.1.0 black-23.3.0 cfgv-3.3.1 charset-normalizer-3.1.0 click-8.1.3 colorama-0.4.6 distlib-0.3.6 exceptiongroup-1.1.1 filelock-3.12.2 frozenlist-1.3.3 gpt-engineer-0.0.6 identify-2.5.24 iniconfig-2.0.0 multidict-6.0.4 mypy-1.3.0 mypy-extensions-1.0.0 nodeenv-1.8.0 openai-0.27.8 packaging-23.1 pathspec-0.11.1 platformdirs-3.8.0 pluggy-1.2.0 pre-commit-3.3.3 pytest-7.3.1 pyyaml-6.0 ruff-0.0.272 termcolor-2.3.0 tomli-2.0.1 typer-0.9.0 typing-extensions-4.6.3 virtualenv-20.23.1 yarl-1.9.2
执行如下命令,强制切换至项目路径内。
cd /d D:\openai.wiki\gpt-engineer
执行如下代码,自动安装该项目的相关依赖。
pip install .
通过CMD添加关于OPENAI的环境变量API Key密钥。
setx OPENAI_API_KEY "你的API Key"
比如本站使用的Key后的格式如下,请根据自身需求修改:
setx OPENAI_API_KEY "sk-0zzJlU3PmmSy*****WVxT3BlbkFJsNoPyJuo0Yf1E8XxzuZl"
补充说明:官方建议填写GPT-4的API,这样一般来说生成的代码是可以直接跑通的,如果你使用GPT-3.5的API可能无法跑通,需要反正改BUG调试很多次,毕竟GPT-3.5是没有GPT-4智能的。
使用教程|准备阶段
因为这个项目的主要功能是用来写代码,所以我们需要先设置一个目录,用来生成代码,以及设置相关文件,以下是详细的使用方法。
首先我们执行如下代码,将会自动在该目录下创建一个名为Snake
的文件夹,用来存放代码贪吃蛇项目的相关文件。
mkdir D:\openai.wiki\gpt-engineer\projects\Snake
在创建完成项目的文件夹之后,我们还需要在该文件夹内创建一个名为prompt
的空文件,里面没有任何内容。
fsutil file createnew D:\openai.wiki\gpt-engineer\projects\Snake\prompt 0
运行如下命令,打开我们刚刚创建的空白prompt
文件。
start D:\openai.wiki\gpt-engineer\projects\Snake\prompt
此时我们可以在文件内编写想要用代码来完成的内容,越为具体越好,写完之后记得保存文件。
用Python写一个贪吃蛇游戏,游戏规则如下: 1.贪吃蛇由一条蛇组成,最初是由三个方块组成,每个方块都有一个小点。 2.蛇可以通过键盘控制向上、下、左、右方向移动。 3.游戏区域内会有一些食物,当蛇吃到食物时,它就会变长一格,同时得分也会增加。 4.如果蛇撞到墙壁或者它自己的身体,那么游戏就会结束。 5.蛇的长度越长,游戏难度就越大,因为蛇会越来越难控制。 希望这些规则能够帮助你更好地了解贪吃蛇游戏。
好了,我们已经完成了所有的准备工作,下面是生成代码的部分。
使用教程|代码生成
执行以下命令,将会使用gpt-engineer自动按要求生成代码。
gpt-engineer projects/Snake
理论上是直接就可以生成了的,但站长遇到以下报错。大概率是因为类型的问题,但是查了一下官方的仓库问题解决,没有人遇到过这个问题,那站长就手动修改一下吧,将collect.py
的feedback: str | None
更改为feedback: str
试一下。
(D:\openai.wiki\gpt-engineer\ENV) D:\openai.wiki\gpt-engineer>gpt-engineer projects/Snake Traceback (most recent call last): File "c:\users\opena\miniconda3\lib\runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "c:\users\opena\miniconda3\lib\runpy.py", line 87, in _run_code exec(code, run_globals) File "C:\Users\openA\miniconda3\Scripts\gpt-engineer.exe\__main__.py", line 4, in <module> File "c:\users\opena\miniconda3\lib\site-packages\gpt_engineer\main.py", line 11, in <module> from gpt_engineer.collect import collect_learnings File "c:\users\opena\miniconda3\lib\site-packages\gpt_engineer\collect.py", line 19, in <module> class Learning: File "c:\users\opena\miniconda3\lib\site-packages\gpt_engineer\collect.py", line 25, in Learning feedback: str | None TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'
可以跑通了,但是又遇到了新问题,可能因为站长用的是GPT-3.5的API Key的关系,所以出现如下报错。唉,这个实在是没有办法了,站长具有GPT-4权限的API账号被封了,还在发邮件交涉。
(D:\openai.wiki\gpt-engineer\ENV) D:\openai.wiki\gpt-engineer>gpt-engineer projects/Snake INFO:openai:error_code=model_not_found error_message="The model 'gpt-4' does not exist" error_param=model error_type=invalid_request_error message='OpenAI API error received' stream_error=False Model gpt-4 not available for provided API key. Reverting to gpt-3.5-turbo. Sign up for the GPT-4 wait list here: https://openai.com/waitlist/gpt-4-api
如果你能够正常跑的通,那么将会在项目文件夹下生成相关的代码了,继续往后跑就行,没有什么难度。
总结
其实站长的GPT-4权限账号被封了半个月了,真的烦,好多东西都用不了。正规花钱买充值的,却不能用,真让人心寒啊。
关于这个项目,其实跑个Demo还行,如果用来真的搞项目,可能并不是很好用,而且GPT-4的API额度还挺贵的。本来没想写这个东西的,但是架不住这个项目太火了。几天不见,这个项目已经32K的Star了,这个数字还是非常恐怖的。
以后关于用AI来编程肯定是个趋势,就像这个项目一样,只需要不断对话,告诉项目你想要的是什么就可以了,但这只是趋势,不是现在。
评论 (0)