AICon 北京站 Keynote 亮点揭秘,想了解 Agent 智能体来就对了! 了解详情
写点什么

Nature 总结六大 ChatGPT 编程技巧:是非常强大的编程辅助工具!

  • 2023-06-09
    北京
  • 本文字数:3345 字

    阅读完需:约 11 分钟

Nature 近日发表文章,总结了多位计算机科学家的使用经验,给出了更好使用 ChatGPT 编码的六个技巧。虽然 Nature 认为 AI 工具功能非常强大,但他们也提醒大家仍需要谨慎使用。我们在不改变原意的基础上做了翻译和整理,希望对读者有所帮助。

 

如今的ChatGPT已经火爆全网、席卷全球,这款由 OpenAI 打造的 AI 聊天机器人具备与人类几乎无异的顺畅语言表达能力。ChatGPT 在大量文本语料库之上训练而成,能够根据文本参与对话,由用户不断引导以改进响应结果。即使最初的答案有所偏颇,它往往也能借助对话循环最终给出正确的结果,甚至是软件代码。

 

研究人员已经在使用 ChatGPT 调试和注释代码,将软件从一种编程语言翻译成另一种编程语言,并借此执行数据绘制等枯燥乏味的流程化操作。今年 3 月的一份预发表报告称,ChatGPT 仅凭一次尝试就能解决 184 项生物信息学入门任务中的 76%(例如处理电子表格),而在七次尝试后的解决率将提升至 97%。

 

这对不太熟悉编程,或者没有预算聘请全职程序员的研究者来说无疑是个好消息。聊天机器人,也许会成为科研大众化转型中的一股重要力量。

 

可尽管聊天机器人看似拥有认知能力,但它们跟“聪明”二字并不沾边。不少技术专家认为它们类似于“随机鹦鹉”,会随机按照之前看过的内容拼凑出答案。西雅图华盛顿大学的计算机科学家 Amy Ko 在 Mastodon 社交网站上这样描述了这款工具的局限性:“ChatGPT 就像一个绝望的有奖问答选手,他对流行文化的关注停留在 2021 年之前,但却真心想要赢得游戏。这就是 ChatGPT,一个没有意识、主体道德、具身认知和内心情感的机器。”(用于训练 ChatGPT 的数据只截止到 2021 年。)

 

简而言之,ChatGPT 和基于大语言模型(LLM)的相关工具,包括微软 Bing 和 GitHub Copilot,都属于非常强大编程辅助工具,只是使用时也须谨慎。而要充分发挥其中的潜能,不妨参考以下六个技巧。

 

六大使用技巧

 

精心挑选应用场景

 

聊天机器人最适合小型、离散的编程任务,包括加载数据、执行基本数据操作和创建可视化图表/网站,但这跟真正的软件工程还不是一回事。

 

加拿大维多利亚大学计算机科学家 Neil Ernst 解释道,“软件工程不只要解决编程难题,更要考虑测试框架、编写出可维护的代码并理解系统构建当中的种种权衡”——比如在运行速度和代码可读性间的取舍,“我认为当前的 AI 工具还做不到这些。”

 

但它们还是相当有用,比如提示 Matplotlib(Python 的图形库)中的可视化创建语法。从这个意义上看,聊天机器人更像是程序员在线问答论坛 Stack Overflow 的对话界面版本。“它能分担不少耗费程序员时间和精力的工作,把时间节约下来处理真正棘手的数据分析难题。

 

聊天机器人还挺擅长解释目前的代码里存在哪些问题。马萨诸塞大学阿姆赫斯特分校的计算机科学家 Emery Berger 就借此构建出好几款实用工具。首先是 cwhy,使用 ChatGPT 来解释 C、C++和 Rust 代码中的编译器错误。还有 ChatDBG,能够提供一套用于调试的对话界面。再就是 Scalene,使用 AI 提供代码优化建议以提高运行性能。

 

聊天机器人甚至可以把代码从一种编程语言翻译成另一种语言。巴黎居里研究所的生物物理学家 Mathieu Coppey 就在用 ChatGPT 将 MATLAB 代码转换为 Python 形式。以往,他需要查询谷歌和线上论坛花几天时间让自己的 Python 代码跑起来。“现在,整个过程只要一小时左右就能完成。”

 

还算稳定,但须验证

 

聊天机器人有时候并不知道自己在说什么,但却态度坚定、言之凿凿。某些情况下,AI 似乎无法理解问题内容,有时候则会直接提供错误答案。输出的代码根本无法运行还算是好的,更要命的是代码能运行,但却产生了难以察觉的错误结果。

 

根据加州大学戴维斯分校语言学家 Emily Morgan 参与的研究,与作为训练素材的人类代码一样,聊天机器人也经常会犯下“简单而愚蠢的错误”。这些单一错误(比如在条件语句中使用了>而非>=)倒是不难修复,可排查起来相当费劲。“如果用户的知识不足以做区分和验证,那盲目信任 AI 可能会给自己惹出麻烦。”

 

