AI聊天机器人在编程中的应用与测试

111次阅读
没有评论

共计 5411 个字符,预计需要花费 14 分钟才能阅读完成。

自 2022 年 ChatGPT生成式人工智能 (AI) 进入公众视野以来,我一直在探索 AI 聊天机器人编写代码的能力。起初,这项技术是一种新奇事物,类似于鼓励小狗表演新把戏。

但在看到 AI 聊天机器人如何成为有效的生产力工具和 编程伙伴 后,我开始对这些工具进行更深入的测试。随着时间的推移,我编制了一套四个现实世界的测试,用于评估主要 AI 大型语言模型(LLMs)的性能。到目前为止,我已经测试了 10 个 LLMs。你可以在本文中看到所有十个的综合结果:

本文旨在成为一个活文档,你可以看到我的测试甚至复制它们来运行你自己的测试。我将继续进行一系列单独的测试,并撰写描述它们性能的文章。但现在,你可以深入研究并在家里(或任何有良好互联网连接的地方)进行实践。

如果我更新或添加测试,我也会更新这篇文章,所以请随时回来查看。

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

评估性能以查看 AI 是否符合任意规格或要求与测试技术以查看它是否能帮助你在日常编程任务中有所不同。

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

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

要运行该提示,请将 <语言名称> 替换为你想要测试的语言。我在 ChatGPT 中测试了该提示,指定了 22 种编程语言。你可以在这里查看结果:

你还可以在这里看到更多内容:

这是一个有趣的测试,特别是当我通过更多晦涩的语言和环境运行它时。如果你想获得比任何人应有的乐趣更多,请将 <语言名称> 替换为“Shakespeare”。是的,有一种新奇的语言叫做 SPL(Shakespeare Programming Language),其源代码看起来像莎士比亚戏剧。它的执行效果并不太好,但现在是时候知道当我们想要尽情派对时,语言设计师会做什么了。

你可以看到我可能会在这个兔子洞里待上几周。然而,重要的问题是 AI 是否能帮助处理现实世界的编程任务。

我使用我的实际日常编程工作来推动测试

例如,在 ChatGPT 成为公共工具后不久,我的妻子要求一个定制的 WordPress 功能来帮助她的工作项目。我决定看看 ChatGPT 是否能构建它。令我震惊的是,它做到了

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

由于存在如此多的现有编程语言,我决定不让自己疯狂地选择要测试的语言。相反,我选择了我用于工作的语言,因为这种方法能更多地告诉我们 AI 作为现实世界助手的性能。生产力测试是用 PHP、JavaScript 以及一些 CSS 和 HTML 进行的。

我对编程框架采用了相同的方法

由于我大部分工作都在 WordPress 中进行,这就是我使用的框架。一些测试有助于确定 AI 对 WordPress API 独特方面的了解程度。

我最近做了一些 Mac 脚本,所以我创建了一个使用 AppleScript 和 Chrome API 的测试。如果我添加更多测试,我会在本文中包括它们。

接下来,让我们谈谈每个测试

有四个。

测试 1:编写一个 WordPress 插件

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

现实需求:我的妻子经营一个 WordPress 电子商务网站,并管理一个繁忙的 Facebook 群组为她的客户。每个月,她使用一个在线网站随机化名单,但提取名单很麻烦。由于她的某些参与者有权获得多个条目,而有些参与者有很多条目,她希望名字在名单中分散开来。

为了解决这个问题,她要求我创建一个 WordPress 插件,以便直接从她的仪表板轻松访问。开发一个具有必要 UI 和逻辑的基本插件可能需要几天时间,而我的日程安排很满。所以我转向了 AI。

在发现 ChatGPT 能够创建一个满足她需求的小巧 WordPress 插件(她仍在使用)后,我决定这个过程将成为 AI 的一个很好的测试。

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

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

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

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

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

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

Sophia Davis
Charlotte Smith
Madison Garcia
Isabella Davis
Abigail Williams
Mia Garcia
Isabella Jones
Alexander Gonzalez
Olivia Gonzalez
Emma Jackson
Ethan Jackson
Sophia Johnson
Abigail Williams
Liam Jackson
Noah Lopez
Olivia Jackson
Ava Martin
Benjamin Johnson
Alexander Jackson
Alexander Lopez
Charlotte Rodriguez
Olivia Rodriguez
Ethan Martin
Noah Thomas
Isabella Anderson
Abigail Williams
Michael Williams
William Hernandez
Abigail Miller
Emma Davis
Sophia Martinez
William Hernandez

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

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

AI 聊天机器人在编程中的应用与测试

截图由 David Gewirtz/ZDNET 提供

在第一个字段中粘贴名字,点击随机化按钮,并在第二个字段中查看结果。确保 William Hernandez 和 Abigail Williams 的多个条目在列表中分布。

