如何使用 ChatGPT 编写代码 - 以及我最喜欢的调试其生成内容的技巧

enter image description here 人工智能可以编写有用的代码,但也可能产生无法使用的垃圾。以下是我在编码方面的经验,教你如何充分利用人工智能。

ChatGPT最有趣的发现之一是它可以编写相当不错的代码。我第一次测试它是在 2023 年,当时我要求它编写一个我妻子可以在她的网站上使用的 WordPress 插件。ChatGPT 做得很好,但这是一个简单的项目。

那么,如何使用 ChatGPT 编写代码作为日常编码练习的一部分?以下是简要总结 ChatGPT 可能会生成有用和无用的代码。为获得最佳效果,请提供清晰详细的提示。 ChatGPT 擅长协助完成特定的编码任务或例行工作,而不是从头开始构建完整的应用程序。 使用 ChatGPT 查找并选择适合特定目的的编码库,并进行互动讨论以缩小您的选择范围。 谨慎对待AI 生成的代码的所有者,并始终验证代码的可靠性。不要盲目相信生成的输出。 将与 ChatGPT 的互动视为对话。根据 AI 的回答细化您的问题,以更接近所需的输出。 现在,让我们更深入地探索 ChatGPT。

ChatGPT 可以很好地完成哪些类型的编码? 关于 ChatGPT 和编码有两个重要事实。首先,AI 可以编写有用的代码。

第二,人工智能可能会彻底迷失方向,掉进兔子洞,徒手追逐自己的尾巴,并产生无法使用的垃圾。

另外:2025 年最佳编码 AI(以及不该使用什么)

我经历了很多痛苦才发现这个事实。在我为妻子完成 WordPress 插件后,我决定看看 ChatGPT 能走多远。

我为 Mac 应用程序编写了一个非常仔细的提示,包括用户界面元素、交互、设置中提供的内容、它们的工作原理等的详细描述。然后,我将提示输入到 ChatGPT。

ChatGPT 用大量的文本和代码做出响应。然后,它在代码编写到一半时就停了下来。当我要求 AI 继续时,它吐出了更多的代码和文本。我一次又一次地要求继续,它输出的代码越来越多。然而,输出的结果都不可用。AI 没有确定代码应该放在哪里,如何构建项目,而且——当我仔细查看生成的代码时——它省略了我要求的主要操作,只留下了简单的文本描述,说明“程序逻辑放在这里”。

经过反复测试,很明显,如果你要求 ChatGPT 提供完整的应用程序,该工具将会失败。这一观察的必然结果是,如果你对编码一无所知,并希望 ChatGPT 构建一些东西,它将会失败。

ChatGPT 成功的地方在于——而且做得非常好——它帮助那些已经知道如何编写代码的人建立特定的例程并完成任务。不要要求在菜单栏上运行应用程序。但如果你要求 ChatGPT 提供一个例程将菜单放在菜单栏上,并将其粘贴到你的项目中,这个工具就会做得很好。 另外,请记住,虽然 ChatGPT似乎 拥有大量领域特定知识(并且通常如此),但它缺乏智慧。因此,该工具可能能够编写代码,但它无法编写包含需要丰富经验的特定或复杂问题的细微差别的代码。

使用 ChatGPT 演示技术、编写小型算法和生成子程序。您甚至可以让 ChatGPT 帮助您将较大的项目分解为多个部分,然后您可以要求它帮助您编写这些部分的代码。 因此,考虑到这一点,让我们看看 ChatGPT 如何帮助您编写代码的一些具体步骤。

如何使用 ChatGPT 编写代码 1. 缩小并完善你的请求 第一步是决定你要向 ChatGPT 询问什么——但不要问它任何问题。决定你想要你的函数或例程做什么,或者你想学习什么以融入你的代码。决定你要传递给代码的参数以及你想要得到什么。然后看看你要如何描述它。 想象一下,你付钱给一个人类程序员来完成这项任务。你是否给了那个人足够的信息来完成你的任务?或者你给的信息太模糊了,你付钱的人更有可能问问题或提交一些与你想要的完全无关的东西?

举个例子。假设我希望能够总结任何网页。我想将这篇文章输入给 AI,然后返回一个经过深思熟虑且合适的摘要。作为输入,我将指定一个网页 URL。作为输出,它是一段带有摘要的文本。

  1. 使用 ChatGPT 探索图书馆和资源 继续上面的例子,提取网页数据的一种传统方法是找到 HTML 段落标签之间的文本。

然而,随着人工智能工具的兴起,你可以使用人工智能库进行智能提取和总结。ChatGPT 擅长的领域之一(也是你可以轻松验证以避免其权威但错误的行为模式的领域)是寻找库和资源。

