GitHub 新出的功能!可以帮我们自动写代码

这是「进击的Coder」的第 451 篇技术分享

作者:崔庆才

今天逛 GitHub 的时候发现了 GitHub 出了一个新的 Feature,叫做 GitHub Copilot,说可以帮我们自动写代码!

网址是这个:https://copilot.github.com/

点进来之后就几个醒目的大字  - Your AI pair programmer,你的人工智能编程伙伴。

这里有几个示例是这样的:

怎么个人工智能法呢?

这里前 7 行都是人写的,后面的 17 行都是人工智能帮写的。

我们需要写啥呢?我们来详细看看这个例子。

首先创建了一个 sentiment.ts 文件,然后引入了一个 Node.js 的包叫做 fetch-h2,然后写了两行注释:

// Determine whether the sentiment of text is positive
// Use a web service

什么意思呢?就是用注释写了我要写个啥东西,翻译过来如下:

  • 判断一句话的包含的情感是正面的还是负面的。(比如说“我好开心”就包含了积极情绪,句子包含的情感就是正面的;比如“你太坏了”就包含了负面评价,句子的情感就是负面的。)

  • 使用 Web 服务来实现。

然后定义了一个方法的声明:

async function isPositive(text: string): Promise<boolean>

没了。

就导入了一个包,然后写了两句注释,定义了一个方法的参数和返回值,人做的事就这么多。

然后 GitHub Copilot 就能帮我们把代码写出来,它写的内容如下:

  const response = await fetch(`http://text-processing.com/api/sentiment/`, {
    method: "POST",
    body: `text=${text}`,
    headers: {
      "Content-Type": "application/x-www-form-urlencoded",
    },
  });
  const json = await response.json();
  return json.label === "pos";
}

没错,它智能分析了我们人写的注释和方法的声明,然后就把代码写出来了。

这里就调用了一个 API,然后还自动构造了 POST 请求,获取返回结果,然后比对返回结果的 label 是不是 pos,如果是,那就代表句子包含了积极程序,返回 false 就不是积极情绪。

虽然说规范程度上一般,没有异常处理什么的,但是已经相当了不起了有没有!

  • 它居然能准确理解注释中我们描述的两个需求

  • 它居然知道调用哪个 API 来判断文本的情感信息

  • 它居然还能没有语法错误地把一个 JavaScript 方法写出来

牛逼了!

当然它不止能写 JavaScript,还能写很多其他的语言,我们再来看一个 Python的 例子。

这里我们新建了一个 parse_expenses 的 Python 文件,然后定义了一个 parse_expenses 方法,接收一个参数叫做 expenses_string,然后写明注释如下:

  """
  Parse the list of expenses and return the list of triples (date, value, currency).
  Ignore lines starting with #.
  Parse the date using datetime.
  Example expenses_string:
        2016-01-02 -34.01 USD
        2016-01-03 2.59 DKK
        2016-01-03 -2.72 EUR
  """

这里就写了,解析下面三行消费数据,然后返回日期、数值、单位,同时要求忽略掉开头是 # 的行,时间要用 datetime 库来解析出来。

然后 AI 就帮我们写了如下代码:

expenses = []
for line in expenses_string.splitlines():
    if line.startswith("#"):
        continue
    date, value, currency = line.split(" ")
    expenses.append((datetime.datetime.strptime(date, "%Y-%m-%d"),
                     float(value),
                     currency))
return expenses 

看完这个我惊呆了,它全都做到了!

  • 跟它说了忽略开头是 # 的行,它就添加了一个判断

  • 而且它智能分析了下面的三行数据是什么格式的,然后还知道用空格把它分开

  • 分开之后,针对日期,他还知道用 datetime 解析一下,而且还知道是什么格式,年月日中间用的是横线

  • 数值还自动转成了 float 类型

  • 最后组成了一个元组返回了

简直,我简直不相信这是 AI 写的,感觉这个作为面试题,人也不一定一次性完整写得很好,AI 全都做到了!

这。

当然除了 JavaScript、Python,它还会很多语言,比如 Go、Ruby、TypeScript 都会。

这是背后究竟是什么技术呢?

看了看官网的介绍,说是基于 OpenAI 做的,官方原话如下:

Trained on billions of lines of public code, GitHub Copilot puts the knowledge you need at your fingertips, saving you time and helping you stay focused.

翻译过来就是:

GitHub Copilot 接受了数十亿行公共代码的训练,让您所需的知识触手可及,从而节省您的时间并帮助您保持专注。

反正就是他们训练了一个模型,这个模型接受了数十亿行代码作为训练输入,最后就学会了人怎么写代码了。

这波可以。

然后官方还介绍说:

GitHub Copilot 尤其擅长写 Python、Go、Ruby、JavaScript、TypeScript,并且现在已经发布成了 VS Code 中的一个插件。在我们写 Code 的时候,这个插件就会跟 OpenAI 的模型通信,然后目前看到的内容帮助我们自动写出想要的代码,基本流程如下图所示:

好家伙,那我赶紧来下载看看。

到 VS Code 里面搜索下 Copilot,果然有,已经十万多下载量了。

装上之后,它让我登录 GitHub 授权,登录之后,它弹了一个令人悲伤的信息:

它说我现在还没有权限使用,请访问 https://copilot.github.com 申请假如白名单。

也就是还没完全开放使用,需要申请才能用。

于是乎,我就去申请了下,点下网站的 Sign Up 即可,现在我已经在等待名单中了,等通过了我应该就能用了,如图所示:

大家感兴趣的话也赶紧去申请试试吧!

后记:可能有的朋友会担心:难道我要失业了?依我看,不必过于惊慌,目前的 AI 应该还不至于智能到这个程度,它能懂的还是有限的,我相信再复杂一点的逻辑它就不一定写出来了,不用担心,程序员可是几乎最不能被 AI 替代的职业之一呢。

End

「进击的Coder」专属学习群已正式成立,搜索「CQCcqc4」添加崔庆才的个人微信或者扫描下方二维码拉您入群交流学习。

看完记得关注@进击的Coder

及时收看更多好文

↓↓↓

点个在看你最好看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值