AI自动生成的代码还自带原来的「WTF」注释?程序员:我笑了,抄的太明显

简介: 直接复制粘贴训练集里的代码,原来的注释也一字不差。AI 的「抄能力」获得了认可。

本周 GitHub 发布的 AI 代码合成器 GitHub Copilot,是科技界备受关注的话题。传统 IDE 通常使用搜索引擎的方法补全代码,而这个代码神器 Copilot,据说提出的绝大多数代码建议都是全新生成的。


Copilot 发布后,许多网友惊呼代码补全效果「令人震惊」,给出极高的评价。但没过几天,一些试用者就发现了新的问题:Copilot 使用的开源代码数据集可能侵权。原本只是猜测,而就在十几个小时前,有网友曝出了 Copilot 复制粘贴代码的实锤,似乎在一张几十秒的动图里把 Copilot 的「原生」形象推翻了。


微信图片_20211205190702.png


「我啥也不说了,但 Copilot,这可不太行。」发现 AI 照抄代码的程序员 Armin Ronacher 来自奥地利。


Copilot 原样复制了经典射击游戏《雷神之锤》里的代码,而且还带着吐槽注释,比如「What the f**k」……


被复制的代码:https://github.com/id-Software/Quake-III-Arena/blob/dbe4ddb10315479fc00086f08e25d968b4b43c49/code/game/q_math.c#L552


微信图片_20211205190705.jpg


AI 生成的代码:


微信图片_20211205190708.gif


有网友评论道,GitHub 的 Copilot 很快就走上了当年微软 AI 聊天机器人 Tay 的老路(GitHub 在 2018 年被微软收购了)。


看起来事情并没有 GitHub 原先所说的那么简单。


AI 敲代码,一把双刃剑


作为微软、OpenAI、GitHub 三家联合打造的代码生成工具,GitHub Copilot 由 OpenAI 开发的全新 AI 系统 OpenAI Codex 提供支持,并在数十亿行公共代码上经过了训练。它的主要功能包括补全函数代码、根据注释生成代码等,暂仅支持 Python、JavaScript、TypeScript、Ruby 和 Go 语言。


目前 Copilot 发布的还是技术预览版,用户可以在主页注册报名,将有机会访问使用。


微信图片_20211205190710.png


GitHub Copilot 注册地址:https://github.com/features/copilot/signup


OpenAI Codex 在人们如何使用代码方面拥有广泛的知识,并且在代码生成领域显著优于 GPT-3,这得益于 Codex 的训练集中包含提取自 GitHub 的 TB(terabyte)级公开可用代码以及英语语言示例。


但自发布以来,关于 Copilot 的代码训练集的版权问题就一直存在争议,加之 Copilot 基于的算法模型 Codex 目前公开的信息不多,一时间「Copilot 是否涉及侵权」成为人们讨论的焦点。


有人开始思考,既然 GitHub 是一家微软旗下公司,OpenAI 也从微软那里拿了 10 亿巨额投资。那么,Copilot 是使用微软内部源代码训练的吗?或者未来将会如此?它会不会偶尔吐出一些 Windows 内核代码?


试想,等到 Copilot 添加了对 C++ 的支持,然后有人就会使用其编写具备 Win32 兼容 API 的操作系统,鉴于 GitHub 平台上有大量泄露的 Windows 源代码,因此 Copilot 肯定在这个过程生成很多代码。最终,微软是否会认为使用他们的 AI 生成的代码侵犯了他们的版权?


减负还是添堵?


类似的担心广泛存在,如果 Copilot 生成的代码是「复制」自其他项目的代码,那么使用它的开发者也无法得知自己编写的代码段落是否受版权保护。这就像一个定时炸弹。


假如开发者未能及时发现代码中的问题,最终惹来麻烦,似乎责任也应该由 Copilot 承担?因为代码是其衍生品。更糟糕的是,作为使用者,我们即使想要去遵守什么代码使用许可,似乎也无从切入。


至于被「复制粘贴」的那段代码,有人发现这段是最初的 GPL 许可版本中的,也包含在维基百科的词条内容中,因此或许不构成侵权。


微信图片_20211205190712.png


这段著名的原始函数也有一段来历:《雷神之锤 3》是 20 世纪 90 年代的经典游戏。该系列不但画面和内容(在当时)属于上乘,更难能可贵的是即使你的计算机配置较低,也能流畅地运行。这要归功于它 3D 引擎的开发者 John Carmack。