OpenAI(ChatGPT 的制造商)出售其 LLM 的 API 访问权限,以便我们完成我们想要的任务。但在这个例子中,我们假设我们不想支付交易费。

因此,让我们看看如何与 ChatGPT 进行交互,以了解如何在使用 PHP 运行的项目中免费使用这样的工具。

我首先提出一个提示,询问哪些库可以提供所需的功能。库(对于那些不是程序员的人来说)是程序员可以访问的代码体,它可以为特定目的完成大量繁重的工作。现代编程的很大一部分是寻找和选择正确的库,所以这是一个很好的起点。

在这种情况下,我正在查看其他人编写的用于总结文本的代码块。这是我的第一个提示:

描述十个不同的开源 AI 库(以及它们使用的语言),我可以使用它们来生成任何网页主要核心内容的摘要,而忽略任何广告或嵌入材料。

这个提示给了我我想要的东西,包括提到 OpenAI 的产品。我认为 OpenAI 在这方面会做得很好,但对于这个假设的项目,我不想为 API 费用做预算。所以,我会缩小问题范围:

这些有免费的吗?

ChatGPT 的回答是:“是的,这十个 AI 库都是开源的,可以免费使用。但是,其中一些库可能有使用限制,或者需要付费才能使用其他功能或资源。”因此,根据这个回答,我澄清了我的疑问:

以下哪些库没有使用限制并且不需要任何额外的付款或许可?

请注意,这非常像是一场对话。我不必重新问最初的问题。我只是像身边有专家一样深入研究。这次,ChatGPT 给了我八个库选项,但没有一个提到我计划用来编码的 PHP 语言。所以,这是下一个提示:

在这 8 个库中,我可以将其中任何一个与 PHP 一起使用吗?

它返回了三个库,但我不确定每个库的作用。所以,另一个问题:

Sumy、Gensim 和 NLTK 有什么区别?

我还是不确定,于是我明确了我的使用计划,然后询问: 如果我想创建网页新闻文章摘要,哪个库更合适?

答案很明确,也很有希望:“Sumy 是专门为文本摘要而设计的,摘要的任务是从一段文本中捕获最重要的信息。”所以,是时候看看使用 PHP 使用 Sumy 需要做些什么了。我问了最后一个关于这个项目部分的问题:

您能解释一下如何在 PHP 中使用 Sumy 吗?

您可以随意在计算机上操作,并将这些提示粘贴到 ChatGPT 中。请注意,在第一步中,我决定了要获取哪个程序模块的帮助。然后,在此步骤中,我与 ChatGPT 进行了对话,以决定使用哪个库以及如何将其集成到我的项目中。

这种方法可能看起来不像编程,但我向你保证它就是编程。编程不仅仅是将代码行写入页面。编程是弄清楚如何集成所有各种资源和系统,以及如何与解决方案的所有组件进行对话。在这里,ChatGPT 帮助我进行了集成分析。

顺便说一句,我很好奇谷歌的 Gemini AI是否能提供类似的帮助。与 ChatGPT 的响应相比,Gemini 确实在编程的规划方面提供了一些额外的见解。 因此,请毫不犹豫地使用多种工具来三角测量您的答案。故事如下:Gemini 与 ChatGPT:Gemini 能帮助您编码吗? 自从我写了那篇文章后,Google 为 Gemini 添加了一些编码功能,但它们并不是那么好。您可以在此处阅读有关该功能的信息:我测试了 Google Gemini 的新编码技能。结果并不好。最近,我深入研究了 Gemini Advanced。人工智能仍然没有通过许多测试。

接下来是编码。

  1. 让 ChatGPT 编写示例代码 好的,让我们在这里暂停一下。这篇文章的标题是“如何使用 ChatGPT 编写代码”。确实如此。但我们真正要做的是要求 ChatGPT 编写示例代码。

让我们明确一点。除非你正在编写一个小函数(比如ChatGPT 为我妻子编写的行排序器/随机器),否则 ChatGPT 无法编写你的最终代码。首先,你必须维护它。ChatGPT 不擅长修改已经编写的代码。糟糕,因为它不这样做。因此,要获得新代码,你必须要求 ChatGPT 生成一些新的东西。正如我之前发现的那样,即使你的提示几乎相同,ChatGPT 也可能会意外地更改它给你的内容。

因此,底线是:ChatGPT 无法维护您的代码,甚至无法对其进行调整。 这种限制意味着你必须自己做基础工作。众所周知,一段代码的初稿很少是最终代码。因此,即使你希望 ChatGPT 生成最终代码,它也只是一个起点,你需要将它完成,将它集成到更大的项目中,测试它、改进它、调试它等等。