测试 2:重写一个字符串函数

这个测试评估一个 AI 聊天机器人如何更新一个实用函数以获得更好的功能性。我最初在文章中记录了这个测试,“好吧,ChatGPT 刚刚调试了我的代码。真的”。

现实需求:我有一个验证例程,应该检查有效的货币金额。然而,用户的错误报告指出它只允许整数(所以,5 而不是 5.02)。

与其花时间重写我的代码,这可能需要一到四个小时,我请 AI 来做。

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

请重写以下代码,使其从仅允许整数变为允许美元和美分(即,小数点和最多两位小数)。

str = str.replace (/^0+/, “”) || “0”;
var n = Math.floor(Number(str));
return n !== Infinity && String(n) === str && n >= 0;

结果中要寻找的内容:针对几种可能的失败场景测试代码。提供代码一个字母数字值,看看它是否失败。

查看代码如何处理前导零。查看它如何处理美分超过两位小数的情况。查看代码如何处理小数点后一位的情况。

看看它是否能处理小数点左边有五或六位数字的情况。

测试 3:找到一个烦人的错误

这个测试需要对 WordPress 有深入的了解,因为明显的答案是错误的。如果一个 AI 聊天机器人能正确回答这个测试,它的知识库相当完整,即使是在 WordPress 这样的框架中。我最初在文章中记录了这个测试,“好吧,ChatGPT 刚刚调试了我的代码。真的”。

现实需求:我正在为随后出售的产品编写新代码。我有一个函数,接受两个参数,一个调用语句发送两个参数给我的代码。

问题是,我不断收到错误消息。

消息的关键部分是它在某处声明“传递了 1 个”,在另一处声明“预期正好 2 个”。我查看了调用语句和函数定义,两处都有两个参数。这个问题让我困扰了一段时间,所以我请 ChatGPT 帮忙。

我向它展示了进行调用的代码行,函数本身,以及处理程序,一小段代码从主程序的钩子中调度被调用的函数。

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

我使用这个函数来处理 WordPress 过滤器:

$transaction_form_data = apply_filters(‘sd_update’,
$transaction_form_data, $donation_id);

它由

add_filter(‘sd_update’, ‘sd_aan_update’, 10, 1) ;

处理,被调用的函数是:

function sd_aan_update ($donation_data, $donation_id) {
// 这处理了交易从网关返回后的表单数据

if (isset( $donation_data[‘ADD_A_NOTE’] ) ) {
update_post_meta($donation_id,
‘_dgx_donate_aan_note’,
$donation_data [‘ADD_A_NOTE’]);
}

return $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(这意味着过滤器函数只会接收一个参数)。实际上,它期望两个参数。

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

测试 4:编写一个脚本

这个测试要求一个 AI 聊天机器人使用两个大多数用户不太熟悉的相当专业的编程工具进行编程。它基本上测试了 AI 聊天机器人超出大型语言的知识。我最初在文章中记录了这个测试,“Google 发布了 Gemini Code Assist,我谨慎乐观地认为它将帮助程序员”。

现实需求:我想为我的 Mac 构建一个自动化例程,这将为我节省大量的点击和按键。我使用一个名为 Keyboard Maestro 的工具在我的 Mac 上进行大量自动化(可以将其视为增强版的快捷方式)。Keyboard Maestro 是一个相当晦涩的程序,由澳大利亚的一个独立程序员编写。

在这种情况下,我希望我的例程查看打开的 Chrome 标签,并将当前活动的 Chrome 标签设置为传递给例程的标签。为此,Keyboard Maestro 还需要执行一些 AppleScript 代码来与 Chrome 的 API 接口。

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

编写一个 Keyboard Maestro AppleScript,扫描最前面的 Google Chrome 窗口,查找包含与传递的变量 instance__ChannelName 内容匹配的字符串的标签名称。忽略大小写进行匹配。一旦找到,使该标签成为活动标签。

结果中要寻找的内容:这是一个很好的 AI 测试,因为它测试了一个相当不知名的编程工具(Keyboard Maestro),AppleScript,Chrome API,以及这三者如何交互。

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

tell application “Keyboard Maestro Engine”
set channelName to getvariable “instance__ChannelName”
end tell

其余的 AppleScript 应该包含在一个块中。它需要忽略大小写,所以要么查找大小写替换,要么使用“contains”,它在 AppleScript 中是不区分大小写的:

tell application “Google Chrome”

孩子们,你可以在家里尝试这个

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

到目前为止,除了 ChatGPT 之外,我还测试了以下 AI 聊天机器人:ChatGPT Plus

正文完
 0
admin-gah
版权声明:本文于2024-08-23转载自Zdnet,共计5411字。
转载提示:此文章非本站原创文章,若需转载请联系原作者获得转载授权。
评论(没有评论)
验证码