大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以加我微信?ruochuan12?參與,已進行三個月了,大家一起交流學習,共同進步。
大家好,我是皮湯。最近組里在討論一個有意思的工具 Github Copilot,據說可以解放打工人,自動寫代碼!我當時就覺得很好奇,所以研究了一番,分享給大家😋!
相信所有的打工人在寫代碼的時候都會遇到很多問題,這些問題也許是自己從來不了解的,也許是了解一點但是還不熟悉的,也許是之前了解的但是忘記了。

遇到上面的問題,相比大部分人的第一想法是:Google 和百度了!

比如我想搜索如何使用 Twitter 提供的 API 獲取一些有意思的推文來開發我的應用。
而更深入一點,第二個想法可能就是:查文檔了。

比如通過 Svelte 的文檔了解如何編寫一個簡單的組件。
但是有些文檔經常寫的很冗長,且沒有提供搜索,如果只是想簡單找到某個 API 的用法就會很困難;而好一點的文檔可能提供比較方便的搜索功能,這樣可以或多或少減少解決問題的時間。

比如 Vue 的文檔,提供方便的搜索功能。
上述方法我們一直都在使用,但是問題就是需要頻繁切換,來回查找,一般人寫代碼的時候可能需要專注思考,如果頻繁在搜索引擎頁面、文檔頁面與代碼編輯器進行切換,就會打斷思路。

上述的場景很熟悉對吧?🌚 是不是本來就不大的桌面,還窗口滿天飛。

基于上述痛點,全球最大的同性交友網站 Github 發布了 Github Copilot!一個全新 AI 代碼助手,在編輯器中寫代碼或編寫注釋描述代碼時,自動為你生成接下來需要編寫代碼的提示,讓你無需再進行各種搜索、查文檔的操作,所有的操作都在編輯器里完成!
先來一個直觀的例子了解一下 Github Pilot 有多強大吧。

上述代碼中寫了一段注釋,描述要寫一個判斷函數,使用 Web 服務獲取一段文本,判斷這段文本的感情是積極的還是消極的,然后引入了 fetch 函數用于抓取本文內容,寫了函數名給定了輸入和返回值的類型,然后突然 Github Copilot 就把接下來可能要寫的代碼給生成好了!Amazing!

可以看到生成的代碼不是胡亂而沒有邏輯的,它使用了 fetch 去抓取對應的鏈接,然后使用 await 處理異步請求,拿到結果之后通過結果中的內容判斷是否文本所帶的感情是積極的,更棒的是它還能自己給出要抓取的鏈接,都不需要自己去盲目的搜索 🧐,高效!
上述代碼如果需要一個工程師直接寫的話,可能首先得了解 fetch 的用法,然后將用法復制過來使用,接著去百度、Google 去找一下那些 API 服務可以使用,然后了解這個 API 服務的返回體長什么樣子,才能寫出上面的代碼。
好家伙,CV 工程師直接下崗,產品經理也能寫代碼了。

除了上面根據注釋自動生成代碼外,其實 Github Copilot 還有很多有意思的功能,接下來我們就來一一了解一下。
特性
去掉復雜🌟
當你在寫一些重復代碼時,Github Copilot 會自動為你填充接下來你可能要寫的代碼:

來點測試🏋??♂?
一段健壯的代碼需要完善的測試,但是編寫單元測試有時候是冗長無味的,但是 Github Pilot 能帶給你一些不一樣的體驗,只需要導入你的單元測試包,然后它就會為你寫的代碼生成對應的測試代碼:

畫個圖吧🌈?
只要你導入對應的包,然后給定合理的命名,Github Copilot 就能寫出接下來你可能想寫的代碼,比如導入 D3,然后寫一個 drawScatterplot
變量,就能生成如下代碼:

除了 JS、Python,還有更多?🎉
得益于 Github 為全球最大的代碼庫,包含各種各樣最全面、最新鮮的代碼,Github Copilot 能夠支持各種語言的生成,如 JS、Python、Ruby、TypeScript、Go 等等。

