開發者日常— 難道我們要被取代了嗎?AI coding tools
(Copilot, CodeWhsiperer, Bito) 使用心得!

Roy Lu
Tomofun Tech Blog
Published in
8 min readSep 11, 2023
Comparing Copilot, CodeWhisperer, and Bito: A Comprehensive Analysis.  Copilot, CodeWhisperer, and Bito 實測!

大家應該都有使用過近期紅到不行的 ChatGPT,這個 AI 語言模型可以自然的使用人類的語言進行對話,甚至還可以要它寫程式。

聽到它居然會寫程式,身為一個什麼都不會、只會寫程式的工程師我感到非常的緊張,難道我要被取代了嗎?為了阻止這件事的發生,就有了這次各種 AI coding tool 的試用心得。

今天會跟大家介紹這一個月以來,試用 Copilot、CodeWhsiperer 與 Bito 的結果,Copilot 與 CodeWhsiperer 分別為 Github 和 AWS 所開發,與ChapGPT 相同都是語言模型,而 Bito 更是直接使用 ChatGPT 4.0 當作引擎,這三套工具都可以與 VS Code & jetbrains 的 IDE 整合。 使用上 Copilot與 CodeWhsiperer 會在 Coding 的過程中理解使用者的意圖並自動生成可能的結果,Bito 則是與 ChatGPT 的使用方式相同,需要向 Bito 提問才會得到結果。

Copilot & CodeWhsiperer

首先要談的是 Copilot 與 CodeWhsiperer,會放在一起講的原因是這兩個工具的使用方式幾乎一模一樣,甚至生成的結果也是大同小異,真的要說區別的話大概就是 CodeWhsiperer 的 latency 比起 Copilot 要久了一點,在被各種工作淹沒的時候就不會有閒情逸致等它生成好,除此之外這兩個工具真的像到讓人覺得是不是使用同一個模型。

接下來會列出幾個我實際使用過的功能讓大家參考,全部都是使用 Python 進行。

Copilot 與 CodeWhsiperer 有優秀表現的地方通常是在有現有的程式可以參考的時候,所以如果可以把程式碼多加一些註解會對它的工作表現有很大的提升,以下是一個例子。

我的目的是要宣告出一個可以處理以下 json 資料的 class,我們先把 json 資料作為註解寫在程式開頭。

將json資料寫成註解

然後我們再定義出 class 的開頭,如下圖。

這個時候如果 IDE 有正確的安裝好 Copilot 與 CodeWhsiperer 的話,就會自動生成程式推薦的代碼。

可以看到 IDE 會顯示出一個 hint 分別對照 json 格式的 key,ShippingAddress 的部分它使用了另一個 class 來處理,我們一樣宣告一個叫做 ShippingAddress 的 class。

成功的生成了正確的屬性。

讓我們再寫一個 __init__ 建構子試試看。

灰色的文字部分是自動生成的代碼,確實完美的吻合我們註解上寫的json格式。

以上是一個成功的例子,然而現實卻不像這個例子那麼美好。

Copilot 與 CodeWhsiperer 確實抄作業的能力很強,只要自己的代碼裡面有相關的資訊,它可以很好的匯整出我們想要的結果,但這些都是建立在有足夠資訊的情況下。 以我自己開發的例子而言,寫註解?那是開發的最後一個步驟,大部分的情況都是先把功能寫好了才來寫註解,那這些工具唯一能參考的部分就是我們的 function name 與變數名稱了,僅有這些資訊的情況下這些工具並沒有辦法好好的做事,常常會生成奇奇怪怪的結果。

另外還有一個比較值得一提的缺點,在專案檔案數量較多的情況,它沒有辦法精準的判斷應該去哪一個檔案找特定的 class 或 function 的用法,那就會導致如果我們要使用它的功能,就需要把各個 class 集中在同一個檔案裡面讓它有辦法參照,才有可能產生出較好的結果。

總體來說,CodeWhsiperer 因為它的高度延遲,偶爾會在不預期的時候忽然出現 hint 影響到正常 Coding,個人是不推薦使用。Copilot 偶爾會有不錯的表現,穩定的低延遲也不會影響到 Coding,我覺得是一個值得一試的工具。

