AI编程工具的机遇与风险

news2024/11/23 5:15:43

                                               作者            吴国平  北京市隆安律师事务所

超过1万个程序员,77,000个项目使用了Copilot,55%的程序员选择Copilot。

程序员使用人工智能来协助编写代码时,最终作品的所有权就变成了一个灰色地带。传统的软件著作权法是在程序员是代码创作的唯一力量的时代制定的。如今,如果一段代码的将近一半数量是在人工智能编程帮助下诞生的,那么这段代码的著作权是否完全属于程序员?这种模糊性可能会导致潜在的纠纷和确定合法所有权的挑战。

AI编程工具的兴起

前不久,Apache 软件基金会 (ASF)修改了个人贡献者许可协议 (ICLA),将必须提交原创代码的要求进行了修改以适应AI编码在代码编写过程中的作用。开源社区的这一“妥协”,意味着AI编码工具已经被纳入主流开源社区。

Copilot 是一种专注于代码补全开发辅助的工具,直接集成在IDE中,适合日常编程任务。倾向于生成简短的代码段或补全单个函数,帮助开发者更快速地完成日常编程任务。

Codex 是一种更通用的AI编程工具,Codex是GPT-3的一个分支模型,专门针对代码生成进行了优化和训练。支持通过API调用和自然语言交互,适合更复杂的编程任务,能够根据描述生成完整的代码。能够生成更复杂的代码,包括解决多步骤问题、编写脚本、创建应用程序,甚至解释代码逻辑、与其他系统集成,帮助企业和开发者自动化编程流程。

华为的MindSpore是一个全栈AI计算框架,虽然其主要目的是支持从边缘设备到云端的AI模型训练和推理,但它的编程辅助功能和AI模型开发能力也具备一定潜力。华为的AI开发平台已经在国内得到广泛应用,尤其是在云计算和AI推理方面。但是,目前MindSpore主要是一个AI开发框架,是否有Copilot或Codex那样专门用于代码生成的功能仍待观察。

百度的飞桨(PaddlePaddle)是中国大陆目前较为成熟的AI框架之一,具有广泛的开发者社区和商业应用场景支持。尽管飞桨目前的主要应用还是在深度学习模型的训练和部署上,但其平台也具备一些代码辅助功能。与Copilot和Codex相比,在代码生成和编程辅助方面的应用场景不多,更倾向于提供AI模型训练环境。

腾讯的AI Lab与优图实验室也在开发AI编程辅助工具。虽然他们的核心研究集中在AI模型、图像识别和自然语言处理领域,但AI编程工具的探索也正在进行,主要通过大模型在代码补全、智能编辑等方面进行初步应用。

科大讯飞近年来也在AI编程工具方面开展了一些研究。其AI开发平台支持语言模型生成代码,2023年底科大讯飞发布了讯飞星火智能编程助手iFlyCode,但是这类工具的功能仍在发展中,在代码生成和编程辅助工具方面,整体成熟度尚不如国际工具。

中国的AI编程工具发展差距

相对于由强大的语言模型驱动的Copilot和Codex,中国大陆虽然也在开发大型语言模型,但在规模、精度和实用性上尚有差距,同时在开发者社区和全球生态中的影响力较弱。另外一方面,国外AI编程工具依靠大量的用户反馈,能够不断改进代码生成效果。而中国大陆的AI编程工具在用户基数、反馈机制和代码库的广度方面尚不足,限制了工具的迭代速度和精准度。

据笔者所知,国内大型的软件企业通常对核心软件开发项目的开发环境进行严格的保密控制,但是也有部分企业为员工开通了VPN专线用于国外辅助工具的访问,只有在开发模块合并后才限制外部访问环境。文首Github公布的AI编程工具的程序员数量和人工智能编程的代码比例,是否包含国内的数据不得而知,但是不可否认的是AI编程工具在国内的适用比例在逐步增加。

AI编程工具与数据的国家主权

