GPT PILOT :第一个真正的AI程序员
点击上方 壹家大数据,关注后发现更多精彩内容
数据来源:https://github.com/trending,后台回复 230101,获取 github 爬虫
免费提供 github 热搜历史数据,后台回复 邮箱 即可


GPT PILOT :第一个真正的 AI 程序员

GPT Pilot 被设想为一个real AI 开发人员而不是自动完成或聊天机器人。相反,它是开发人员为如何构建您的应用程序或功能制定计划并开始编码。它想自己完成大部分编码,但是当它遇到困难时,它需要澄清给定的需求,或者需要代码审查,它会向你寻求帮助,GPT Pilot 大约可以完成 90%的开发工作,剩下 10%需要开发人员和参与完成。


人工智能可以像初级开发人员吗?或。。。


我经常看到基于 CodeGen GPT-4 的工具说他们正在构建一个 AI 初级开发人员。不知何故,我一直对此有疑问,因为当我使用 ChatGPT 进行编码时,它给了我只有超级资深人士才能给出的答案和想法——这是绝对没有初级开发人员能够掌握的。尽管如此,没有一个 LLM 可以像高级开发人员那样构建应用程序,但 GPT-4 对编码的了解远远超出了任何初级开发人员。我想说的是,GPT-4 对软件开发的每个部分都有很多了解,就像它是世界上最资深的开发人员一样,但拥有金鱼的记忆力。我把它想象成一个超人的机器人,它只是站在房间中间,一次只能做一个小动作,但它不能组合许多动作并重复工作。你必须确切地告诉它下一步应该做什么。这就是我们对 GPT Pilot 所追求的——我们希望为 LLM 创建一个思维框架,让超人机器人通过修改它以前的动作来持续工作,有一个反馈循环,并确定它下一步应该做什么,以完成最终目标,即构建一个生产就绪的应用程序。


GPT Pilot 工作原理

GPT Pilot 是如何工作的?

GPT PILOT :第一个真正的 AI 程序员

