GPT-Pilot —— 让AI来写代码

news2025/1/11 14:54:55

1.概述

什么是GPT-Pilot?

一个AI开发者伴侣,可以从0开始构建应用程序,可以自己编写代码、配置开发环境、管理开发任务、调试代码。

项目地址:https://github.com/Pythagora-io/gpt-pilot

不仅仅是一个自动完成功能或 PR 消息的助手,而是一个真正的 AI 开发人员,可以编写完整的功能、调试它们、与您讨论问题、请求审核等。

主要思想是人工智能可以为应用程序编写大部分代码(也许 95%),但对于其余的 5%,在我们获得完整的 AGI 之前,现在和将来都需要开发人员。

2.如何使用GPT-Pilot

GPT-Pilot创建的App:https://github.com/Pythagora-io/gpt-pilot/wiki/Apps-created-with-GPT-Pilot

方式1:VS Code Plugin

方式2:CLI

CLI是与AI问答的形式

python main.py -step #5
>>> 

? What is the project name? timer app

? Describe your app in as much detail as possible. Create a simple timer app usi
ng HTML, CSS, and JavaScript that allows users to set a countdown timer and rece
ive an alert when the time is up.

? Should the timer be digital or analog? digital, in browser

? Does the timer need to have any specific format, like hh:mm:ss or mm:ss? mm:ss

? Should there be any visual indication or progress bar showing how much time is left? yes

? Can a user set multiple timers at once or just one at a time? multiple

? Should the countdown timers continue to run even if the web browser is closed? no

……

A user will receive an alert when the countdown on a timer reaches zero. yes

…… 

? Please set up your local environment so that the technologies 
above can be utilized. When you're done, write "DONE" DONE

……

Can i execute the command: 'npm init -y' with 10000ms time out?
? If yes, just press ENTER   

……

样例:

Timer: http://localhost:3000/

Chat: https://vanish-talk.examples.pythagora.ai/

3.GPT-Pilot背后的思想

3.1 三大支柱

  • GPT Pilot 被设想为真正的人工智能开发人员而不是自动完成或聊天机器人

  • 它像人类开发者那样逐步构建程序,完成大部分的编码任务。但当它遇到困难时,需要向人类寻求帮助。

  • GPT-Pilot专注于构建应用程序层,而不是致力于获取输出更好的结果。

作者的陈述:ChatGPT就像拥有超级资深知识的工程师,但是记忆力犹如金鱼,你必须准确地告诉它下一步做什么。GPT-Pilot致力于创建一个思维框架,通过结合前后的上下文,建立反馈循环,并确定下一步做什么,逐步构建完整的程序。

基于上面的思想,在GPT-Pilot设计的时候需要遵循三大主要思想:

1.人类开发者需要更多地参与程序创建的过程

  • AI距离完全100%自主开发还比较遥远,因此需要与人类开发人员密切合作,监督开发过程,并且可以随时更改代码,而GPT-Pilot需要继续处理这些更改。

  • 以下是开发人员可以干预开发过程的领域:

    • 在每个小的开发任务完成后,开发人员应该检查它并确保它按预期工作。

    • 在每次测试失败的时候,开发人员需要介入调试。

    • 当出现一些AI无法完成的工作的时候(例如需要密钥之类的)。

2.程序需要被逐步编码,而不是一次生成尽可能完整的程序

  • 和人类一样,AI编码肯定会犯错误,所以为了让它更容易地进行调试,并让开发人员了解生成的代码中发生了什么,AI不应该只是一次吐出整个代码库。

  • 相反,应用程序应该像开发人员一样一步一步地生成和调试。

  • 如果GPT Pilot一步一步地创建一款应用程序,人工智能和监督它的开发人员都将能够更容易地解决问题,整个开发过程也将更加顺利。