但这个问题并不意味着示例代码毫无价值——远非如此。让我们看看我根据之前描述的项目编写的提示。以下是第一部分: 编写一个名为 summary_article 的 PHP 函数。

作为输入,summarize_article 将传递一个指向新闻相关网站(如 ZDNET.com 或 Reuters.com)上的文章的 URL。

我告诉 ChatGPT 它应该使用的编程语言。我还告诉人工智能输入的内容,并提供两个网站作为样本,以帮助 ChatGPT 理解文章风格。老实说,我不确定 ChatGPT 没有忽略这一点指导。接下来,我将告诉它如何完成大部分工作:

在 summary_article 中,检索所提供 URL 处的网页内容。使用 PHP 中的 Sumy 库和任何其他必要的库,提取文章主体,忽略任何广告或嵌入材料,并将其总结为大约 50 个字。确保摘要由完整的句子组成。如有必要,您可以超过 50 个字来完成最后一句话。

这种方法与我指导员工的方法非常相似。我希望那个人知道他们不仅限于 Sumy。如果他们需要另一种工具,我希望他们使用它。 我还指定了大概的字数,以便为我想要的摘要创建界限。该例程的后续版本可能会将该数字作为参数。然后我最后说出了我想要的结果:

处理完成后,编写代码summarize_article以便它以纯文本形式返回摘要。

生成的代码非常简单。ChatGPT 调用另一个库 (Goose) 来检索文章内容。然后,它将摘要传递给 Sumy,限制为 50 字,并返回结果。但是,一旦编写了基本内容,只需编程即可返回并添加调整,自定义传递给两个库的内容,并交付结果: enter image description here

值得注意的一个有趣点是,当我在 2023 年初首次尝试此测试时,ChatGPT 使用 2021 年之后的 URL 创建了对其编写的例程的样本调用。当时,即 2023 年 3 月,ChatGPT 的数据集仅到 2021 年。现在,ChatGPT 知识库延伸到 2024 年 6 月底,可以搜索网络。但我的观点是,ChatGPT 编造了一个它不可能知道的样本链接: https://www.reuters.com/business/retail-consumer/teslas-musk-says-fremont-california-factory-may-be-sold-chip-shortage-bites-2022-03-18/

我对照路透社网站和 Wayback Machine 检查了该 URL,发现它并不存在。切勿假设 ChatGPT 是准确的。务必仔细检查它提供的所有内容。

  1. 调试并完善生成的代码 我向你展示了 ChatGPT 犯错或产生幻觉的几种方式。所有程序员都会犯错,即使是人工智能程序员。

但您可以采取一些措施来帮助完善代码、调试问题并预测可能出现的错误。我最喜欢的新 AI 技巧是将代码提供给不同的 ChatGPT 会话(或完全不同的聊天机器人),然后询问“这段代码有什么问题?”

不可避免的是,总有事情发生。AI 有时会识别出应该添加到代码中的极端情况或错误检查,或者如果发生一系列不太可能发生的事件,可能会出现中断的情况。然后,我会针对这些错误情况进行编码,使代码更加健壮。 ChatGPT 会取代程序员吗? 现在还不行——或者至少现在还不行。ChatGPT 的编程水平与有天赋的一年级编程学生相当,但它很懒(就像那个一年级学生一样)。该工具可能会减少对入门级程序员的需求。

然而,就目前的水平而言,我认为人工智能将使入门级程序员(甚至是经验丰富的程序员)编写代码和查找信息变得更加容易。这可以节省时间,但人工智能无法独自完成许多编程任务——至少现在如此。到 2030 年呢?谁知道呢。

如何在 ChatGPT 中获取编码答案? 只需问它。您在上面看到了我如何使用交互式讨论对话框来缩小答案范围。不要指望一个问题就能神奇地完成您的所有工作。但是使用人工智能作为助手和资源,它会为您提供很多有用的信息。

当然,要对这些信息进行测试——因为正如 OpenAI 联合创始人约翰·舒尔曼所说:“我们最大的担忧是事实性,因为模型喜欢捏造东西。”

ChatGPT 生成的代码能保证没有错误吗? 当然不行!但你也不能相信人类程序员编写的代码。我当然不相信我编写的任何代码。代码在编写过程中存在大量缺陷。总是有 bug。在发布之前,你需要测试、测试、再测试。然后,对一些选定的受害者进行 alpha 测试。然后与更广泛的用户社区进行 beta 测试。

即使经过所有这些工作,也还是会有错误。仅仅因为人工智能玩了这种编码并不意味着它可以编写无错误的代码。不要相信。始终验证。而且你仍然不会得到完全无错误的输出。这就是宇宙的本质。