AI编程的训练数据是来源于网络,按照通常的说法,网络是没有国界的,但是从国家或政权的角度来看,数据主权是一个越来越重要的议题。每个国家都希望能够控制其境内产生的数据,尤其是在涉及个人信息、国家安全等方面。而当外国企业,尤其是大型科技公司,未经明确许可或支付相应费用就抓取和利用这些数据,这种行为从一些国家的角度可能会被视为“数据掠夺”。

大型科技公司利用本国的数据训练AI模型,通过这些模型获得商业利润,但这些利润不会直接反馈到数据的来源国。本国的数据资源被这些外国公司无偿获取,实际上是在间接“输出”数据价值,而本国和其公民却未获得合理的回报。

从另外一个角度,AI编程技术的快速发展使得数据成为外国企业的竞争力,从而在新技术领域建立主导地位,反过来收取本国人员的使用或者授权费用,从而越发造就了技术和经济上的不平衡,甚至是新型的资源剥削。

AI编程技术的迅猛发展促使人们对数据价值的重新认识,各国积累数据的价值可能远远被低估。数据主权的概念正在崛起,一旦对数据的利用技术被超越,则很难再通过国际间的协议或国内立法去平衡发展的差距。

英国关于AI编程工具立法尝试

英国立法机构致力于推动“信任和透明度”的机制,“以便版权持有人能够更好地了解他们制作的内容是否被用作人工智能模型的输入”。英国政府希望与版权持有人和人工智能开发人员密切合作,以实现这一目标。但是以上立法计划被搁置,英国上议院通信和数字委员会发布的一份报告中表示,关于该法典制定的讨论不应该“无限期地”进行下去,如果这一进程在今年春天之前不能得到解决,政府“必须提出选择并准备好最终解决争端,包括在必要时进行立法修改”。

英国立法机构的初衷在于要求人工智能运营人“明确他们的网络爬虫是否用于获取生成式人工智能训练的数据或其他目的”,并建立“一种让权利人检查训练数据的机制”。

从本文作者的角度,英国立法机构的逻辑是从知情—度量—分取收益为切入点的,但是第一步的“知情”目前就步履维艰,但更重要的是后一步的“度量”,如果不能从技术角度来“度量”源数据对AI开发工具的贡献度,则很难实现“分取利益”,这也是英国立法遇阻的真正原因。

AI编程工具对软件公司的威胁—抄袭

对于程序员或者软件公司,无论AI代码在整个项目中占有多大的比例,程序员都不会向公司声明自己的工作中包含了部分AI生成的代码,现有的代码工作平台也不会记录或者标记AI生成部分,后续代码如何流动、被修改,甚至与其他代码组合,都无法追溯其来源。

尽管软件公司内部会利用市面上有一些工具检测代码的相似性,这些工具主要用于检测代码抄袭。然而,这类工具通常依赖于已有的数据库来对比代码片段。然而,AI生成的代码并不是直接复制,而是经过一定程度的变化和演绎生成的,也可能仅仅保持了逻辑或功能上的相似性。这会给软件公司的风险评估带来风险。

GitHub等开源平台上的开源代码数量庞大,AI系统在训练时可能会参考这些代码。AI生成的代码可能会不可避免地与开源代码产生某种程度的相似性,这是否构成抄袭,有待在具体的案例中进行评估。

Copilot 声明生成的代码绝不是从任何代码仓中拷贝和粘贴过来的,但是根据一些社区程序员反馈的信息,AI编程工具可能会生成包含一些与开源代码完全匹配的代码块(例如stack Overflow的代码)。在Copilot的官网上,我们也可以看到Copilot也承认输出的代码有可能与训练的代码一致,但是Copilot强调这样的机率很小(原文表述为in rare instances), Copilot更进一步解释了机率的含义(less than 1% based on GitHubs research),在缺乏相关外部审计数据的情况下,在相关训练模型和代码数量有限的情况下这一机率可能会放大数倍,软件公司不能想当然忽略这一部分风险。

