ai生成的代码可信吗?编写的代码有bug吗?

AI科技大本营 AI科技大本营     2023-01-10     599

关键词:

编译 | 禾木木

出品 | AI科技大本营(ID:rgznai100)

即使是帮助开发人员编写软件的工具也会产生类似的bug。

目前,大部分的软件开发人员会让 AI 帮助开发者们编写代码,但是开发人员发现 AI 会像程序员的代码一样还是存有 bug。

去年 6 月,提供托管和代码协作工具的微软子公司 GitHub 发布了一个测试版的程序,该程序使用人工智能来帮助程序员。开始输入命令、数据库查询或对 API 的请求,Copilot 的程序将猜测您的意图并编写其余部分。

注册测试 Copilot 的生物技术公司的数据科学家Alex Naka 表示,该程序非常有用,并且改变了他的工作方式。“它让我花更少的时间跳转到浏览器来查找 API 文档或 Stack Overflow 上的示例,”他说。“感觉有点像我的工作已经从代码生成器转变为代码鉴别器。”

但是 Naka 发现错误会以不同的方式渗透到他的代码中。“有时我在接受其中一项建议时会遗漏某种微妙的错误,”他说。“而且很难追踪到这一点,也许是因为它所犯的错误似乎与我所犯的错误不同。”

AI 生成的代码错误可能更高

AI 生成错误代码的风险可能高得惊人。纽约大学的研究人员最近分析了 Copilot 生成的代码,发现对于某些安全性至关重要的任务,该代码大约有 40% 的时间包含安全漏洞。

参与分析的纽约大学教授 Brendan Dolan-Gavitt 说,这个数字“比我预期的要高一点”。“但 Copilot 的训练方式实际上并不是为了编写正确的代码——它只是根据给定的提示生成那种文本。”

尽管存在这些缺陷,Copilot 和类似的人工智能工具可能预示着软件开发人员编写代码的方式将发生翻天覆地的变化。人们越来越有兴趣使用人工智能来帮助自动化更平凡的工作。但 Copilot 也强调了当今人工智能技术的一些缺陷。

AI 编码工具

在分析 Copilot 插件可用的代码时,Dolan-Gavitt 发现它包含一个受限短语列表。这些显然是为了防止系统脱口而出冒犯性信息或复制其他人编写的知名代码。

GitHub 研究副总裁兼 Copilot 开发人员之一 Oege de Moor 表示,安全性从一开始就是一个问题。他表示,纽约大学研究人员引用的有缺陷代码的百分比仅与更可能存在安全缺陷的代码子集相关。

De Moor 发明了 CodeQL,这是纽约大学研究人员使用的一种工具,可以自动识别代码中的错误。他说 GitHub 建议开发人员将 Copilot 与 CodeQL 一起使用,以确保他们的工作安全。

GitHub 程序建立在 OpenAI 开发的人工智能模型之上,OpenAI 是一家在机器学习领域从事前沿工作的著名人工智能公司。该模型称为 Codex,由一个大型人工神经网络组成,经过训练可以预测文本和计算机代码中的下一个字符。该算法提取了存储在 GitHub 上的数十亿行代码用来学习如何编写代码,但并非全部都是完美的。

OpenAI 在 Codex 之上构建了自己的 AI 编码工具,可以执行一些令人惊叹的编码技巧。它可以将类型化指令(例如“创建 1 到 100 之间的随机变量数组,然后返回其中最大的一个”)转换为多种编程语言的工作代码。

同一个 OpenAI 程序的另一个版本,称为 GPT-3,可以在给定的主题上生成连贯的文本,但它也可以从网络上学到有攻击性或有偏见的语言。

Copilot 和 Codex 已经让一些开发人员怀疑 AI 是否可以将它们自动化。事实上,正如 Naka 的经验所示,开发人员需要相当的技能才能使用该程序,因为他们经常必须审查或调整其建议。

结 语

纽约大学参与 Copilot 代码分析的博士后研究员 Hammond Pearce 表示,该程序有时会产生有问题的代码,因为它不能完全理解一段代码想要做什么。“漏洞通常是由于缺乏开发人员需要了解的上下文造成的,”他说。