如果我收到的代码是错误的,我该怎么办? 我建议将聊天机器人视为一个不太合作的学生或下属员工。如果那个人给你的代码不起作用,你会怎么做?你会让他们回去,并指示他们再做一次,把事情做好。这就是你应该用 ChatGPT 做的事情(我已经用ChatGPT 4 和 4o测试过了)。当事情不起作用时,我会说:“那没用。请再试一次。

人工智能就是这样做的。它经常会给我返回同一问题的不同变体。我有时会重复这个过程四五次,直到得到一个可行的答案。但有时,人工智能会想不出主意。其他时候,重试答案完全(我的意思是完全)与你要求的无关。

当你发现人工智能在解决问题的能力已经达到极限时,你就必须自己动手编码了。但十有八九,尤其是面对基本的编码或界面编写挑战时,人工智能都能成功完成任务。 在询问 ChatGPT 时,我对编程问题的描述应该多详细? 详细。你留给解释的空间越大,人工智能就越会按照自己的方式行事。当我在编程时向 ChatGPT 发出提示来帮助我时,我会想象我正在为我的一个学生或为我工作的人分配一项编程任务。

我是否向该人提供了足够的细节来创建初稿,或者该人是否必须问我其他问题?更糟糕的是,这个人是否得到指导太少,以至于他们会完全走上错误的方向?不要偷懒。ChatGPT 可以为您节省数小时甚至数天的编程时间(对我来说确实如此),但前提是您一开始就给它有用的说明。

如果我使用 ChatGPT 编写代码,谁拥有它? 事实证明,目前还没有太多的案例可以回答这个问题。美国、加拿大和英国要求版权必须由人类创造,因此人工智能工具生成的代码可能不受版权保护。此外,根据训练代码的来源以及生成的代码的使用方式,还存在责任问题。

ZDNET 深入研究了这个问题,采访了法律专家,并发表了三篇文章。如果你担心这个问题(如果你正在使用 AI 来帮助编写代码,那么你应该担心),我建议你阅读它们: 我建议你阅读它们:

谁拥有代码?如果 ChatGPT 的 AI 帮助编写了你的​​应用程序,它还属于你吗? 如果您使用人工智能生成的代码,您的责任风险是什么? 一个棘手的问题:谁拥有人工智能生成的代码、图像和叙述? ChatGPT 可以识别哪些编程语言? 答案是大多数语言。 我测试了常见的现代语言,如 PHP、Python、Java、Kotlin、Swift、C# 等。但后来我让该工具用 晦涩难懂的黑暗时代语言编写代码,如COBOL、Fortran、Forth、LISP、ALGOL、RPG(报告程序生成器,而不是角色扮演游戏),甚至 IBM/360 汇编语言。

锦上添花的是,我给出了这个提示:

编写一个序列,在 PDP 8/e 的前面板上以闪烁的 ASCII 灯显示“Hello, world”

PDP 8/e 是我的第一台电脑,ChatGPT 告诉我如何使用前面板开关打开程序。我印象深刻,欣喜若狂,但又有点害怕。

ChatGPT 能帮助我完成数据分析和可视化任务吗? 是的,很多事情都可以不用代码完成。查看我关于这个主题的完整文章: 我意识到 ChatGPT Plus 改变了我的业务的那一刻。

我还写了一篇关于生成图表和表格的文章: 如何使用 ChatGPT 制作图表和表格。

但有趣的地方就在这里。在上面的文章中,我要求 ChatGPT Plus“制作一张按人口排名世界前五的城市的条形图”,结果它做到了。但你想要代码吗?试着问: 使用 Swift 制作按人口排名前五的城市的条形图。从网上获取人口数据。确保包含所有必要的库。

通过添加“在 Swift 中”,您可以指定编程语言。通过指定数据来源并强制 ChatGPT Plus 包含库,AI 会引入程序所需的其他资源。这就是为什么从根本上说,使用 AI 的帮助进行编程需要您了解编程知识。但如果您这样做了,那就很酷了,因为三句话就可以为您提供一段带注释的代码。不错吧?

ChatGPT 如何处理方言和实现之间的差异? 我们没有从 OpenAI 获得有关此问题的确切细节,但我们对 ChatGPT 训练方式的理解可以解释这个问题。请记住,编程语言的方言和实现(及其小怪癖)的变化比完整语言要快得多。这一现实使得 ChatGPT(以及许多编程专业人士)更难跟上步伐。

因此,我会根据以下两个假设进行工作:

方言变化越新,ChatGPT 知道的可能性就越小,并且 一种语言越流行,它学习的训练数据就越多,因此就越准确。 底线是什么?ChatGPT 可以成为一种有用的工具。只是不要赋予它超能力。至少现在还不要。

AI帮助新手快速入门,技术扫盲 AI帮助老手提升生产力

评论