微软在2023年针对AI编程的版权侵权忧虑,承诺对Copilot 服务及其生成的输出承担版权索赔的风险,这听起来无疑是一个好消息,但是Copilot的上述承诺前提是客户必须按照服务条款的内容,使用其内置于产品中的护栏和内容过滤器。详见以下链接:Microsoft announces new Copilot Copyright Commitment for customers - Microsoft On the Issues。

当然,从律师的角度,Copilot的上述承诺更确信了之前的怀疑——不使用额外过滤器(可能涉及企业版本或者更高付费)的情况下,侵权的风险是客观存在的,而且这样的版权风险还必须由使用AI编程工具的软件公司自己承担。

AI编程工具目前主要的功能是代码生成补全、代码维护和代码改写,以下我们以C语言为示例,考察代码改写功能在版权侵权方面的影响,以下截图为Github上直接复制的语句(项目地址:GitHub - clibs/flag: Command-line options library in ANSI C):

以下截图为利用AI编程工具进行改写的程序段:

通过对比我们发现,技术编程工具改写的这一段代码,主要调整了代码结构、变量命名和输出信息,但逻辑语序是保持一致的,flag 被改为 cmd_flags,输出的帮助信息略作修改,将 "Usage: program [options]" 改为 "Program Usage: program [command-options]"。尽管改写后的程序名称、格式、输出文本等都发生了变化,但是在版权侵权诉讼中,两者被判定抄袭的风险还是非常大的。

AI编程工具风险—许可证穿透

AI编程工具的训练数据大多来源于开源项目,开源项目在各自规定范围内使用的许可证进行分发。但是,如果一个在各种开源项目上训练过的人工智能工具生成了一段代码,那么原始许可证的效力是否还能得到延续?

AI生成的代码可能会“重现”一些开源代码段,这种风险在前文的分析和对比中已经讨论过,但用户并不知道这些代码的来源,更不知道这些代码段对应的许可证信息。如果生成代码与开源代码高度相似,且违反了开源许可证的规定,例如没有遵循GPL许可证的要求(如公开衍生代码),这可能是目前AI编程工具最大的风险。

即使生成代码与原始开源代码不完全相同,只要相似性足够高,仍然可能被视为衍生作品,从而受到GPL等开源许可证的约束。

相较于GPL许可证,MIT和Apache允许用户自由使用、修改和分发代码,甚至可以将其用于商业项目。然而,这并不意味着AI工具可以自由地利用这些代码。AI工具在生成代码时,如果使用了这些开源代码,并且没有对原代码做出明显改进或标识其来源,仍然可能触及贡献者的权益,特别是如果这些代码用于商业目的。

目前,AI编程工具并不能完全“屏蔽”GPL等开源许可证的穿透性。虽然AI编程工具生成的代码是通过模型学习的结果,但如果这些代码源于或高度类似于GPL许可的代码(衍生作品),则仍然可能被视为受GPL约束,进而对新开发者产生约束力。因此,AI编程工具作为中介,并不能改变开源许可证的约束力,新开发者在使用AI生成代码时必须对其潜在的法律责任保持高度警惕,尤其是在使用闭源或商业项目时。

从技术层面Copilot在2024年7月推出150个字符为单位的检索许可证测试版本,可以检索并标识生成代码的许可证,但是其匹配标准、基础数据库范围尚未公开,而且如此巨大的检索量需要耗费大量的服务器算力,后期的收费金额能否匹配用户的消费能力等商业化因素尚未可知。

目前GitHub Copilot、OpenAI Codex 以及其他类似的AI编程工具,都对AI生成代码的归属和使用权限做了一定的规定。尽管Copilot在用户协议中没有明确表述生成代码的归属,但是其在官网声明不会对生成的代码主张所有权。Codex在用户协议中明确:“我们特此向您转让我们对输出的所有权利、所有权和利益(如有)”,类似的AI编程生成工具(如Tabnine、Replit Ghostwriter等)也有类似的使用协议。

