代码与对话:一探AI聊天机器人的编程实力

194 阅读12分钟

本文提供了详细的提示和测试,您可以在您最喜欢的 AI 聊天机器人上重复这些提示和测试,看看它是否可以可靠地帮助您编程。*

image.png

大卫·格维茨/ZDNET

自2022 年ChatGPT和生成式人工智能(AI) 引起公众关注以来,我一直在探索人工智能聊天机器人编写代码的能力。起初,这项技术是一种新奇事物,就像鼓励小狗表演新技巧一样。

但自从看到人工智能聊天机器人可以成为有效的生产力工具和编程伙伴以来,我一直在对这些工具进行更深入的测试。随着时间的推移,我编制了一组四项真实测试,我们用它们来评估主要人工智能大型语言模型 (LLM) 的性能。

本文旨在成为一份动态文档,您可以在其中查看我的测试,甚至可以复制它们来运行您自己的测试。我将继续我的一系列个人测试,以及描述其性能的文章。但现在,您可以在家里(或任何有良好互联网连接的地方)深入研究并试用。

我如何改进我的 AI 编码测试套件

评估性能以查看人工智能是否满足任意规格或要求与测试技术以查看它是否可以帮助您完成日常编程任务之间存在差异。

最初,我尝试了前者。我运行了一个提示来生成经典的“hello, world”输出,其中包含一些时间和日期计算。以下是该提示:

使用 [语言名称] 编写一个程序,根据俄勒冈州的当前时间输出“早上好”、“下午好”或“晚上好”,然后输出十行包含循环索引(从 1 开始)、一个空格,然后是单词“Hello, world!”。

要运行提示,请将 [语言名称] 替换为您想要测试的任何语言。我在 ChatGPT 中测试了提示,指定了 22 种编程语言。您可以在此处查看结果:

 

这是一个有趣的测试,特别是当我在其中运行了越来越多晦涩难懂的语言和环境时。如果你想要比任何人都有权利拥有的更多乐趣,请将 [语言名称] 替换为“莎士比亚”。是的,有一种名为 SPL(莎士比亚编程语言)的新语言,其源代码以莎士比亚戏剧的形式出现。它的执行效果并不好,但现在你知道当我们想开开心心地聚会时语言设计师会做什么了。

你们可以看到我花了数周时间才弄清楚这个问题。然而,重要的问题是人工智能是否可以帮助完成现实世界的编程任务。

我利用自己每天的实际编程工作来支持测试。例如,在 ChatGPT 成为公共工具后不久,我的妻子要求提供一项自定义 WordPress 功能来帮助她完成工作项目。我决定看看 ChatGPT 能否实现这一点。[令我震惊的是,它确实做到了]

其他时候,我让 ChatGPT 重写代码段,调试让我困惑的编码错误,并使用脚本工具编写代码。这些都是我在实际工作中必须解决的问题。

由于现存的编程语言种类繁多,我决定不花太多心思去选择测试语言。相反,我选择了工作中使用的语言,因为这种方法可以让我们更多地了解人工智能作为现实世界助手的表现。生产力测试使用 PHP、JavaScript 以及少量 CSS 和 HTML。

我对编程框架使用了相同的方法。由于我的大部分工作都是在 WordPress 中完成的,所以我使用的是这个框架。一些测试有助于确定 AI 对 WordPress API 独特方面的了解程度。

我最近编写了一些 Mac 脚本,因此我使用 AppleScript 和 Chrome API 创建了一个测试。如果我添加其他测试,我会将它们包含在本文中。

接下来我们来谈谈每个测试。一共有四个。

测试 1:编写 WordPress 插件

这测试了 AI 是否可以编写整个 WordPress 插件,包括用户界面代码。如果 AI 聊天机器人通过了这项测试,它就可以作为 Web 开发人员的助手帮助创建基本代码。我最初在文章“我让 ChatGPT 编写我需要的 WordPress 插件。它在不到 5 分钟的时间内就完成了”中记录了这项测试。

现实需求:  我的妻子经营着一个 WordPress 电子商务网站,并为她的客户管理一个繁忙的 Facebook 群组。每个月,她都会使用她在网上找到的一个网站随机生成一个名字列表,但提取列表非常麻烦。由于她的一些参与者有权获得多个条目,而一些参与者则有很多条目,因此她希望这些名字分散在列表中。

为了解决这个问题,她让我创建一个 WordPress 插件,以便直接从她的仪表板访问。开发一个具有必要 UI 和逻辑的基本插件可能需要几天时间,而我的日程安排很紧凑。所以我求助于人工智能。