首先,输入要构建的应用的描述。然后,GPT Pilot 与 LLM(目前为 GPT-4)一起工作以阐明应用程序要求,最后,它编写代码。它使用许多模仿开发机构工作流程的 AI 代理。

  1. 描述应用后,产品负责人代理会分解业务规范,并询问你一些问题,以清除任何不清楚的区域。

  2. 然后,Software Architect Agent 分解了技术要求,并列出了将用于构建应用程序的技术。

  3. 然后,DevOps 代理根据体系结构在计算机上设置环境。

  4. 然后,技术团队首席代理将应用程序开发过程分解为开发任务,每个任务需要具备:

  • 任务说明(这是开发人员代理稍后将根据其创建代码的主要说明)

  •  需要编写的自动化测试的描述,以便 GPT Pilot 可以遵循 TDD 原则

  •  人工验证的描述,这基本上是您(人类开发人员)检查任务是否成功实现的方式

  • 最后,开发人员和 Code Monkey 代理一个接一个地完成任务并开始对应用程序进行编码。开发人员将每个任务分解为更小的步骤,这些步骤是较低级别的技术要求,可能不需要人工审查或通过自动化测试(例如安装一些软件包)进行测试。

  • GPT Pilot 重要支柱


    1. 需要一个人来监督人工智能,这不仅是因为人工智能不够好,还因为你可能想改变某件事在实施后的工作方式或外观。对于开发人员或产品经理来说,一旦他们看到实现的样子,就会决定改变它,这是很常见的。或者,您意识到边缘情况比您最初预期的要多,并认为重构当前的实现比解决每个问题更容易。问题是当你完成整个应用程序然后尝试重构时——这时它变得更加困难,因为每个更改都会影响所有其他功能。另一方面,如果在提交更改之前进行重构,则可以在编写良好的代码之上继续执行下一个功能。这就是为什么对于 AI 开发人员来说,每当执行任务时,让人类参与其中至关重要。这样,人类可以在 GPT Pilot 继续执行下一个任务之前审查每个任务的实现情况(就像合并 PR 之前的代码审查一样)。如果人类告诉 GPT Pilot 出了什么问题,那么解决任务本身的问题就会容易得多。同时,LLM 具有任务中需要完成的工作以及到目前为止已完成的工作的背景。

    2. 人工智能可以迭代自己的错误。我有一种感觉,很多人根据你第一次要求它编写代码时它的交付能力来判断 ChatGPT 编写代码的能力。如果它不能产生工作代码,许多人会认为它并不令人印象深刻。在现实中,人类几乎不会在第一次尝试时编写工作代码。相反,您编写代码,运行它,查看错误,然后迭代。这正是 GPT Pilot 使 GPT-4 能够做的事情——在编写代码后,GPT Pilot 可以运行代码、获取输出,并询问 LLM 输出是否正确、是否应该修复某些东西,如果是,如何修复。

    3. 软件开发可以编排。在构建应用程序时,所有开发人员都会经历许多重复的例程。其中一个例程可以是 – 编写代码、运行代码、读取错误、更改代码、重新运行代码等。另一个更高层次的可以是 – 接受任务,实现它,测试实现(重复直到所有测试都通过),将其发送以供审查,修复问题(重复直到审查者批准)和部署。如果我们有一个聪明的决策者(如 LLM),那么这些例程中的许多都是可以编排的。

    4. 编码过程不是一条直线。当我们创建 GPT Pilot 的第一个版本时,我们认为它需要迭代任务、实现代码、修复它并继续前进。实际上,在编写应用程序代码时,您不会不断进步 – 您一直在重写代码。有时,你会重构代码库,因为在初始实现之后,你意识到有一种更好的方法来实现某些东西。其他时候,您这样做是因为需求的变化。就像我在 #1 中提到的,在你看到一个解决方案不起作用后,你有时需要回滚一堆更改,考虑问题的替代解决方案,并尝试以这种方式解决它。为了让 GPT Pilot 或任何其他 AI 开发人员大规模工作,它需要有一种机制,使其能够返回、选择替代路径并重新实现任务。


    从 GPT Pilot 项目得到的经验

    我们学到了什么?

    GPT PILOT :第一个真正的 AI 程序员

    一般来说,LLM 是一项每个人都在试图理解的新技术——它是如何工作的,什么可以做得更好,如何进行适当的提示工程等。 我们的方法是专注于构建应用层,而不是让 LLM 输出更好的结果。理由是 LLM 会变得更好,如果我们花数周时间优化提示,它可能会用新版本的 GPT 完全解决。相反,我们关注的是用户体验应该是什么样子,以及需要哪些机制来控制 LLM 以使其能够持续工作,越来越接近最终解决方案。因此,以下是我们迄今为止的经验教训:

    1. 该应用程序的初始描述比我们想象的要重要得多。我们最初的想法是,在人类的输入下,GPT Pilot 将能够朝着正确的方向导航,并越来越接近工作解决方案,即使最初的描述是模糊的。然而,GPT Pilot 的思维在整个提示中分支,从最初的描述开始。这样一来,如果初始提示中的某些内容具有误导性,那么 GPT Pilot 拥有的所有其他信息都将指向错误的方向。所以,当你纠正它时,它会深深地陷入这种错误的方式,以至于几乎不可能让它走上正确的道路。现在,当我写这篇文章时,这似乎很明显,但这是我们需要学习的东西——更多地关注最初的描述。因此,我们构建了一个名为“Spec Writer”的新代理,它与您一起在开始编码之前分解项目需求。

    2. 编码不是一条直线。正如我在上面的支柱部分提到的,重构一直在发生,GPT Pilot 也必须这样做。我们还没有为此实现解决方案,但它可能会通过添加 GPT Pilot 在其决策树周围创建标记的能力来工作,这样每当某些事情不起作用时,它就可以查看标记并思考它可能在哪里犯了错误转弯。

    3. 代理可以自行审查。我的想法是,如果一个代理审查了另一个代理所做的事情,那将是多余的,因为它是同一个 LLM 重新处理相同的信息。但事实证明,当一个代理审查另一个代理的工作时,它的效果非常好。我们有 2 个不同的“审阅者”代理来审查代码的实现方式。一个在高层次上执行此操作,例如整个任务是如何实现的,另一个在对文件进行更改之前对其进行审查(例如执行 git add -p)。

    4. LLM 在单个提示中可以专注于一个问题而不是多个问题时效果最好。例如,如果您告诉 GPT Pilot 在单个描述中进行 2 个不同的更改,它将很难同时关注这两个更改。因此,我们将每个人工输入拆分为多个部分,以防输入包含多个不同的请求。

    5. 详细日志会有所帮助。这在现在非常明显,但最初,我们并没有告诉 GPT-4 在代码周围添加任何日志。现在,它创建具有详细日志记录的代码,因此当您运行应用程序并遇到错误时,GPT-4 在看到已写入哪些日志以及这些日志在代码中的位置时,将更容易进行调试。

    6. 将代码库拆分为更小的文件有很大帮助。这也是一个显而易见的结论,但我们必须学习它。如果将代码拆分为许多文件而不是几个大文件,GPT-4 实现功能和修复错误要容易得多。就像我们人类认为的那样,处理较小的代码块比处理大块代码要容易得多。我们通过创建抽象层次(函数、类等)来做到这一点。让 LLM 创建更易于管理的抽象的最简单方法之一就是告诉它创建更多的模块化代码并将其拆分为更多文件。它运行得非常好,最终结果对我们开发人员来说也更好。

    7. 为了让人类能够修复代码,他们需要清楚地显示任务中编写的内容及其背后的想法。GPT Pilot 的目标是完成 90% 的编码任务,并将另外 10% 留给人类。这 10% 通常包括 LLM 难以注意到的修复或小更改,但对于人类来说,这可能是一个简单的更改。然而,问题在于,要告诉人类哪些代码不起作用以及他们应该查看哪些代码并不容易。如果 GPT Pilot 编写了 3,000 行代码,那么人类开发人员如果想帮助 GPT Pilot,就需要在深入研究实际代码之前了解整个代码库。在 GPT Pilot 的未来版本中,人类开发人员将详细解释当前任务中添加了哪些代码及其背后的原因。这样,您将能够帮助 GPT Pilot。

    8. 人类是懒惰的。LLM 最好向人类提问,而不是让人类思考所有可能的错误。同样,回顾过去是非常明显的,但我们注意到的一件事是,人们更愿意回答 GPT Pilot 问他们的问题,而不是有一个开放式的输入字段,他们可以在那里编写不受约束的反馈。

    9. 很难让法学硕士跳出框框思考。这对我来说是最大的收获之一。我认为你可以通过给 GPT-4 几个它已经用来解决问题的解决方案来提示它,并告诉它想出另一个解决方案。然而,这并不像听起来那么容易。我们最终做的是要求 LLM 列出它能想到的所有可能的解决方案,并将它们保存到内存中。当我们需要尝试其他方法时,我们拉出替代解决方案,并告诉它尝试一个不同但具体的解决方案。


    使用 GPT Pilot 创建的应用程序

    GPT PILOT :第一个真正的 AI 程序员

    目前,现在可以使用 GPT Pilot 创建简单但重要的应用程序。已经有很多的人使用 GPT Pilot 创建了非常令人印象深刻的应用程序,例如可以微调 ResNet 模型以计算棕榈树的应用程序,然后在您上传图像时计算其中的树木。以下是我们创建的几个应用程序,以及代码、统计信息和演示:


    SQLlit 数据库分析工具  演示 Demo

    仓库地址:https://github.com/Pythagora-io/gpt-pilot-db-analysis-tool

    花费时间:两天

    功能简介:读取并上传 SQLite 数据库,按特定字段拆分行,将行解压缩为值,将 LLM 对话数据加载到表单中,并允许更改其中一条消息并将 LLM 请求提交给 GPT-4 以查看结果的格式


    代码审查 APP 演示视频

    仓库地址:https://github.com/Pythagora-io/code-whisperer

    花费时间:7 个小时

    功能简介:用它来向 LLM 询问有关代码库的问题。粘贴到公共 Github 存储库的链接。然后,它克隆存储库,将相关文件发送到 LLM 进行分析,LLM 为每个文件创建有关代码功能的描述,并将这些描述保存到数据库中。之后,可以向应用询问有关代码库的问题,代码库会向您显示分析的结果。

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



    © 版权声明

    ☆ END ☆
    喜欢就点个赞吧
    点赞0 分享
    图片正在生成中,请稍后...