因此在确认AI编程工具生成的代码著作权归属时,似乎可以将AI工具的开发者排除在外了,但是这并不意味着使用者可以想当然成为输出代码的所有权人,OpenAI Codex的使用协议(Terms of use)中列名的禁止行为包括“表示输出为人为生成, 而实际并非如此”。(Represent that Output was human-generated when it was not)。在司法体系进行考量时必须尊重上述禁止性条款,这也是使用者将AI编程输出代码进行商业化使用的重要风险。

AI编程工具的自动生成代码功能,可以提高代码质量、减少调试时间,根据开发社区的反馈,AI编程工具在不同的行业领域可以提升编码效率20%--30%(定制化或复杂项目除外),在相同的商业环境下,采用AI编程工具无疑具有更高的竞争力。但是,软件公司在使用AI编程工具进行商业项目、闭源项目生成代码时,确实存在本文所述的各种风险。这些风险主要集中在AI生成代码与开源代码的相似性、开源许可证的穿透性、AI生成代码的独创性问题,以及对开源贡献者权利的侵害等方面。AI编程工具的用户需要对使用的AI编程工具保持高度警惕,在相关工具的采用、项目实施过程中咨询律师意见,确保在法律框架内进行开发和使用。

文章如有任何疏漏,请反馈给作者  hanswu@188.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux高效查日志命令介绍

说明:之前介绍Linux补充命令时,有介绍使用tail、grep命令查日志; Linux命令补充 今天发现仅凭这两条命令不够,本文扩展介绍一下。 命令一:查看日志开头 head -n 行数 日志路径如下,可以查看程序启动是否…

Django一分钟:DRF生成OpenAPI接口文档

DRF项目中如果想要自动生成API文档我们可以借助drf-spectacular这个库,drf-spectacular非常强大,它可以自动从DRF中提取信息,自动生成API文档,配置简单开箱即用,并且它对很多常用的第三方如:SimpleJWT、dja…

专业高清录屏软件!Mirillis Action v4.40 解锁版下载,小白看了都会的安装方法

Mirillis Action!(暗神屏幕录制软件)专业高清屏幕录像软件,被誉为游戏视频三大神器之一。这款屏幕录制软件和游戏录制软件,拥有三大硬件加速技术,支持以超高清视频画质录制桌面和实况直播,超清视频画质&…

论文速读:基于渐进式转移的无监督域自适应舰船检测

这篇文章的标题是《Unsupervised Domain Adaptation Based on Progressive Transfer for Ship Detection: From Optical to SAR Images》基于渐进式转移的无监督域自适应舰船检测:从光学图像到SAR图像,作者是Yu Shi等人。文章发表在IEEE Transactions on Geoscience…

erlang学习:Linux命令学习9

sed命令介绍 sed全称是:Stream EDitor(流编辑器) Linux sed 命令是利用脚本来处理文本文件,sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等 sed 的运行…

Dev-C++ 安装与使用(dev c++官网)(已解决)