3.GPT-Pilot需要具有可扩展性

  • GPT-Pilot必须能够创建可投入生产的大型应用程序,而不仅仅是小型应用程序,在小型应用程序中,整个代码库都可以融入LLM环境。

  • 问题是,LLM 的所有学习都是在上下文中完成的。也许有一天,LLM可以针对每个具体项目进行微调,但现在看来,这将是一个非常缓慢的过程。

  • GPT-Pilot解决这个问题的方式是使用上下文回溯(context rewinding)、递归对话和TDD。

    • 上下文回溯

      • 每一个开发任务都需要带上迄今为止前面所有的上下文。如此一来,每个任务都有相似的上下文(都对当前的整个开发任务有相同的理解)。

      • 例如,#40任务和#50任务,在构建的时候,都需要回溯到#1的上下文,这样GPT-Pilot可以用相似的方式来解决#40和#50任务。

    • 递归对话

      • 如果GPT-Pilot检测到错误,则需要对其进行调试。但是在调试的过程中发生了另一个错误,GPT-Pilot需要停止调试第一个问题,修复第二个问题,然后再返回修复第一个问题。一旦修复了最深层次的错误,我们就在递归中向上移动并继续修复错误,直到整个递归完成。

    • TDD(测试驱动开发)

      • 为了让GPT-Pilot扩展代码库、改进代码库、更改需求并添加新功能,它需要能够在不破坏以前编写的代码的情况下创建新代码。

      • 没有比使用 TDD 方法更好的方法了。按期望输出的逻辑编写测试,然后进行开发,直到测试可以通过为止。

      • 对于GPT-Pilot编写的所有代码,它需要编写测试来检查代码是否按预期工作,以便每当进行新更改时,都可以运行所有回归测试以检查是否有任何问题。

3.2 GPT-Pilot设计的的一些理论基础

1.需要人类来监督人工智能
  • 不仅仅是因为AI还不够强大,对于开发或者产品经理来说,一旦看到实现的样子,很可能会想更改它,这是很常见的。

  • 在开发过程中,会逐渐意识到最初意识不到的各种边缘情况,并且认为重构整个程序,比解决当前遇到的所有问题要更容易(狗头🐶)。但是每次重构,都会影响其他模块或功能。

  • 因此在GPT-Pilot继续执行下一个任务之前,需要人类工程师来进行代码审查CodeReview。如果有人告诉GPT-Pilot出了什么问题,那么解决任务本身的问题就会容易得多。

2.人工智能可以迭代自己的错误

很多人判断ChatGPT给出的代码是否靠谱的时候,经常是根据最开始第一次使用ChatGPT的时候的表现情况。如果一开始询问ChatGPT给出的代码并不符合预期,那么可能此后都觉得ChatGPT不靠谱。

  • 事实上,人类几乎从来不会在第一次构建程序的时候,就编写出可用的代码。相反,一般来说都是编写代码,运行它,查看错误,然后迭代。这正是GPT-Pilot能够做的事情——编写代码后,GPT-Pilot可以运行代码,获取输出,并询问 LLM 输出是否正确,是否应该修复某些内容,如果是,如何修复。

3.软件开发是可以精心策划的
  • 开发程序的过程可以有很多种模式:

  • 其中一种比较常见的模式是:编写代码 -- 运行 -- 读取错误 -- 修复代码 -- 重新运行(重复直到符合预期) -- 交付

  • 另一种模式是:编写代码 -- 测试实现(重复直到所有测试通过) -- 代码审核者审核 -- 修复问题(直到所有审核者通过) -- 交付

  • 整个程序开发的过程,是可以精心编排的。

4.编码过程并不是一条直线
  • 绝大部分时候,我们编写代码的时候,会不断地反复迭代、重写代码。在初始实现之后,可能意识到有更好的方法来实现某些内容,或者需求发生了变化。

  • 在现有解决方案无法实现的时候,我们可能需要回滚一系列的更改,考虑新的解决方案。

  • 为了让GPT-Pilot或任何其他人工智能开发人员大规模工作,它需要有一种机制,使其能够返回、选择替代路径并重新实现任务。

3.3 GPT-Pilot作者对AI Coding的一些思考:

1.程序的最初描述比我们想象的重要得多
  • 我们最初的想法是,通过人类的输入,GPT-Pilot将能够朝着正确的方向进行构建,并越来越接近最终的解决方案,即使最初的描述很模糊。

  • 然而,GPT-Pilot的思维从最初的描述开始贯穿整个构建过程。这样,如果最初的输入中有误导性的内容,GPT-Pilot可能最终会朝着错误的方向去构建,哪怕其他大部分内容都是正确的。

如何写一个优秀的程序描述:https://github.com/Pythagora-io/gpt-pilot/wiki/How-to-write-a-good-initial-project-description

2.编码不是一条直线
  • 如上面提到的,代码可能会不断修改和迭代。因此GPT-Pilot在构建决策树的时候,会不断地创建标记,当出现问题的时候,它可以查看标记,并思考哪里出现了问题,应该重新朝着什么方向去解决问题。

3.开发者可以自行审核
  • 开发者并不会因为处理相同的信息而无法有效审核,相反,这个过程是很有效的。GPT-Pilot设置了2个审核:代码审核和文件审核。

4.AI更善于专注解决一个问题

  • 如果告诉GPT-Pilot在单个描述中进行 2 个不同的更改,它将很难同时关注这两个更改。因此,我们将每个人工的输入分成多个部分,以防输入包含多个不同的请求。

5.详细的日志是很有帮助的
  • GPT-Pilot会创建带有详细日志记录的代码,这样当运行应用程序并遇到错误时,可以查看当前的日志,及这些日志在代码中的位置,可以更轻松地进行调试。

6.将代码库分割成更小的文件有很大帮助
  • 如果代码被分割成许多文件而不是几个大文件,那么GPT-Pilot实现功能和修复错误会容易得多。

  • 就像我们人类所想的那样——处理较小的代码块比处理大的代码块容易得多。我们通过创建抽象级别(函数、类等)来做到这一点。

  • GPT-Pilot会创建更多模块化代码并将其拆分为更多文件。它的效果非常好,而且最终结果对我们开发人员来说也更好。

7.为了使人们能够修复代码,他们需要清楚地展示任务中编写的内容及其背后的想法
  • GPT-Pilot的目标是完成所有编码任务的 90%,并将其余 10% 留给人类。这 10% 通常包括GPT-Pilot很难注意到的修复或小变化,但对于人类来说,这可能是一个简单的变化。

  • 然而,问题在于,告诉人们哪些代码不起作用以及他们应该查看哪些代码并不容易。如果GPT-Pilot编写了 3,000 行代码,那么人类开发人员如果想要帮助GPT-Pilot,则需要在深入实际代码之前了解整个代码库。

  • GPT-Pilot需要做到的是,人类开发人员将详细解释当前任务中添加了哪些代码及其背后的原因。这样能够帮助GPT-Pilot。

8.人类是懒惰的🐶
  • GPT-Pilot最好向人类提出问题,而不是让人类思考所有可能的错误。

  • 我们注意到的一件事情是,人们更愿意回答GPT-Pilot提出的问题,而不是有一个开放式的输入字段,让他们可以编写不受限制的反馈。

9.很难让AI跳出框框思考
  • 在GPT-Pilot思考的过程当中,我们可以尝试用一些已知的解决方案去提示它,但是这其实并不容易。我们最终做的是要求GPT-Pilot列出它能想到的所有可能的解决方案并将它们保存到内存中。当我们需要尝试其他方法时,我们会提取替代解决方案并告诉它尝试不同但具体的解决方案。

4.GPT-Pilot工作流程

4.1 主流程

  1. 人类开发者输入期望构建的程序的描述。

  2. AI产品负责人分解业务的需求,并向人类开发者提问,以澄清任何不清楚的地方。

  3. AI软件架构师分解技术需求,并列出将用于构建应用程序的技术。

  4. AIDevOps构建开发环境。

  5. AI技术主管负责将整个开发过程分解成若干任务,其中每个任务包含以下信息:

    1. 任务描述。

    2. 自动化测试的描述,以便GPT-Pilot能够遵循TDD原则

    3. 人工验证的描述(是人类开发者检查任务是否执行成功的方式)

  6. AI开发者CodeMonkey开始一项一项地执行开发任务。

    1. AI开发者在执行一个任务的时候,会把这个任务分解成更小的步骤,每个步骤都是相对简单和低级的技术步骤,大部分不需要人工审核或可以通过自动化测试进行测试。

