Copilot:AI自动写代码,人工智能究竟还能取代什么?

news2024/11/25 18:52:44

Copilot:AI自动写代码,人工智能究竟还能取代什么?

在这里插入图片描述


前言

AI绘画掀起一阵热潮之后,AI写代码又逐渐进入了我们的视野,似乎这一步我们还没想到就迅速到来了,难道说AI在取代画家之后,还要取代程序员吗?相信我们都曾幻想过这一天,在编写那些重复且无聊的代码时,虽然能够复制粘贴,但是或多或少确实有过“如果有人能帮我写完就好了”的想法,而这一点几乎已经被实现了;但是正如我们所预想的,随着Copilot的出现,就伴随着一系列问题涌现而来,训练数据的版权问题和生成代码的安全问题就是其中的两个关键。本文就将带领大家来领略AI代码的热潮。

文章目录

  • Copilot:AI自动写代码,人工智能究竟还能取代什么?
  • 前言
  • 什么是Copilot
    • 概念与背景
    • 背后的原理
  • 如何使用AI写代码
    • 方法使用
    • 实例分析
  • 随之而来的问题
    • 训练数据的版权
    • 生成代码的安全/正确性
  • 总结

什么是Copilot

概念与背景

  • CopilotGithub和OpenAI合作研发的AI编程工具,基于数十亿行开源代码进行训练,能够按照不同的程度、不同的功能要求,辅助人类完成编程任务

在这里插入图片描述

  • 背景介绍
    \qquad 在2018年6月,微软公司正式以75亿美元收购Github,而这次收购引起很大反响,认为这代表着软件开发者的影响力的日渐增长,将软件开发的下一个发展看成每个人都可以贡献的世界;但是同样有许多网友戏称这是一桩十分滑稽的收购案例,世界上最大的闭源公司收购了世界上最大的开源公司;微软毫无疑问在操作系统、办公套件等领域是绝对的垄断地位,而Github作为一个开源代码管理平台,同样在现在已经成立了近15年,拥有几千万的开源社区人员和过亿的代码库;
    \qquad 但是这样“滑稽的收购案”并没有如许多人想的那样会导致不好的后果,在仅半年之后,Github就开放了可以无限制的免费试用Github私有仓库,并且提出了了统一的企业产品Github Enterprise;而又过了仅几个月后,Github又推出了移动版本,GitHub for mobile,能够让大家无论身在何处都可以继续与开发团队保持协作;而本文的主题Copilot也在去年就已推出。

  • 用处:那么Copilot具体有什么用呢?让我们一一来罗列:

  1. 在一些集成开发环境中编程中,给出完整的方法或者算法建议;
  2. 提供样板代码和辅助单元测试
  3. 在一些较为简单直观的循环节或其他重复性较强的代码中,甚至能够自动写出完整可用的代码块

背后的原理

  • 官方介绍:

OpenAI Codex was trained on publicly available source code and natural language, so it works for both programming and human languages. The GitHub Copilot extension sends your comments and code to the GitHub Copilot service, and it relies on context, as described in Privacy below i.e., file content both in the file you are editing, as well as neighboring or related files within a project. It may also collect the URLs of repositories or file paths to identify relevant context. The comments and code along with context are then used by OpenAI Codex to synthesize and suggest individual lines and whole functions.

OpenAI Codex 是在公开可用的源代码和自然语言上进行训练,所以它对编程和人类语言都适用。GitHub Copilot 扩展将你的评论和代码发送到 GitHub Copilot 服务,它依赖于上下文,如下面的隐私描述,即你正在编辑的文件中的文件内容,以及项目中的邻近或相关文件。它还可能收集存储库的 URL 或文件路径,以确定相关的背景。然后,OpenAI Codex 使用注释、代码以及上下文来合成和建议个别行和整个功能。