在发现 ChatGPT 可以创建一个满足她需求的优秀小型 WordPress 插件(她仍在使用它)后,我认为这将对 AI 进行一次很好的测试。

测试数据: 使用以下提示作为单个请求:

编写一个与 PHP 8 兼容的 WordPress 插件,提供一个新的管理菜单和管理界面,并满足以下要求:

提供一个文本输入字段,可以将行列表粘贴到其中。按下按钮时,列表中的行将随机化,并将结果显示在第二个文本输入字段中,其中没有空行。

确保没有两个相同的条目相邻(除非没有其他选择)。确保提交的行数和结果中的行数彼此相同。

在第一个字段下,显示文本“要随机化的行:”以及源字段中的非空行数。在第二个字段下,显示文本“已随机化的行:”以及目标字段中的非空行数。

插件完成后,使用以下名称作为测试数据(William Hernandez 和 Abigail Williams 有重复):

索菲亚·戴维斯

夏洛特·史密斯

麦迪逊加西亚

伊莎贝拉·戴维斯

阿比盖尔·威廉姆斯

米娅·加西亚

伊莎贝拉·琼斯

亚历山大·冈萨雷斯

奥利维亚·冈萨雷斯

艾玛·杰克逊

伊桑·杰克逊

索菲亚·约翰逊

阿比盖尔·威廉姆斯

利亚姆·杰克逊

诺亚·洛佩兹

奥利维亚·杰克逊

艾娃·马丁

本杰明·约翰逊

亚历山大·杰克逊

亚历山大·洛佩兹

夏洛特罗德里格斯

奥利维亚罗德里格斯

伊桑·马丁

诺亚·托马斯

伊莎贝拉·安德森

阿比盖尔·威廉姆斯

迈克尔·威廉姆斯

威廉·埃尔南德斯

阿比盖尔·米勒

艾玛·戴维斯

索菲亚·马丁内斯

威廉·埃尔南德斯

在结果中要查找的内容: 期望有一个可以粘贴到新 .php 文件中的文本块。该块应包含所有适当的标头和 UI 信息。此代码不需要关联的 JavaScript 文件。

一旦插件安装在你的 WordPress 安装中,你应该获得一个仪表板菜单和一个类似于此的用户界面:

image.png 截图来自 David Gewirtz/ZDNET

将姓名粘贴到第一个字段中,单击随机按钮,然后在第二个字段中查找结果。确保 William Hernandez 和 Abigail Williams 的多个条目分布在列表中。

测试 2:重写字符串函数

此测试评估AI 聊天机器人如何更新实用函数以实现更好的功能。我最初将此测试记录在“好吧,ChatGPT 刚刚调试了我的代码。真的”。

实际需求:  我有一个验证例程,用于检查货币金额是否有效。但是,用户的错误报告指出,它只允许整数(因此,是 5,而不是 5.02)。

我无需花费一到四个小时的时间重写代码,而是让人工智能来做这件事。

测试数据: 使用以下提示作为单个请求:

请重写以下代码,将其从仅允许整数更改为允许美元和美分(换句话说,小数点和小数点后最多两位数字)。

str = str.replace (/^0+/, "") || "0";

var n = Math.floor(Number(str));

返回 n !== Infinity && String(n) === str && n >= 0;

在结果中要寻找什么: 针对几种可能的故障情况测试代码。为代码提供一个字母数字值,看看它是否失败。

看看代码如何处理前面的零。看看它如何处理超过两位数的美分输入。看看代码如何处理小数点后一位数。

看看它是否可以处理小数点左边的五位或六位数字。

测试 3:找到一个令人讨厌的错误

此测试需要对 WordPress 有深入的了解,因为显而易见的答案是错误的。如果 AI 聊天机器人能够正确回答此测试,那么它的知识库就相当完整,即使使用 WordPress 这样的框架也是如此。我最初将此测试记录在“好的,ChatGPT 刚刚调试了我的代码。真的”。

实际需求: 我当时正在为一款后来出售的产品编写新代码。我有一个函数,它接受两个参数,还有一个调用语句,它将两个参数发送到我的代码中。

问题是我一直收到错误消息。

消息的突出部分是,它在某一处显示“已通过 1 次”,而在另一处显示“预计正好 2 次”。我查看了调用语句和函数定义,发现两处都有两个参数。这让我抓狂了好一阵子,所以我向 ChatGPT 寻求帮助。