一些开发人员担心人工智能已经养成了坏习惯。曾尝试使用 AI 生成代码但尚未尝试使用 Copilot 的软件开发人员 Maxim Khailo 表示“作为一个行业,我们一直在努力摆脱复制粘贴解决方案,现在 Copilot 已经创建了一个增压版本。”

Khailo 说黑客可能会干扰像 Copilot 这样的程序。“如果我是个坏人,我会做的就是在 GitHub 上创建易受攻击的代码项目,通过在黑市上购买 GitHub 明星来人为地提高它们的知名度,并希望它成为下一轮训练的语料库的一部分。”

GitHub 和 OpenAI 都表示,相反,他们的 AI 编码工具只会变得不那么容易出错。OpenAI 表示它会手动和使用自动化工具来审查项目和编码。

GitHub 的 De Moor 表示,最近对 Copilot 的更新应该降低了安全漏洞的频率。但他补充说,他的团队正在探索其他提高 Copilot 输出的方法。一种是删除底层 AI 模型从中学习的不良示例。另一种可能是使用强化学习,在游戏和其他领域产生了一些令人印象深刻的结果的人工智能技术,来自动发现不良输出,包括以前看不见的例子。“正在发生巨大的改进,”他说。“几乎无法想象一年后它会是什么样子。”

参考链接:

https://www.wired.com/story/ai-write-code-like-humans-bugs/

本文由AI科技大本营翻译,转载请注明出处。

资讯

AI被当做炒作工具?

资讯

Gartner 发布人工智能技术曲线

资讯

机器人越像人越好?被盯着会怎样?

资讯

AI不可以作为专利认证发明人

分享

点收藏

点点赞

点在看

PHP:编写严格的代码有啥好处吗?

】PHP:编写严格的代码有啥好处吗?【英文标题】:PHP:Isthereanybenefittowritingstrictcode?PHP:编写严格的代码有什么好处吗?【发布时间】:2012-08-1814:55:58【问题描述】:当我设置error_reporting(E_ALL|E_STRICT);时,我的代码会产生Undefinedva... 查看详情

coredump文件是如何生成的(代码片段)

目录一、coredump文件生成过程二、coredump文件生成原理1.信号处理do_signal()2.生成coredump文件三、生产环境应该打开coredump功能吗?人都会犯错,所以在编写程序时难免会出现BUG。有些BUG是业务逻辑上的错误导致的,一般... 查看详情

如何以正确的方式编写代码内注释和文档?这有啥标准吗? [关闭]

】如何以正确的方式编写代码内注释和文档?这有啥标准吗?[关闭]【英文标题】:HowdoIwritein-codecommentsanddocumentationinaproperway?Isthereanystandardforthis?[closed]如何以正确的方式编写代码内注释和文档?这有什么标准吗?[关闭]【发布时... 查看详情

我可以从c ++调用用cupy代码编写的cuda代码吗?

】我可以从c++调用用cupy代码编写的cuda代码吗?【英文标题】:CanIcallcudacodewrittenincupycodefromc++?【发布时间】:2019-08-1603:21:07【问题描述】:如果我有一个简单的采样3D点的形式s=[[x1,y1,z1],[x2,y2,z2],[x3,y3,z3],[x4,y4,z4],.....]在cupy中实现... 查看详情

应用程序架构师应该编写代码吗?

】应用程序架构师应该编写代码吗?【英文标题】:Shouldapplicationarchitectswritecode?【发布时间】:2010-09-1718:09:45【问题描述】:这是一个双方都有观点的常见问题。赞成的人会争辩:要为编码人员设计一个系统,您必须了解如何... 查看详情

让ai生成ai绘画提示词,openai最新成果chatgpt被网友玩坏了!还会写代码修bug作诗...

...子位|公众号QbitAI一款新的聊天AI被网友们玩疯了。能直接生成代码、会自动修复bug、在线问诊、模仿莎士比亚风格写作……各种话题都能hold住,它就是OpenAI刚刚推出的——ChatGPT。有脑洞大开的网友甚至用它来设计游戏:... 查看详情

java代码生成器能生成c语言代码吗?用啥方法能实现呢?