\qquad 并且它尤其擅长书写 Python、Go、Ruby、JavaScript、TypeScript等语言,在书写代码时通过IDE中的插件和模型通信,然后根据内容辅助完成代码,交互流程如下:
在这里插入图片描述

  1. GitHub Copilot 编程器向 GitHub Copilot 服务发送上下文信息,包括注释、代码等信息;
  2. GitHub Copilot 服务使用OpenAI Codex模型,它基于数亿公开源代码及自然语言进行训练,然后向 GitHub Copilot 编程器提供建议,最后返回匹配的单个代码行或者整个方法
  3. GitHub Copilot 编程器不断向 GitHub Copilot 服务提供改善建议

如何使用AI写代码

方法使用

  • 步骤:以VSCode作为示例,首先搜索插件GitHub Copilot,下载并安装

在这里插入图片描述

  • 试用:在登录GitHub授权之后,需要访问Copilot的官网地址申请进行试用,而实际的订阅费用是每月10美元或每年100美元

在这里插入图片描述

实例分析

  • 根据注释和对方法的声明(参数、返回值),补充完成代码:

在这里插入图片描述

  1. 第一步:创建一个sentiment.ts文件,然后引入一个名为fetch-h2的Node.js包;
  2. 第二步:书写相关注释,尽可能详细的说明方法的目标和限制要求,以上图为例,功能为判断一句话包含的情感究竟是正面评价还是反面评价,限制为使用Web服务完成
  3. 第三步:书写相关声明(包含方法的参数和返回值类型
  • 根据注释直接完成整个方法代码:Python实例

在这里插入图片描述

同样,在给出函数参数及返回值后,通过书写注释就可以自动完成目标代码:解析实例消费数据,返回日期、数值和单位,同时忽略开头是#的代码行,将时间通过datetime库解析;其中可怕的是,它能够自行智能分析给定数据格式,运用空格分开,并将数值自动转为float格式,最终数据组合成元组返回;

  • 自动填充相似代码:

在这里插入图片描述

这一部分有些惊人,这意味着AI需要不仅理解我们的目标,还要能够准确的分析出其中的特征

  • 自动生成匹配单元测试代码:

在这里插入图片描述

这里似乎是更加智能的完全生成,但是可能也是安全性、正确性最难保证的一部分;

  • 甚至可以进行不同模式的切换:

在这里插入图片描述


在如此强大的功能下,确实不禁让我们感到兴奋和一种恐惧,但是同样,我们也要清楚的认识到,AI代码,现在更多的还是去代替那些重复性、较为低级的部分,如果真的有一天,AI能够自行书写高级、充满创新目标的代码,那么我们可能就需要考虑一些其他的生存问题了。


随之而来的问题

训练数据的版权

  • 训练数据:Github Copilot是通过OpenAI 创建并授权微软AI 系统Codex完成,而Codex是基于数亿的开放源代码进行训练,其中自然包含GitHub上的代码
  • 问题:
  1. Github Copilot事实上在未经许可的情况下使用了开源代码,一定程度导致了对于开源社区的抹杀;
  2. GitHub上的部分代码是根据一些开源许可进行发布的,例如MIT、GPL、Apache 等开源许可证,但是在Copilot训练使用代码时,并没有给出相应的版权信息
  • 要求:实际上这些均属于法律问题,应该有相关规定予以限制,例如美国的一位律师Matthew Butterick就提出对于使用Copilot工具的人需要满足以下要求:
  1. 遵守开源许可证规定的义务
  2. 使用受「许可证例外」约束的代码,在版权法约束下合理使用

生成代码的安全/正确性

  • 安全性:从原理流程图中我们能够清楚得知,获取代码的提示或补充,必然需要发送一定的注释、代码信息,这就会导致一定的代码外泄风险

  • 正确性:在使用Copilot工具进行代码编程辅助时,由于生成代码不能保证正确性,且背后的安全问题和知识产权问题也无法保证,故使用者需要自行为代码的质量和安全性负责

  • 案例:实际上,在Copilot开放的这几年来,已经产生了许多侵权案例,以及对于GitHub的上诉,软件自由保护协会SFC宣布将会结束自己对 GitHub 的所有使用,并将协助其他自由软件项目从 GitHub 迁移;德国的一位教授Tim Davis也宣称自己的大量代码遭到侵用;

在这里插入图片描述

\qquad 我们上面提到的Matthew Butterick甚至已经委托律师事务所发起诉讼,要求Copilot赔偿过90亿美元的法定赔偿金,认为它们违反了以下内容:

  1. 违反许可证版权要求
  2. 违反GitHub 的服务条款和隐私政策
  3. 违反DMCA 1202,禁止删除版权管理信息
  4. 违反加州消费者隐私法,以及引起相关法律索赔的其他法律。

总结

新的工具出现,我们自然是要首先探索它的无限可能性,尽可能地为人类工作做出更加有益的效果,但是从Copilot的诞生及使用来看,AI辅助编程仍然有着很长的路要走,不仅是在于代码生成的准确性和更少的注释,更多的问题也是关于知识产权、隐私安全的领域。

在这里插入图片描述

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

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

相关文章

引擎入门 | Unity UI简介–第1部分(7)

本期我们继续为大家进行Unity UI简介(第一部分)的后续教程 本篇内容 14.放置标题图像 15.添加开始按钮 16.定位按钮 文章末尾可免费获取教程源代码 本篇Unity UI简介(第一部分)篇幅较长,分为十篇,本篇…

sqli-labs/Less-48

欢迎界面还是以sort为注入参数 接下来进行注入类型的判断 首先输入一下内容 sortrand() 多尝试几次 发现界面会发生变化 所以这一关属于数字型注入 然后我们选择使用报错注入 尝试输入一下内容 sortupdatexml(1,if(11,concat(0x7e,database(),0x7e),1),1)-- 回显如下 呦…

网络层 408真题 大题详解

1、【2009】 第一问有两种分配可能性,要想到位 记住🚩 路由器到互联网的路由相当于默认路由0/0 即目的地址0.0.0.0 子网掩码0.0.0.0 2、【2015】 注意🚩DHCP服务器不能转发信息 要观察到本图网络拓扑是同一个网络,在同一个网络中…

Linux系统man帮助一文通-尚文网络xUP楠哥

~~全文共1453字,阅读需约5分钟。 进Q群11372462,领取专属报名福利,包含云计算学习路线图代表性实战训练大厂云计算面试题资料! Linux帮助手册的常见章节 man是Manual的缩写,用来查看系统中命令和配置的帮助信息。Linux本地系统上…

Java#21(抽象与接口)

目录 一.抽象方法和抽象类 1.抽象方法: 2.抽象类: 3.注意: 二.接口 1.接口的定义 2.注意 3.接口中成员的特点 三.接口中的方法 1.JDK7以前: 接口中只能定义抽象方法2.JDK8: 接口中可以定义有方法体的方法(默认、静态) 3.JDK9: 接口中可以定义私有方法 一.抽象方法和…

【Call for papers】DSN-2023(CCF-B/截稿日期: 2022年12月7日)

文章目录1.会议信息2.时间节点3.论文主题On behalf of the Organizing Committee, we extend you a warm welcome to the 53rd Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN 2023), organized by the University of Coimbra, Portugal.…