Iza Romanowska 是丹麦奥尔胡斯高等研究院研究古代文明复杂性的科学家,他使用 ChatGPT 生成 NetLogo 代码。因为训练数据集中关于 NetLogo 的代码远不像 Python 和 R 语言那么丰富,所以 ChatGPT 的表现就有些捉急。她还发现 AI 有时会在建议代码中引入实际上并不存在的函数,也就是大家所熟悉的 AI“幻觉”问题。

 

总之,不要盲目接受 ChatGPT 输出的一切——请务必认真阅读、详加测试,确保它能在“边缘情况”下也按预期执行。比如在对 n 个数字进行排序的算法中,第 n 个数字是否被包含在内。加拿大滑铁卢大学计算机科学家 Patrick Lam 坦言,“我会抱着对自己编写的代码相同的怀疑态度,审视 ChatGPT 输出的代码。”

 

牢记安全

 

聊天机器人的输出质量,与训练数据集中的代码质量密切相关。Ko 表示问题也正在于此,“网络上共享的代码总体质量偏低,聊天机器人当作学习材料的多数代码其实并不可靠。”例如,AI 不光很难处理好大型数据集,甚至可能在代码中包含安全漏洞。

 

在 GitHub 的 Copilot 编程工具于 2021 年首次亮相时,纽约大学计算机科学家 Brendan Dolan-Gavitt 带领团队在 89 个安全相关场景中对其进行了测试。其中之一正是发现 SQL 注入攻击的能力,即使用可能损坏数据库的错误格式执行 SQL 查询。

 

“Copilot 生成的约 40%代码都存在安全隐患。”但情况正在显著改善,如今 Dolan-Gavitt 对更新版本 GPT-4 开展相同测试时,其错误率已经降低至 5%。

 

但大家还是不能掉以轻心,还要特别关注那些看似无关紧要的应用场景。比如,用户需要在为数据库或可视化工具生成 Web 界面时提高警惕。

 

新泽西州普林斯顿大学计算机科学家 Sayash Kapoor 强调,“一定先确保你自己就能解决这些编程问题,然后再放手交给 AI 去作,这样你才能发现其中的错误。”

 

不断迭代

 

Ko 认为,基于聊天机器人的编程“绝不是一锤子买卖”,而是反复迭代的一段对话。“你先写出要求,然后得到相应回答;你带着怀疑态度审视这段结果,提出更多细节并要求 AI 加以完善。”

 

西弗吉尼亚大学生物信息学核心设施负责人 Gangqing Hu 就通过这种迭代工作流程开发出一种名为 OPTIMAL 的新方法,帮助生物信息初学者们优化机器人提示。用户可以不断提交详细的提示词、测试回复,再向聊天机器人提供反馈以调整响应结果。“沟通是关键。”

 

南达科他州立大学生物信息学家 Xijin Ge 也建议,遇到困难时请尝试调整设置。例如,ChatGPT 当中的“温度”选项其实就是创造力控制旋钮——温度设定得越高,AI 就越是脑洞大开。“这有时候确实能解决问题。”

 

但 Ko 提醒称,实际情况没这么简单,必要时“用户还是得介入接管”。

 

拟人化

 

聊天机器人并不是人,但以这种方式跟它相处也可能有所帮助。Ge 建议“把 AI 当作暑期实习生”——就是那种努力进取、渴望被表扬但又因缺乏经验而经常犯错的大学生。

 

新西兰奥克兰大学计算机科学家 Paul Denny 建议尽量消除提示词中的歧义,并将问题拆分成一个个更小的部分。

 

另外,可以指示聊天机器人扮演某种角色,比如精通 Python 的生物学家。再就是指定需要使用的工具或编程库。Ko 表示这类操作可以帮助聊天机器人“进入正确的概率空间”,找到最可能符合提示要求的文本。

 

例如,Hu 在研究中就询问 ChatGPT:“作为一名精通 ChIP-Seq 数据分析的资深生物信息学家,请你协助我尽可能压缩代码数量。根据我的要求,你需要重置当前线程。收到请回复「是」。”

如果可能,还请尽量提供起始代码、注释和预期结果。哥伦比亚密苏里大学计算机科学家 Dong Xu 表示“示例确实能帮助 ChatGPT 牢牢把握住正确的方向。”

 

拥抱变革

 

必须承认,大语言模型仍在不断发展、愈发强大。这对研究人员来说既是个好消息,也仍须对此保持警惕。提示词的长度不断增加,AI 模型也能做出更细微的响应。与之配套的新工具也在不断涌现,比如 Code Interpreter 插件就能让 ChatGPT 扮演数字数据分析师,供用户上传数据集、询问数据模式并下载结果。正如位 AI 博主所言,“这就像在直接跟数据对话,太酷了!”

 