1.Dev-C的安装 ①打开Dev-C的官网(https://sourceforge.net/projects/orwelldevcpp/ );点击Download(下载),等待5秒后开始下载。 ②点开下载好的EXE文件,等待加载完成(如图)。 右键,以管理员身份 运行安装包。 选择English(英语),…

近年来自动驾驶行业就业与企业需求情况

自动驾驶行业在近年来持续发展,就业情况和企业需求呈现出多样化和复杂化的趋势。 以下是基于我搜索到的资料对自动驾驶行业最新就业情况和企业需求的详细分析: 自动驾驶行业对高端技术人才的需求非常旺盛,尤其是架构工程师、算法工程师等岗…

四、Python基础语法(数据类型转换)

数据类型转换就是将一种类型的数据转换为另外一种类型的数据,数据类型转换不会改变原数据,是产生一个新的数据。 变量 要转换为的类型(原数据) -> num int(28) 一.int()将其他类型转换为整型 1.整数类型的字符串转换为整型 num1 28 print(type…

判断推理(3)

A正好说反了 C没说唐朝是否使用陶片 题干说的是有时会造成伤害,但是没有说服用了维生素和矿物质一定会带来伤害,所以A选项不能进行削弱 D是对比实验:增加反向论据。通过对儿童的调查发现,不服用的儿童营养缺乏症的发病率高,通过对…

Windows无需管理员权限,命令轻松修改IP和DNS

哈喽大家好,欢迎来到虚拟化时代君(XNHCYL)。 “ 大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…(每天更新不间断,福利…

QML: FolderListModel(访问本地系统文件)

目录 一.性质 1.导入模块 2.基本属性 3.数据模型接口 4.方法 二.使用 1.引入 2.调用 三.效果 四.代码 一.性质 FolderListModel是QT提供的一个可以访问本地系统文件夹内容的组件,它能够将获取到的信息提供给其他组件使用。 1.导入模块 在使用FolderLis…

java动态生成类javassist

简述 Javassist(Java Programming Assistant)是一个 操作Java 字节码的类库,主要用于在运行时或编译时修改 Java 类的字节码。 它提供了相对简单的 API,让开发者可以动态地创建、修改和加载 Java 类 , 从而实现诸如动态代理、AOP…

用友Yonbuilder 平台使用教程序

用友Yonbuilder 平台使用教程 目录概述需求: 设计思路实现思路分析 免费下载参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,c…

opencv学习:利用帧差法实现对视频移动物体的识别、帧差法的优缺点及完整代码实现

基本概念 帧差法是视频处理和计算机视觉领域中用于移动检测的一种简单而有效的方法。它主要依赖于连续视频帧之间的像素差异来识别场景中的移动对象。 帧差法: 定义:帧差法通过比较连续的视频帧之间的差异来检测移动对象。基本思想是移动对象会在连续的…

基于unbantu操作系统下的docker安装全教程

目录 检查docker安装环境 1.检查服务器的CPU和操作系统版本是否为docker支持的版本。 2.卸载已有的docker 安装docker 1.创建目录 2.下载GPG秘钥 3.添加Docker的APT源 4.更新APT包索引并安装Docker 5.运行docker并配置镜像加速器 安装docker-compose 使用apt命令下载…

MAC中滚轮方向和Windows相反的解决方案

MACOS外接鼠标滚轮方向与Windows相反 MAC中滚轮方向和Windows相反,很难受 在使用MACOS操作系统时,滚轮的方向和Windows系统中的相反,这一点常常让人感到不适应和困惑。当第一次切换到MAC电脑时,许多用户会发现他们的习惯滚动操作…

LORD-GX5-45 ROS安装

1、驱动安装 https://github.com/LORD-MicroStrain/MSCL 上述下载 x64:C&#xff0c;在下载完的deb文件下执行 sudo dpkg -i <PACKAGE_NAME>.deb #install MSCL sudo apt install -f #install dependencies2、源码安装 #新建工作空间 mkdir -p ~…

Windows系统编程(三)线程并发

进程与线程 进程&#xff1a;直观的说就是任务管理器中各种正在运行的程序。对于操作系统来说&#xff0c;进程仅仅是一个数据结构&#xff0c;并不会真实的执行代码 线程&#xff1a;通常被称作但并不真的是轻量级进程或实际工作中的进程&#xff0c;它会真实的执行代码。每…

环形链表(c语言)

1.//环形链表 //输入&#xff1a;head [3,2,0,-4], pos 1 //输出&#xff1a;true //解释&#xff1a;链表中有一个环&#xff0c;其尾部连接到第二个节点。 //输入&#xff1a;head [1, 2], pos 0 //输出&#xff1a;true //解释&#xff1a;链表中有一个环&#xff0c;其…