4.2 执行任务的内部流程

1.任务分解 Task breakdown

  • 这里有2个不同的概念:开发任务(Task)开发步骤(Step)

    • 开发任务(Task):高级描述,包含:

      • description:完成此任务需要执行什么。

      • user_review_goal:如何确定任务是否被正确地完成。

      • programmatic_goal:描述自动化测试编写和测试。

    • 开发步骤(Step):任务分解之后,更小块的执行块,它是以下三种之一:

      • 命令运行:需要在计算机上运行的命令,例如安装依赖项。

      • 代码更改:最重要的开发步骤,它解释了实际代码中到底需要实现什么才能完成当前步骤。它可以包含需要编写的新代码或需要更改的代码。它的工作方式是代码更改是对需要实现的内容的详细的、人类可读的描述。它包含需要实现的代码以及其用途的描述。这与您要求 ChatGPT 编写代码非常相似。它将为您提供代码以及编写该代码的原因的解释。

      • 人类干预:人工智能无法独自完成的发展步骤,需要人类的帮助来完成该步骤。

2.获取当前实现的代码 Fetching of currently implemented code

  • 对于人工智能来说,编写包含代码的新文件很容易,但实际上,这种情况很少发生。大多数情况下,我们写入现有文件并更改现有代码或添加新代码。

  • 在大型工程中处理某项任务时,通常会查看代码库的一小部分(可能是 1000 行),并只修改这一小部分相关的代码。

  • GPT-Pilot的做法:

    • AI 会获得开发步骤描述以及整个项目文件/文件夹结构以及每个文件和文件夹的描述。由此,LLM 告诉我们哪些文件与上述步骤相关。

    • 在缩小了必要的文件范围后,我们给出了列出的每个文件的 LLM 伪代码,并要求它告诉我们哪些函数与当前的开发步骤相关。

    • 一旦我们知道了它选择的伪代码,我们就可以获取实际代码并将其放入原始对话中。

3.编码 Coding

  • 创建一条LLM信息,其中包含描述、以及当前的代码,它将返回:

    • 如果需要对整个文件进行编码,LLM 的响应将包含所有代码。

    • 但如果只需要更改文件内的部分代码,LLM 会告诉我们类似“After the Mongo setup, add the following rows of code”的信息

    • CodeMonkey负责代码库中插入/替换它们。

4.测试 Testing

  • 有 2 个地方需要进行测试:

    • 在每个开发任务(Task)之后,GPT-Pilot 创建集成测试来测试高级功能是否按预期工作;

    • 在每个开发步骤(Step)之后,创建较小的单元测试以确保所有功能都正常工作。功能按预期工作。

  • GPT-Pilot 可以执行 3 种不同类型的测试:

    • 自动化测试

    • 命令运行

    • 人工干预

5.调试 Debugging

  • 以递归对话的方式进行调试。

  • 当递归深度达到 5 级时,GPT-Pilot 将停止调试过程并要求开发人员修复最初的问题。一旦开发人员解决了这个问题,他们就会将结果写入 GPT-Pilot。然后,它可以继续开发过程,就像它本身调试了问题一样。

5.参考资料

GPT-Pilot主页:https://github.com/Pythagora-io/gpt-pilot

使用GPT-Pilot创建的App展示:https://github.com/Pythagora-io/gpt-pilot/wiki/Apps-created-with-GPT-Pilot

如何写一个优秀的项目描述:https://github.com/Pythagora-io/gpt-pilot/wiki/How-to-write-a-good-initial-project-description

GPT-Pilot博客介绍第一部分:https://blog.pythagora.ai/2023/08/23/430/

GPT-Pilot博客介绍第二部分:https://blog.pythagora.ai/2023/09/04/gpt-pilot-coding-workflow-part-2-3/

作者的开发博客和思考:https://blog.pythagora.ai/2024/02/19/gpt-pilot-what-did-we-learn-in-6-months-of-working-on-a-codegen-pair-programmer/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1969058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSP-J 2022 读程题16.答案与解析