我向它展示了执行调用的代码行、函数本身和处理程序,这是一小段代码,用于从主程序中的钩子中调度被调用的函数。

测试数据: 使用以下提示作为单个请求:

我正在使用此函数来处理 WordPress 过滤器:

$transaction_form_data = apply_filters('sd_update',

交易表单数据,交易表单数据,捐赠编号);

它由

添加过滤器('sd_update','sd_aan_update',10,1);

它调用的函数是:

函数 sd_aan_update (donationdata,donation_data, donation_id) {

// 这将处理表单数据

// 交易从网关返回

如果(设置($donation_data['ADD_A_NOTE'])){

update_post_meta($donation_id,

'_dgx_donate_aan_note',

$donation_data [ '添加注释']);

}

返回$donation_data:

}

(!) ArgumentCountError: 函数 sd_aan_update() 的参数太少,在 /Users/david/Documents/Development/local-sites/sd/app/public/w-includes/class-wp-hook.php 第 310 行传递了 1 个参数,而在 /Users/david/Documents/Development/local-sites/sd/app/public/wp-content/plugins/sd-add-a-note/sd-add-a-note.php 第 233 行应恰好传递 2 个参数

在结果中要寻找什么: 显而易见的答案并不是正确答案。实际上,add_filter 函数没有正确的参数。在我的代码中,add_filter 函数为第四个参数指定了值 1(这意味着 filter 函数将只接收一个参数)。事实上,它需要两个参数。

为了解决这个问题,AI应该建议将add_filter函数的第四个参数改为2,这样它才能正确地注册带有两个参数的过滤函数。

我测试过的大多数 AI 都忽略了这个问题。他们认为调用函数中的另一个参数需要更新。因此,这是一个棘手的问题,需要 AI 知道 WordPress 框架中的 add_filter 函数是如何工作的。

测试 4:编写脚本

该测试要求 AI 聊天机器人使用大多数用户都不知道的两个相当专业的编程工具进行编程。它本质上测试了 AI 聊天机器人除了主要语言之外的知识。我最初在“ [Google 推出 Gemini Code Assist,我谨慎乐观地认为它将帮助程序员]”中记录了这项测试。

现实需求: 我想为我的 Mac 构建一个自动化程序,这样可以节省大量点击和按键。我使用一款名为[Keyboard Maestro 的]工具在我的 Mac 上执行大量自动化操作(可以将其视为增强版的快捷方式)。Keyboard Maestro 是一款相当不为人知的程序,由一位澳大利亚程序员编写。

在这种情况下,我希望我的例程查看打开的 Chrome 标签,并将当前活动的 Chrome 标签设置为例程中传递的标签。要完成此任务,Keyboard Maestro 还必须执行一些 AppleScript 代码来与 Chrome 的 API 交互。

我再次要求 ChatGPT 编写此代码,以节省几个小时的 AppleScript 编写时间和查找如何访问 Chrome 数据的时间。

测试数据: 使用以下提示作为单个请求:

编写一个 Keyboard Maestro AppleScript,扫描最前面的 Google Chrome 窗口,查找包含与传递的变量 instance__ChannelName 的内容匹配的字符串的选项卡名称。忽略匹配的大小写。找到后,将该选项卡设为活动选项卡。

在结果中寻找什么: 这是一个很好的 AI 测试,因为它测试了一个相当不为人知的编程工具(Keyboard Maestro)、AppleScript 和 Chrome API,以及这三种技术如何相互作用。

首先,看看生成的 AppleScript 是否从 Keyboard Maestro 获取频道名称变量,它应该看起来像这样:

告诉应用程序“键盘大师引擎”

    将 channelName 设置为获取变量“instance__ChannelName”

结束告诉

AppleScript 的其余部分应包含在一个块中。它需要忽略大小写,因此要么寻找大小写替换,要么使用“contains”,这在 AppleScript 中是大小写无关的:

告诉应用程序“Google Chrome”

你们可以在家尝试一下

您可以随意进行这些测试,并将其插入您选择的 AI。看看结果如何。使用这些测试以及您可能自己开发的其他测试,可以帮助您了解您可以信任 AI 生成的代码的程度。

【智答专家】您身边免费的GPT4.0人工智能Ai助手,免翻!!!无套路!国内直连,支持文本生成、问答、多语言支持、个性化建议、图片生成、代码纠正等等。 t.aizdzj.com/?p=MTAwNzE2…