结束语

 

现在的开发者几乎分成了使用和不使用 AI 辅助编程两个“派别”。

 

“我几乎总是通过向 ChatGPT 询问框架来开始我的任务。它给我框架,我据此进行调整和扩展,效果很好。”但也有开发者表示,“对我来说,它就像一只会说话的狗——不可思议但毫无用处。”

 

你对此持什么观点呢?欢迎在评论区留下你的想法。

 

原文链接:

https://www.nature.com/articles/d41586-023-01833-0

2023-06-09 09:5393508

评论

发布
暂无评论
发现更多内容

TiDB 和 C# 的简单 CRUD 应用程序

TiDB 社区干货传送门

6.x 实践

MySQL正常执行的SQL在TiDB中变慢了

TiDB 社区干货传送门

管理与运维 故障排查/诊断

TiCDC系列分享-02-剖析同步模型与基本架构

TiDB 社区干货传送门

迁移 备份 & 恢复 大数据场景实践 实时数仓场景实践 数据中台场景实践

TiCDC系列分享 Open API与业务系统集成

TiDB 社区干货传送门

应用适配 6.x 实践

TiDB与MySQL的模糊查询大小写

TiDB 社区干货传送门

开发语言

TiCDC系列分享-01-简述产生背景及使用概况

TiDB 社区干货传送门

迁移 安装 & 部署 扩/缩容 应用适配 大数据场景实践

tiflash 6.0 on K8s 扩容与新特性实践

TiDB 社区干货传送门

版本测评 安装 & 部署 新版本/特性解读 扩/缩容 6.x 实践

基于 TiDB v6.0 部署两地三中心

TiDB 社区干货传送门

实践案例 6.x 实践

TiDB Sysbench 性能对比测试报告 - v5.1.4 对比 v6.0.0 DMR

TiDB 社区干货传送门

6.x 实践

TiDB 冷热存储分离解决方案

TiDB 社区干货传送门

管理与运维 版本测评 6.x 实践 大数据场景实践

TiDB 6.0 新特性解读 | 离线包变更

TiDB 社区干货传送门

6.x 实践

基于tidbV6.0探索tiflash在多标签组合场景下的使用

TiDB 社区干货传送门

实践案例 6.x 实践

TiDB 6.0: 让 TSO 更高效

TiDB 社区干货传送门

实践案例 性能测评 新版本/特性解读 6.x 实践

一次断电故障引起TiDB无法启动的问题带来的几点思考

TiDB 社区干货传送门

管理与运维 故障排查/诊断

初体验之rawkv learner recover灾备切换

TiDB 社区干货传送门

内存悲观锁原理浅析与实践

TiDB 社区干货传送门

版本测评 新版本/特性解读 6.x 实践 TiKV 底层架构

TiDB HTAP特性的应用场景简析

TiDB 社区干货传送门

数据库架构设计

TiDB库表设计和使用规范

TiDB 社区干货传送门

管理与运维

TiDB Lightning在数据迁移中的应用与错误处理实践

TiDB 社区干货传送门

迁移 管理与运维 6.x 实践

基于tidbV6.0探索索引优化思路

TiDB 社区干货传送门

实践案例 6.x 实践

一次SSD磁盘寿命耗尽导致的TiDB集群写入变慢问题处理

TiDB 社区干货传送门

故障排查/诊断

文盘Rust -- 领域交互模式如何实现

TiDB 社区干货传送门

开发语言

排查分析Empty regions 较大原因

TiDB 社区干货传送门

性能调优 实践案例 集群管理 管理与运维

6.0体验:TiKV 重启后 Leader 均衡加速

TiDB 社区干货传送门

管理与运维 新版本/特性解读 6.x 实践

TiFlash 源码阅读(二)计算层概览

TiDB 社区干货传送门

论分布式数据库TiDB架构的“存”与“算”

TiDB 社区干货传送门

数据库架构设计

TiDB 6.0 Book Rush | TiDB 和 Python 的 CRUD 应用开发实践

TiDB 社区干货传送门

6.x 实践

TiKV 节点重启后业务恢复速度(leader 平衡速度)v6.0 vs v5.1.2对比测试

TiDB 社区干货传送门

版本测评 6.x 实践

TiDB 6.0: 统计信息优化改进

TiDB 社区干货传送门

管理与运维 新版本/特性解读 6.x 实践

关于HTAP与HSAP

TiDB 社区干货传送门

数据库架构设计

TiDB v5.4.0 与 v6.0.0 的 sysbench 性能对比

TiDB 社区干货传送门

性能测评 6.x 实践

Nature总结六大ChatGPT编程技巧:是非常强大的编程辅助工具!_语言 & 开发_Jeffrey M. Perkel_InfoQ精选文章