成為 Tab 工程師?😼
上述我們知道 Github Copilot 可以根據注釋生成代碼、自動填充重復代碼、為你的代碼生成測試,基本解決了你在寫代碼時可能需要的各種需要打開多個窗口的問題,這些特性降低了新人學習編程的,以及了解一個庫了,想學習新的語言和庫的門檻。
但是有時候 Github Copilot 第一次生成的代碼并不是你想要的,這個時候它也為你提供了可選項,你可以通過 option+]
(在 Windows 上是 Alt
)選擇下一個,option+[
選擇前一個,Tab
來接受 Github Pilot 為你推薦的代碼。

所以說,CV 工程師轉崗成為 Tab 工程師了🐴?

從此鍵盤只有 Tab🌚。
我能使用🐴?
答案是可以,但是不能馬上使用。

因為 Github Pilot 強大的背后是使用了非常昂貴的硬件設備作為支撐,所以消耗巨大,所以目前只開放給少部分人使用,用于了解用戶如何使用它以及探索如何規模化商用的模式。

但是根據我和我周圍同事的經驗,基本只要申請了都能通過使用,但是從申請到通過還有一段時間,大概需要 1-2 天。
如何申請?
訪問 https://copilot.github.com/ ,點擊注冊:

然后關聯你的 Github 賬號,進行申請,最后會收到這樣的提示:

上面提示已經加入等待列表,等待正式的郵件通知就可以使用了。
如果你已經申請通過了,那么接下來就需要在編輯器里面下載對應的插件,目前 Github Copilot 只支持 VSCode、JetBrains 編輯器、Neovim,后續將會支持更多的編輯器,所以如果你想體驗功能,那么你需要下載對應的編輯器。我們以 VSCode 為例,打開編輯器在擴展里面搜索 Github Copilot,或訪問 https://marketplace.visualstudio.com/items?itemName=GitHub.copilot 鏈接下載:

安裝完之后,當你新建一個文件或打開一個文件編輯時,編輯器右下角會提示 Github Copilot 需要請求 Github 登錄授權:

你只需要點擊登錄,然后在打開的 Github 授權網站使用你剛剛申請 Github Copilot 的 Github 賬號登錄進行授權即可。
好了,大功告成!接下來你就可以使用你熟悉的語言開始寫代碼了,然后享受 Github Copilot 夢幻般的代碼提示吧!偷偷的告訴你,我身邊的同事用了都說好 🤪。

背后的原理
相信很多小伙伴看到這里都會很好奇,Github Copilot 這么智能,背后是如何實現的呢?
其實 Github Copilot 基于 OpenAI 提供的 CodeX AI 模型,使用大量的開源代碼與互聯網上的自然語言進行訓練,使得它能夠比其他代碼助手更加的智能,能夠從你當前正在編輯的文件中理解代碼和自然語言(如注釋)的上下文,然后根據訓練所學的知識,給出它認為最合理的幾個答案(代碼)。
Github Copilot 給出代碼提示的大致的過程如下:

簡單剖析一下就是:
先使用 OpenAI 的模型 CodeX 提取公網代碼與互聯網的文本為語料進行訓練
然后使用 Github Copilot 作為服務提供層
接著用戶將插件下載到編輯器,在寫代碼時激活 Github Copilot 服務,將代碼上下文發給 Github Copilot 服務,然后獲取代碼建議
用戶可以選擇自己想要的代碼選項,或對生成的代碼進行修改以滿足自己的需求,而這些選擇和修改記錄也會發送給 Github Copilot 服務,以幫助 AI 模型變得更加智能

你需要注意的📢
Github Copilot 雖然很強大,但是在使用時也會有一些問題需要注意🙋🏻?♀?。
Github Copilot 會取代程序員嗎?
不會,Github Copilot 主要的作用是輔助程序員編碼,減少一些冗余的手工勞動,專注于有意思問題的解決,讓程序員更具有生產力。
Github Copilot 生成的代碼具有知識產權嗎?
沒有,你可以把 Github Copilot 作為一個編譯器或者更加底層的東西,它給你提供建議,幫助你寫更好的代碼,最后的代碼所有權歸你自己所有。
我能將 Github Copilot 生成的代碼用于生產環境嗎?
可以,但是建議你對待這些代碼就像是你寫的一樣,對其進行嚴格的測試、代碼審查,因為用于訓練 AI 模型的語料可能是過時的、有問題的,雖然 Github Copilot 會對其進行不斷的迭代并設置一些規則確保有問題的、過時的代碼不會生成,但是也很難完全保證這些規則能覆蓋所有的情況。
Github Copilot 會獲取我的私人數據?侵犯我的隱私嗎?
不會,Github Copilot 目前只會分析你編輯文件內容的上下文,同時設定了嚴格的私人信息的過濾規則,如將私人郵箱數據替換成通用的郵箱格式 xxxxx@qq.com 等,而不會分析你電腦上其他的數據,同時在給你推薦生成的代碼時,也會對代碼進行嚴格的過濾。
同時上傳的內容也只會保存到 Github Copilot 的數據庫,不會開放給其他人使用。

以上就是關于 Github 王炸產品 Github Copilot 的相關介紹了,你對這個產品怎么看呢?
最近組建了一個江西人的前端交流群,如果你是江西人可以加我微信?ruochuan12?私信 江西?拉你進群。
推薦閱讀
1個月,200+人,一起讀了4周源碼
我歷時3年才寫了10余篇源碼文章,但收獲了100w+閱讀
老姚淺談:怎么學JavaScript?
我在阿里招前端,該怎么幫你(可進面試群)