[ Linux ] 如何查看Linux系统版本

文章目录查看Linux内核Kernel的场景情况查看 Linux 版本的几种方式1、通过查看 redhat-release (可查看小版本)2、使用 lsb_release 命令 (可查看小版本)3、使用 hostnamectl 命令 (只可查看大版本)4、通过…

使用NNO区域进行色偏检测

想做图像的色偏检测,网上的资料全是同一套代码,就是2013年那个计算等价圆,然后直接用D-r>9 and K>0.6) or K>1.5,判断的代码(相信大家都查到过了) 但是色偏问题并不是这样简单的判断就可以的&…

一文掌握Python虚拟环境-提升你的开发效率

在真正开始Python代码编写、编译、运行、调试和开发项目之前,必须要了解下Python的虚拟环境的配置,熟悉使用后,会大大提升后续的开发效率,减少非代码原因导致的问题。virtualenv就是Python中的Virtual Environment-虚拟环境。本文…

C#界面里Form.HelpButton 属性的使用

C#界面里Form.HelpButton 属性的使用 Form.HelpButton 属性是获取或设置一个值,该值指示是否应在窗体的标题框中显示“帮助”按钮。 在一般的开发中,很少有人使用这个属性,因为程序比较简单,只要用户一上手就可以使用了。 如果界面比较复杂,或者说功能比较多,就需要使…