知识点 普及 逻辑运算 16. 01 #include <iostream> 02 03 using namespace std; 04 05 int main() 06 { 07 unsigned short x, y; 08 cin >> x >> y; 09 x (x | x << 2) & 0x33; 10 x (x | x << 1) & 0x55; 11 y (y …

常见离线语音识别模块功能说明——天问ASR;机芯智能;海凌科;轻语音

本文章从开发方式及功能等方面上进行说明&#xff0c;便于开发者进行选择与开发。 本文章依据截至2024年8月1日各网站资料进行整理编写。 总结&#xff1a; 开发方式上&#xff1a; 天文ASR 有着最灵活的开发方式&#xff0c;可完全按照程序员意愿进行开发&#xff0c;同时有…

零基础进程最详解:进程状态、僵尸进程、孤儿进程、阻塞态、挂起态、进程切换、进程常用命令、进程创建、队列优先级

目录 强烈建议全文阅读&#xff01;&#xff01;&#xff01; 强烈建议全文阅读&#xff01;&#xff01;&#xff01; 强烈建议全文阅读&#xff01;&#xff01;&#xff01; 一、进程状态 二、僵尸和孤儿进程 1、僵尸进程 Z&#xff08;zombie&#xff09; 2、孤儿进…

[012-1].第12节:Mysql的配置文件的使用

6.配置文件的使用 6.1.配置文件的格式 1.查看配置文件&#xff1a;vim /etc/my.cnf 2.在配置文件中华定义了很多组&#xff0c;组名就分别是server&#xff0c;mysqld&#xff0c;mysqld_safe,client,mysql,mysqladmin&#xff0c;每个组下面就可以定制很多启动项&#xff1b…

scrapy框架2

scrapy框架2 一、中间件 &#xff08;下载中间件&#xff09; 利用中间件加cookie 案例&#xff1a;登录以后下载豆瓣的电影信息 def get_cookie_dict():cookie_str登陆后的cookiecookie_dict{}for item in cookie_str.split(";"):key,valueitem.split(""…

遇到缓存问题

问题&#xff1a;在事务中在进行数据库查询所有的数据后&#xff0c;将其中的数据更改几个后&#xff0c;重新进行查询。发现此时返回的数据并不是修改之后的数据。 经过学习后发现是Mybatis的一级缓存问题,同时也了解的Mybatis的二级缓存&#xff1a; Mybatis一级缓存: 当在…

SpringCloud网关 SpringBoot服务 HTTP/HTTPS路由/监听双支持

背景 一般来说SpringCloud Gateway到后面服务的路由属于内网交互&#xff0c;因此路由方式是否是Https就显得不是那么重要了。事实上也确实如此&#xff0c;大多数的应用开发时基本都是直接Http就过去了&#xff0c;不会一开始就是直接上Https。然而随着时间的推移&#xff0c…

WebGoC题解(16) 386.山洞

题目描述 小C和弟弟一起参观影视城&#xff0c;发现里面有m个圆形排列的“小山洞”&#xff0c;山洞用半径20、颜色号为编号的圆表示&#xff0c;由边长是100的线连接&#xff0c;均匀的发布一圈&#xff08;1号洞在正上方&#xff09;。m为8时如下图&#xff1a; 小C跟弟弟提议…

点赞10W+,销售额上百万,如何搭上奥运的流量快车?

2024巴黎奥运会正如火如荼进行中。一边是紧张的赛事与各种抓马事情&#xff0c;一边是法国的浪漫与中国00后的松弛&#xff0c;这届奥运会的看客仿佛瓜田里的猹&#xff0c;忙得不可开交。 作为全球范围内的重大体育盛事&#xff0c;奥运会一直以来都备受公众的热烈关注。 据腾…

Python PDF处理技巧 - 加密和解密PDF

目录 安装Python PDF库 使用Python加密PDF 使用Python设置PDF的安全权限 使用Python解密PDF PDF文档在我们的个人生活和工作中扮演着重要角色。从机密的商业报告到敏感的个人记录&#xff0c;PDF广泛应用于存储和共享重要信息。然而&#xff0c;随着数据泄露和未经授权访问…

