GitHub 新出的功能!可以幫我們自動寫程式碼

崔慶才丨靜覓發表於2021-07-09

今天逛 GitHub 的時候發現了 GitHub 出了一個新的 Feature,叫做 GitHub Copilot,說可以幫我們自動寫程式碼!

網址是這個: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 授權,登入之後,它彈了一個令人悲傷的資訊:

它說我現在還沒有許可權使用,請訪問 copilot.github.com 申請假如白名單。

也就是還沒完全開放使用,需要申請才能用。

於是乎,我就去申請了下,點下網站的 Sign Up 即可,現在我已經在等待名單中了,等通過了我應該就能用了,如圖所示:

大家感興趣的話也趕緊去申請試試吧!

更多精彩內容,請關注我的公眾號「進擊的 Coder」和「崔慶才丨靜覓」。

相關文章