04【MyBatis的类型处理器】

四、MyBatis的类型处理器 4.1 typeAliases别名配置 类型别名是为 Java 类型设置一个短的名字,可以方便我们引用某个类。 我们仔细观察mapper.xml配置文件,会发现不管是入参(paramterType)还是出参(ResultType&#…

大数据面试题(三):MapReduce核心高频面试题

文章目录 MapReduce核心高频面试题 一、ReduceTask工作机制 二、请描述mapReduce有几种排序及排序发生的阶段? 1、排序的分类 2、自定义排序WritableComparable 3、排序发生的阶段 三、请描述mapReduce中shuffle阶段的工作流程,如何优化shuffle阶…

Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 一、平滑翻书效果 与纸质书籍类似,手机上的电子书也有很多页,逐页浏览可采用翻页视图,然而翻页视图犹如一幅从左到右的绵长画卷,与现实生活中上下层叠的书籍并不相像,…

百度paddle框架 目标检测

random recording 随心记录 What seems to us as bitter trials are often blessings in disguise. 看起来对我们痛苦的试炼,常常是伪装起来的好运。 数据集准备 2183张图片,训练集1693张,验证集245,测试集245张。 包含7种昆虫&a…

数据挖掘算法原理与实践:k-均值

目录 第一关:什么是质心 任务描述: 相关知识: 什么是质心: 编程要求: 测试说明: 第二关:动手实现k-均值 任务描述: 相关知识: 一、数据集介绍 二、k-means算法…

基于PHP+MySQL医院管理系统的设计与开发

随着各种医疗条件的发展,人们在寻医就药的时候更希望通过信息化的方式进行挂号等一系列操作,为此各大医院也开发出了配套的医院管理系统,方便医生和患者就诊,本系统就是这样通过PHP和MySQL开发的系统 PHP:MySQL医院管理系统根据实际情况分为了管理员,医生和患者三部…

Ubuntu上安装部署k8s集群

Ubuntu上安装部署k8s集群一、基础环境准备(一)环境说明1.主机说明(二)环境操作1. 设置Master与工作节点的机器名称及配置2. 解析主机3. 写入以下内容(注意IP地址和主机名换成自己的):4. 虚拟内存swap分区关闭5. 开启防…

新零售时代下的实体门店步履维艰,实体门店应该如何起死回生吗?

传统实体店在新零售时代的下,大众的消费习惯早已经发生天翻地覆的变化,因而实体行业受到新型消费带来的冲击,再加上电商平台的迅速崛起与发展,实体门店更加是步履维艰。因此改变是必然,那么传统实体店想要转型走新零售…

万字深剖进程地址空间(全程干货)

目录前言一、程序地址空间1.程序地址空间的简图(1)正文代码(2)初始化数据(3)未初始化数据(4)堆区(5)共享区(6)栈区(7)命令行参数和环境变量2.实验:验证程序地址空间中各个区域的存在3.实验:验证堆区和栈区中地址的增长方向4.实验:如何理解sta…

算法设计与分析 SCAU17104 视频流有效调度

17104 视频流有效调度 时间限制:1000MS 代码长度限制:10KB 提交次数:25 通过次数:9 题型: 编程题 语言: G;GCC;VC;JAVA Description 现在n个视频流要在一条通信链路上一个接一个的传送。视频流i由bi位组成,这些位需要一个常数速率, 在ti秒内被发送。你…