facebook脸书登入协议分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;若有侵权&#xff0c;请添加&#xff08;wx&#xff1a;wyqlxl99&#xff09;联系删除 前言: 前段…

MuRF代码阅读

对图像Size的处理, 以适应Transformer 在MVSPlat 当中使用 Center_Crop 裁剪图像&#xff0c;适用于 Transformer 的32 倍数&#xff0c; 其中 焦距 f 不变化&#xff0c;只改变 cx,cy.MuRF 直接对图像进行 插值&#xff0c;合成理想的 size. 根据 ori_size 和 inference_size…

恒驰快讯丨恒驰受邀出席华为云数据库专题销售伙伴思享会

7月25日下午&#xff0c;华为云数据库专题销售伙伴思享会在上海成功落幕。 本次华为云数据库专题销售伙伴思享会&#xff0c;汇集了优秀伙伴、华为云产品专家70人&#xff0c;共同见证了一场关于数据库前沿技术、市场趋势和应用实践的深入交流盛会。上海恒驰信息系统有限公司&a…

【Linux网络编程】套接字Socket

网络编程基础概念&#xff1a; ip地址和端口号 ip地址是网络协议地址&#xff08;4字节32位&#xff0c;形式&#xff1a;xxx.xxx.xxx.xxx xxx在范围[0, 255]内&#xff09;&#xff0c;是IP协议提供的一种统一的地址格式&#xff0c;每台主机的ip地址不同&#xff0c;一个…

【赛事】2024第五届“华数杯”全国大学生数学建模竞赛

为了培养学生的创新意识及运用数学方法和计算机技术解决实际问题的能力&#xff0c;天津市未来与预测科学研究会、中国未来研究会大数据与数学模型专业委员会&#xff08;协办&#xff09;决定举办华数杯全国大学生数学建模竞赛。竞赛的目标是为培养大学生的科学精神及运用数学…

精准识别,无缝转换:2024年顶尖语音转文字技术展示

高效、准确的信息传递与处理成为了我们工作与生活中的重要需求。随着科技的飞速发展&#xff0c;一项革命性的技术——语音转文字软件应运而生。掌握这项技术就能提高工作效率创造更多价值。 1.365在线转文字 链接传送&#xff1a;www.pdf365.cn/ 这个方式虽然不是软件&am…

《四季之歌:春溪潺潺、夏林舞动、秋山守望、冬夜温光》

在这个喧嚣的世界里&#xff0c;有时我们会渴望逃离&#xff0c;去寻找那些安静而纯净的自然角落。每个季节都有它独特的魅力&#xff0c;它们像是大自然精心谱写的交响乐章&#xff0c;我们只需细心聆听&#xff0c;就能感受到四季变换带来的无尽奇境。 春天的序曲&#xff0c…

政企互动 | 南京市雨花台区委副书记王金玉一行莅临聚铭网络视察指导

7月30日&#xff0c;南京市雨花台区委副书记王金玉一行领导莅临聚铭网络进行实地考察与指导。聚铭网络总经理唐开达先生热情接待&#xff0c;双方就聚铭网络的发展现状、业务规模及未来规划展开了深入而愉快的交流。 在唐开达总经理的悉心陪同下&#xff0c;王书记一行深入聚铭…

前后端完全分离实现登录和退出

前后端分离的整合 使用springsecurity前端项目redis完成认证授权的代码 1. 搭建一个前端工程 使用 vue ui搭建&#xff0c;使用webstrom操作 2. 创建一个登录页面 <template><div class"login_container"><!-- 登录盒子 --><div class"l…

深度学习中五种归一化原理

调用库API实现以及手写实现 import torch import torch.nn as nnbatch_szie2 #sample time_steps3 embedding_dim4 #channel num_group2inputxtorch.randn(batch_szie,time_steps,embedding_dim)# N*L*C 批归一化 BatchNorm1d ## 1. 批归一化 实现batch_norm并验证API --…