按照我的理解,可以的,代码生成器是跨平台,而且是跨语言的(至少是跨文本语言的,UML暂时不好说,)。代码生成器作为一种开发工具,一般不直接作为程序的一部分,通常也不直接或间接(如通过AOP)被程序调用,他是通... 查看详情

两部手机可以有相同的蓝牙地址吗?

...要知道这个数字是否唯一。如果不是,我如何为每部手机生成一个唯一的ID,例如地址+友好名称(不幸的是它不是唯一的)。谢谢【问题讨论】:不 查看详情

我们可以编写 Scala/Spark 通用动态编写的代码吗

】我们可以编写Scala/Spark通用动态编写的代码吗【英文标题】:CanwewriteScala/Sparkgenericdynamicallywrittencode【发布时间】:2018-10-1716:02:51【问题描述】:我正在尝试创建可以读取具有不同列数的任何文件的SparkScala代码。我可以动态编... 查看详情

可以克隆 PHP 生成器吗?

】可以克隆PHP生成器吗?【英文标题】:CanPHPgeneratorsbecloned?【发布时间】:2014-05-1611:56:51【问题描述】:在PHP文档中它说:但是,这种灵活性确实是有代价的:生成器是只向前的迭代器,一旦迭代开始就不能倒带。这也意味着... 查看详情

编写 Mex 文件时出现错误消息,函数的数组输出有问题吗?

...b程序员,而且好几年没用过C了!现在我必须用C编写一些代码,并通过mexFunction命令从Matlab调用它。到现在为止还挺好。但是我的代码需 查看详情

C main 函数是可选的吗?你可以在它之外编写代码吗?

】Cmain函数是可选的吗?你可以在它之外编写代码吗?【英文标题】:IstheCmainfunctionoptionalandcanyouwritecodeoutsideofit?【发布时间】:2018-06-2223:34:00【问题描述】:当我查看GitHub上的源代码时,main函数经常被省略或者在它之外有代码... 查看详情

antlr 或其他工具可以为给定的语法生成有效代码吗?

】antlr或其他工具可以为给定的语法生成有效代码吗?【英文标题】:Canantlrorothertoolgeneratevalidcodeforgivengrammar?【发布时间】:2019-06-0703:54:13【问题描述】:我想为tree-sitter研究java语法,这似乎被放弃了几个月。使用基于属性的测... 查看详情

我可以使用其他编码语言生成 html 代码吗?

】我可以使用其他编码语言生成html代码吗?【英文标题】:Canigeneratehtmlcodeusingothercodinglanguages?【发布时间】:2020-02-0612:00:40【问题描述】:所以,我想使用Mailchimp发送邮件。为了使这些邮件的发送过程更快,我想要一个标准的... 查看详情

有人可以帮我使用我的随机代码生成器吗? [关闭]

】有人可以帮我使用我的随机代码生成器吗?[关闭]【英文标题】:Cansomeonepleasehelpmewithmyrandomcodegenerator?[closed]【发布时间】:2021-12-1006:40:40【问题描述】:所以我正在尝试制作一个随机代码生成器。像这样[x1gG4...]有16个代码位... 查看详情

用c#编写的asp.net和vb.net编写的asp.net有性能上的差异吗?

...技术A没有差异,它们分别由C#编译器和VB编译器将你写好的代码编译成IL代码,再由IL编译器解释成机器可以直接执行的机器代码.我们的应用程序实际上执行的都是封装在dll里面的IL代码,所以从这个角度来说,它们直接是没有性能差... 查看详情

输入可信的网站地址访问的网站一定是安全的这种方法正确吗?

输入可信的网站,网址访问的网站一定是安全的吗?一般情况下都是安全的,不安全的话,它会有系统拦截参考技术A是的,只要网站域名是可信的,如果没有被攻击的话就可以。 参考技术B这种是肯定的,如果网址是安全的话,... 查看详情

mysql的bug必须修复吗?(代码片段)

昨晚(1204)邀请在PingCAP工作的老弟屈鹏到dubbogo社区在线讲解TiDB,其间讲到TiDB并没有百分百兼容MySQL,因为MySQL有些bug,TiDB将错就错照着实现了,而有些bug实在无法也去照着兼容实现,线上有社区同学... 查看详情