ChatGPT 能代替程序员吗?ChatGPT 知道哪些编程语言?我们回答这些问题以及您的其他生成式 AI 编码问题。
关于ChatGPT的一个更有趣的发现是它可以编写非常好的代码。上个月,当我要求它编写一个我妻子可以在她的网站上使用的WordPress 插件时,我对此进行了测试。它做得很好,但这是一个非常简单的项目。
作为日常编码实践的一部分,您如何使用 ChatGPT 编写代码?这就是我们要在这里探索的内容。
ChatGPT 可以擅长哪些类型的编码?
关于 ChatGPT 和编码有两个重要事实。首先是它实际上可以编写有用的代码。第二个是它可能会完全迷路,掉进兔子洞,追逐自己的尾巴,产生绝对无法使用的垃圾。
我发现这很困难。完成 WordPress 插件后,我决定看看 ChatGPT 能走多远。我为 Mac 应用程序写了一个非常仔细的提示,包括用户界面元素、交互、设置中将提供的内容、它们的工作方式等的详细描述。然后我将它提供给 ChatGPT。
ChatGPT 仅以大量文本和代码作为回应。然后它在代码中间停止了。当我要求它继续时,它吐出了更多的代码和文本。我在继续之后请求继续,它转储了越来越多的代码。但是……没有一个是可用的。它没有确定代码应该去哪里,如何构建项目,而且——当我仔细查看生成的代码时——它遗漏了我要求的主要操作,只留下简单的文本描述,说明“程序逻辑在这里。 “
经过一系列反复测试,我清楚地知道,如果您要求 ChatGPT 交付完整的应用程序,它会失败。这种观察的必然结果是,如果你对编码一无所知并希望 ChatGPT 为你构建一些东西,它就会失败。
ChatGPT 成功并做得很好的地方在于帮助已经知道如何编写代码的人构建特定的例程并完成特定的任务。不要要求在菜单栏上运行的应用程序。但是如果你向ChatGPT要一个例程在菜单栏上放一个菜单,然后把它粘贴到你的项目中,它会很顺利。
使用 ChatGPT 演示技术、编写小算法和编写子程序。你甚至可以让 ChatGPT 帮助你将一个更大的项目分解成块,然后你可以请求它帮助你对这些块进行编码。
因此,考虑到这一点,让我们看一下如何使用 ChatGPT 编写代码的一些具体步骤。
1. 缩小并提高你的要求
第一步是您决定要向 ChatGPT 提出什么要求——但还没有提出任何要求。确定您希望您的函数或例程执行什么,或者您希望了解哪些内容并入您的代码。确定要传递到代码中的参数以及要输出的参数。然后看看你将如何描述它。
想象一下,您正在付钱给人类程序员来做这件事。你是否给了那个人足够的信息来完成你的任务?还是你太含糊了,而你付钱的人更有可能提出问题或提供与你想要的完全无关的东西?
这是一个例子。假设我希望能够总结任何网页。我想向它提供类似于本文的内容,并返回经过深思熟虑且适当的简短摘要。作为我的输入,我将指定一个网页 URL。作为我的输出,它是一段带有摘要的文本。
2. 使用 ChatGPT 探索图书馆和资源
继续上面的示例,一种非常古老的提取网页数据的方法是只查找 HTML 段落标记之间的文本。
但随着人工智能工具的兴起,使用人工智能库来做智能提取和总结更有意义。ChatGPT 擅长的地方之一(这也是一个您可以轻松验证以避免其权威但错误的行为模式的领域)是查找库和资源。OpenAI(ChatGPT 的制造商)出售对 GPT-3 和GPT-4引擎的 API 访问,这些引擎将完全按照我们的要求行事。但在这个例子中,假设我们不想支付交易费用。
因此,让我们看一下与 ChatGPT 的交互,以弄清楚如何在一个以 PHP 运行的项目中免费使用这样的工具。
我从一个提示开始,该提示旨在引出有关哪些库将提供我想要的功能的信息。库(对于那些不是程序员的阅读者来说)是程序员可以访问的代码体,它为特定目的做了很多繁重的工作。现代编程的很大一部分是寻找和选择正确的库。所以这是一个很好的起点。
在这种情况下,我正在查看其他人编写的用于总结文本的代码块。这是我的第一个提示:
描述十个不同的开源 AI 库(以及它们使用的语言),我可以使用它们来生成任何网页主要核心内容的摘要,忽略任何广告或嵌入材料。
这正是我想要的,包括提及 OpenAI 的产品。我认为 OpenAI 在这里会做得很好,但对于这个假设的项目,不想为 API 费用做预算。所以我会缩小问题范围。
这些都是免费的吗?
ChatGPT 用它的答案对冲了它的赌注。它是这样说的:“是的,这十个人工智能库都是开源的,可以免费使用。但是,其中一些可能有使用限制,或者需要付费才能访问其他功能或资源。” 因此,基于此,我澄清了我的查询。
以下哪些图书馆没有使用限制,不需要任何额外的付款或许可
请注意这是一次非常多的对话。我不必重新提出最初的问题。如果我手头有专家并正在寻求澄清,我只是以同样的方式进行深入研究。在这种情况下,ChatGPT 给了我八个库选择,但没有一个提到我打算编写代码的 PHP 语言。因此,这是下一个提示:
在这 8 个库中,我可以将其中任何一个与 PHP 一起使用吗?
它返回了三个库,但我不确定每个库做了什么。那么另一个问题:
Sumy、Gensim 和 NLTK 之间有什么区别?
我还是不确定,所以我明确了我的使用计划,然后问:
如果我想创建网页新闻文章的摘要,哪个库会更好?
我得到的答案明确而有希望:“Sumy 是专门为文本摘要设计的,它的任务是创建一个摘要,从一段文本中捕获最重要的信息。” 所以,现在是时候看看将它与 PHP 一起使用会涉及什么了。我问了项目这一部分的最后一个问题:
你能解释一下如何在 PHP 中使用 Sumy 吗?
请随意在您的计算机上进行操作,并将这些提示粘贴到您的 ChatGPT 实例中。请注意,在第 1 步中,我决定了要在哪个程序模块上获得帮助。然后,在这一步中,我与 ChatGPT 进行了对话,以决定使用什么库以及如何将其集成到我的项目中。
这可能看起来不像编程,但我向你保证它是。编程不仅仅是将代码行爆破到页面上。编程正在弄清楚如何将所有不同的资源和系统集成在一起,以及如何与解决方案的所有不同组件进行对话。在这里,ChatGPT 帮助我进行了集成分析。接下来是编码。
3.请ChatGPT编写示例代码
好的,让我们在这里画上句号。本文标题为《如何使用ChatGPT写代码》。它会,但我们真的要求 ChatGPT 编写示例代码。等待。什么?
让我们说清楚。除非您正在编写一个非常小的函数(例如ChatGPT 为我妻子编写的行排序器/随机化器),否则 ChatGPT 将无法编写您的最终代码。首先,你将不得不维护它。ChatGPT 不擅长修改已经编写的代码。可怕的是,它没有这样做。因此,要获得新代码,您必须要求 ChatGPT 生成新代码。正如我之前发现的,即使您的提示几乎完全相同,ChatGPT 也可能会以非常出乎意料的方式改变它为您提供的内容。
因此,底线是:ChatGPT 无法维护您的代码,甚至无法对其进行调整。
这意味着你必须自己做。众所周知,一段代码的初稿很少是最终代码。因此,即使您期望 ChatGPT 生成最终代码,它也确实是一个起点,您需要将其完成、将其集成到更大的项目中、对其进行测试、优化、调试等等.
但这并不意味着示例代码毫无价值。离得很远。看一下我根据前面描述的项目写的一个提示。这是第一部分:
我告诉 ChatGPT 它应该使用的编程语言。我还告诉它输入,但在这样做的同时,我提供了两个站点作为示例,以帮助 ChatGPT 理解文章的风格。老实说,我不确定 ChatGPT 是否忽略了这一点指导。接下来,我将告诉它如何完成大部分工作:
这与我指导员工的方式非常相似。我希望那个人知道他们不仅限于 Sumy。如果他们需要其他工具,我希望他们使用它。我还指定了一个大概的字数来为我想要的摘要创建界限。该例程的更高版本可能将该数字作为参数。然后我最后说出了我想要的结果:
生成的代码非常简单。ChatGPT 确实调用了另一个库 (Goose) 来检索文章内容。然后它以 50 个字的限制将其传递给 Summy,然后返回结果。就是这样。但是一旦编写了基础知识,返回并添加调整、自定义传递给两个库的内容并交付结果就只是编程的事情了。
一个有趣的注意点。ChatGPT 使用 2021 年之后(当 ChatGPT 的数据集结束时)的 URL 创建了对其编写的例程的示例调用。
我根据路透社网站和 Wayback Machine 检查了该 URL,但它不存在。ChatGPT 刚刚弥补了这一点。
常问问题
ChatGPT 会取代程序员吗?
现在不行,至少现在不行。ChatGPT 程序的水平相当于一名才华横溢的一年级编程学生,但它很懒惰(就像那个一年级学生一样)。它可能会减少对入门级程序员的需求,但就目前的水平而言,我认为它只会让入门级程序员(甚至经验更多的程序员)编写代码和查找信息的生活变得更加轻松。它绝对可以节省时间,但它可以独立完成的编程项目很少——至少现在是这样。2030年?谁知道。
如何在 ChatGPT 中获得编码答案?
就问吧。您在上面看到了我如何使用交互式讨论对话框来缩小我想要的答案的范围。当您使用 ChatGPT 工作时,不要指望一个问题就能神奇地为您完成所有工作。但是使用 ChatGPT 作为帮助者和资源,它会给你很多非常有用的信息。当然,测试这些信息——因为,正如 OpenAI 的联合创始人约翰舒尔曼所说,“我们最关心的是真实性,因为模型喜欢捏造东西。”
ChatGPT 知道哪些编程语言?
他们中的大多数。我在尝试这个时非常偏离轨道。我测试了常见的现代语言,如 PHP、Python、Java、Kotlin、Swift、C# 等。但后来我让它用晦涩的黑暗时代语言编写代码,如 COBOL、Fortran、Forth、LISP、ALGOL、RPG(报告程序生成器,而不是角色扮演游戏),甚至 IBM/360 汇编语言。