Bito

Bito 的使用情境與前面兩者非常不同,它需要用問答的方式來告訴它要寫的代碼的樣子,就很像是使用 ChatGPT 在產生代碼一樣,加上它與 jetbrains 的 IDE 有不錯的整合,可以做到真的融入日常開發。

Bito 與前兩者有一個關鍵性的不同,就是它有獨立開發的能力。同樣是要寫一個 RSA 加密的 function,Copilot 與 CodeWhsiperer 會亂寫一通,但Bito寫的確實能夠正確執行。

這邊舉一個有趣的例子。

使用 Python 產生出一個影片,這個影片會持續在不同顏色之間做變化。

這樣的一個 function 如果不是非常熟悉 video 相關 library 的工程師應該需要查一些資料才能做出來吧!我也是除了上網查之外沒有別的頭緒,就讓我們拿這個問題來問 Bito,以下是我的 input。

Write a python function to create a video with frames changed between black, red, green, blue and white every 1 second

我請 Bito 使用 Python 寫一個 function,這個 function 會建立一個影片,影片的畫面會持續在黑、紅、綠、藍、白之間切換,並且每個顏色持續一秒,來看看它的結果。

這個 function 確實是可以執行的,結果如下。

雖然大致上有做到需求,但它顏色的順序跟我給的指令並不相同。

指令是:黑、紅、綠、藍、白

實際上:黑、藍、綠、紅、白

即便如此,從這個例子中也能看出 Bito 是真的有獨立作業的能力,能夠聽懂任務內容並寫出可以運行的代碼,這是 Copilot 與 CodeWhsiperer 難以做到的。

不過 Bito 能夠做得這麼好的部分僅限於這些很共通、很基本的功能,檔案、聲音、圖片、影片,如果需要進一步讓它來幫我們寫程式邏輯,就也必須提供相關資訊給它了,就像前面提到的 json 資料一樣。

另外使用 Bito 撰寫 unittest 也是不錯的用法,它會列出一些基本的 case,像是 null case 或 division zero exception 之類比較偏系統的錯誤,讓我可以把重心放在真正要測的邏輯上。

總結

Copilot: ★★★★☆ 有何不可

Copilot 的 auto complete 的功能有時候還是很舒服,在我們日常開發沒寫什麼註解的情況下,偶爾還是能有不錯的表現,特別是在需要寫重複的程式碼,需要做多次複製貼上再改一點點東西的時候,它可以幫忙完成這些讓人心累的工作,作為一個 AI coding assistant tool 算是有達到它的使命,然而產生出來的內容未必完全正確請多留意。

CodeWhisperer: ★★☆☆☆ 有點囉嗦

功能上與 Copilot 大致相同,但較長的延遲讓人卻步,Coding 到一半被它的 hint打 斷真的讓人極度煩躁,在改善延遲狀況之前不會想要使用。

Bito: ★★★☆☆ 幫人家做一下

雖然十分喜歡 Bito 有著獨立開發的能力,奈何這個能力只能夠用在比較基礎的功能上,這些基礎功能我們並不會常常使用到,要用的時候也是查一下用法完事,實際上能派上用場的時機不多,並且它因為有 token 長度限制,也難以一次輸入很多程式碼讓它做事,使用上會偏向處理單一 function。

工程師真的會被取代嗎?

現階段而言這幾個產品都還在發展階段,尚未具備完整理解程式碼的能力,並且它們作為 coding assistant tools 也缺乏了真的能吸引到工程師們的功能。我們需要的不是有人幫我們複製貼上,而是需要一個能夠理解我們的程式碼並給出建議的工具,如果能夠掃描程式碼找到問題與缺陷,那就會對工程師們來說非常的有價值。

所以綜合以上幾點,至少我們工程師在短時間內還難以被取代,還需要各位新鮮的肝繼續努力。然而語言模型確實讓我感受到它的潛力,相信它們一定會一直進步,直到有一天真的超越人類,希望我們都能夠在那之前發展出新的事業,共勉之。

--

--