这款游戏 3D 引擎中的数学运算经历了精心的编写,在 game/code/q_math.c 中,上述这段代码的作用是将一个数开平方并取倒,经测试这段代码比用系统自带 sqrt 函数求倒 (float)(1.0/sqrt(x)) 快 4 倍。


其中神秘的数字 0x5f3759df 作用很大,但很少有人能够说清楚它的来由,这类无法理解但却有效的神奇数字经常被称为 magic number。从「WTF」的注释上来看,当初审阅的程序员恐怕也没有弄明白。


后来还有一篇论文解释了这个常数:http://www.matrix67.com/data/InvSqrt.pdf

虽然 Quake 3 的开平方根算法已被游戏公司公开了,但我们保不齐 AI 还会借鉴哪些代码。


有人说:「我看不到这个工具的意义,生成有效代码从来不是人类开发者的瓶颈,没有一个项目是因为代码输入速度不够快而失败的。真正的瓶颈在于理解代码如何工作、如何正确设计、如何根据现有设计进行更改、如何对现有代码进行故障排除等。这个工具不会让任何事情变得更容易,而且让事情变得更难了,因为现在你运行的软件不是由任何人编写的,没有人完全理解它。」


微信图片_20211205190715.png


当然,写代码的速度确实不算瓶颈,不过有一个减少重复编写代码的工具总归是好事。但对于企业开发者来说,发布代码之前的检查代码工作,可能要略微繁重了。

编写代码自动化一直是人们期望达成的目标,也是 AI 领域努力实现的方向。但相比于其他自动化任务,代码的自动化在实现难度和版权划分上都更加繁琐复杂。


Copilot 无疑给代码自动生成带来了新的希望,但完全实现自动化编程还有很长的路要走。


参考内容:


https://twitter.com/mitsuhiko/status/1410886329924194309https://news.ycombinator.com/item?id=27710287

相关文章
|
12天前
|
人工智能 自然语言处理 算法
哈啰集团全面接入通义灵码,AI 生成代码占比 20%,研发提效 12%
官宣!哈啰集团全面接入阿里云通义灵码专属版
202 5
|
17天前
|
XML 人工智能 Java
日常工作中的AI代码助手
【6月更文挑战第20天】日常工作中的AI代码助手
|
2天前
|
人工智能
AI,代码库-代码助手---代码输入提示框,询问加上特性,让他返回
AI,代码库-代码助手---代码输入提示框,询问加上特性,让他返回
|
1月前
|
存储 人工智能 C++
【PTA】L1-064 估值一亿的AI核心代码(详C++)
【PTA】L1-064 估值一亿的AI核心代码(详C++)
16 1
|
16天前
|
人工智能 自然语言处理 测试技术
通义灵码评测: 阿里云出品通义大模型AI代码编程辅助工具
通义灵码是阿里云出品的一款基于通义大模型的AI智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力,并针对阿里云 SDK/OpenAPI 的使用场景调优,助力开发者高效、流畅的编码。
282 0
|
23天前
|
人工智能 前端开发 JavaScript
《AIGC+软件开发新范式》--04.我们团队来了一位新同事, 主动要求帮忙敲代码!欢迎 AI 001 号
在AI 热度持续上升的当下,阿里云推出AI智能编码助手—通义灵码。通义灵码是一款基于阿里云通义代码大模型打造的智能编码助手,基于海量优秀开源代数据集和编程教科书训练,为开发者带来高效、流畅的编码体验。
|
23天前
|
人工智能 程序员 开发工具
《AIGC+软件开发新范式》--06.“AI 程序员入职系列”第二弹:如何利用通义灵码光速改写项目编程语言?
在AI 热度持续上升的当下,阿里云推出AI智能编码助手—通义灵码。通义灵码是一款基于阿里云通义代码大模型打造的智能编码助手,基于海量优秀开源代数据集和编程教科书训练,为开发者带来高效、流畅的编码体验。
|
2月前
|
人工智能 缓存 API
[译][AI OpenAI-doc] 错误代码
本指南包括关于您可能从 API 和我们官方的 Python 库中看到的错误代码的概述。概述中提到的每个错误代码都有一个专门的部分,提供进一步的指导。
|
2月前
|
XML 人工智能 JSON
[译][AI OpenAI-doc] 代码解释器 Beta
代码解释器允许助手在受限执行环境中编写和运行 Python 代码。该工具可以处理具有不同数据和格式的文件,并生成带有数据和图形图像的文件。
115 17
|
1月前
|
人工智能 开发框架 算法
AI程序员革命:探析Devin的登场与编程未来
AI程序员革命:探析Devin的登场与编程未来
61 0