天天看點

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

作者:閃耀之星AK

一、背景介紹

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

咱們來聊聊AI智能程式設計代碼助手這個話題吧。現在,越來越多的開發者都需要用到這個必備工具。當下主流的幾個AI智能程式設計代碼助手包括Github Copilot、Codeium、Tabnine、Replit Ghostwriter和Amazon CodeWhisperer。

你可能已經嘗試過其中的一些,也可能還在不斷尋找最适合自己或公司使用的程式設計助手。但是,這些産品都會使用精選代碼示例來實作自我宣傳,是以如果不親身使用很難知道哪一個最好。

是以,在這次評估中,我們會從多個方面對這五種主流的AI代碼助手(Github Copilot, Tabnine, Replit Ghostwriter ,Amazon CodeWhisperer和 Codeium)進行綜合評估。我們會從不同的角度去評價每個産品:

  • 功能和價格:對于大部分功能相似的工具,價格無疑成為了其中一個重要标準。
  • 延遲時間:産品生成建議的速度有多快?
  • 建議品質:人工智能生成的建議有多好/準确/無Bug?

以下是對Github Copilot、Tabnine、Replit Ghostwriter、Amazon CodeWhisperer和Codeium的綜合評估結果:

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

二、功能和價格

我們知道,開發人員幾乎每天都在使用IDE工具,并且一直在尋找最佳解決方案。我們将從以下方面對比産品特點:

  • 有些産品對普通開發人員來說可能限制過多,使用時間也有限制;
  • 一些産品比其他産品更易用,操作界面更簡潔直覺;
  • 功能和擴充性是評估産品優劣的重要标準,尤其是針對複雜場景和需求的項目;
  • 穩定性和可靠性也是選擇産品時需要考慮的因素之一,尤其是在高壓力和長時間使用的情況下。

下面我們将就功能和價格兩個方面對AI代碼助手進行評估,來幫助開發人員選擇最适合自己和公司使用的工具。

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

選 AI 代碼助手要看能力和功能,不同公司定義可能不一樣,是以要綜合考慮。最基本的功能是單行和多行代碼完成功能,但測試和評估延遲和品質等名額也很重要哦。

三、功能和價格總體評級

Codeium是一個AI代碼助手,旨在普及、注重隐私保護和提供最優惠價格。它支援多種IDE和語言,并提供内置聊天功能。基于功能和價格,Codeium在這個方面排名最高。然而,這并不代表延遲或品質方面也最好。我們注意到其他競品定價過高,使得它們對大多數全球開發者來說不可接受。

Codeium的使用費用與Github Copilot等競品相似,是以存在市場競争壓力。雖然在一些細節方面存在差異,如IDE數量和支援語言,但這并不足以完全解釋Github Copilot和Tabnine之間的差別。Replit Ghostwriter強制使用Replit IDE,且安全性和隐私方面不透明,是以排名較低。

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

四、延遲

代碼自動補全的速度對于常用電腦的使用者非常重要,需要盡可能快地顯示建議内容。做大規模的模型推理時,我們暫停時間不能超過150毫秒,還需要考慮模型架構、訓練資料和模型優化等因素。

為了讓各種工具公平競争,我們選擇了一個相對标準的方法來測試它們的速度,每個工具都要使用新的/重新整理後的IDE執行個體進行測試,以消除緩存的影響。如果使用者需要建議但沒有收到,我們會稍作延遲,模拟實際程式設計情況。

我們選擇了一個經典問題-在Python中建立支援添加新節點和搜尋資料的連結清單類,并編寫一個測試。因為這個問題的答案很明确,是以可以用來測試各種工具的速度。

4.1、Github Copilot

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

在我們實際測試Copilot時,我們發現它沒有在一些非常顯然的地方提供建議。例如,在LinkedList類定義後的init中,并沒有給出Node類的init的建議。此外,雖然insert是一個模糊的函數名稱,是以Copilot隻建議在頭部添加節點而不是尾部。這并不是不合理的,但我們需要浏覽幾個建議才能找到我們想要的。這增加了使用時間,每次掃描多行代碼都會消耗更多的時間。但是,Copilot的速度非常快。

4.2、Tabnine

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Tabnine的速度非常快,但它在建議中可能會添加一些我沒有預料到的代碼,例如超出目前方法範圍(例如超出目前init定義)或列印結果而不是assert語句。話雖如此,在這個例子中,Tabnine的速度與其他工具一樣快。Tabnine聲稱運作用戶端上的小模型和遠端的大模型的混合模式,是以在使用本地小模型時,就不會遇到任何網絡延遲開銷,并且可能會更快。當然,這樣做會以品質為代價。

4.3、Replit Ghostwriter

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Ghostwriter的延遲通常是合理的。唯一感覺相對較慢的地方是當它決定逐行而不是整體或分塊建立插入函數時。在我們期望有負面情況的建議但直到大部分輸入完畢才獲得時,延遲會增加。最後,還存在一些次要的品質問題,例如在搜尋完成時添加一個不需要的删除函數定義并從搜尋中傳回節點而不是布爾值,但這些可以忽略作為延遲評估的一部分。

4.4、Codeium

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

與Copilot類似,Codeium在預期期間沒有獲得LinkedList類上的init,進而增加了整體體驗的延遲。否則,Codeium在合理的延遲下提供準确的多行完成,并且測試的單行完成速度很快。值得注意的是,由于基礎設施和擴充邏輯的改進,Codeium不再具有這些延遲問題。

4.5、整體延遲評級

總的來說,所有工具的建議生成延遲都在人類視覺反應時間範圍内是合理的。實際上,整體使用體驗中的許多差異是由于結果與預期不同導緻的,比如我們期望會有建議,但卻沒有收到,或者必須編輯或删除接受的建議。是以,建議生成延遲沒有顯著變慢,而品質可能是對開發人員整體價值産生更大差異的因素。

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

五、品質

品質是一個非常主觀的次元,但也是必須考慮的。不然誰都可以提供一個完全無用的快速示範功能。

為了消除偏見,我們從非Codeium産品的首頁上找到一些推薦示例。這些精選示例可能是這些替代方案創造準确、無錯誤代碼的更讓人印象深刻的示例。雖然我們讓Codeium處于劣勢,但我們還将通過對工具和示例進行完整的交叉評估其他替代方案在非精選示例上的表現。

我們選擇來自不同語言、自動補全用例和問題域的四個示例:

  • Github Copilot:外部API(TypeScript)
  • Github Copilot:資料庫(Go/SQL)
  • Tabnine:機器學習/常用包(Python)
  • Replit Ghostwriter:樣闆/單元測試(Javascript)

5.1、外部API(TypeScript)

任務:在TypeScript代碼中使用外部API,計算輸入文本的情感是否積極。這是Github Copilot首頁上的展示樣例:

5.1.1、Github Copilot

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

我們期望Copilot在這個示例中表現很好。它是一個示範示例,可以通過在不同的外部端點之間循環選擇來生成多個完全功能的方法體。真是幹得好!

5.1.2、Tabnine

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Tabnine的表現并不是很好。它提供了一個本地主機URL的建議,是以沒有通過建議API來完成任務,而且在建議前面添加了一堆不必要的字段和注釋版本。

5.1.3、Replit Ghostwriter

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Ghostwriter在查找URL方面表現良好,但需要明确提示它提取情感資訊而不僅僅傳回擷取是否成功。

5.1.4、Codeium

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Codeium表現正常,與合理的外部端點預期一樣工作,并且還添加了相應的錯誤處理!

5.2、資料庫(Go / SQL)

任務:給定一個表結構和一個描述性的函數名,通過SQL查詢計算聚合統計資訊。同樣來自Github Copilot首頁:

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

5.2.1、Github Copilot

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

我們期望Copilot在這裡表現良好,因為這是他們挑選出來的示例之一,正如我們所預期的那樣,Copilot完全掌握了這個示例,并且不需要進行任何編輯。

5.2.2、Tabnine

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Tabnine在查詢方面遇到了很大困難,沒有展現出對表的語義了解,嘗試建立CategorySummary對象中不存在的字段。同時,在需要添加錯誤處理的地方錯過了一些細節,而在不必要的地方則試圖添加它。總體來說,在這種情況下,我們對Tabnine的信心不高。

5.2.3、Replit Ghostwriter

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Ghostwriter首先嘗試建立一個新表,然後推薦的查詢甚至不是有效的查詢,更别提正确解釋createCategorySummaries的語義了(在不存在tasks列的情況下嘗試選擇任務)。一旦我們寫出整個查詢,Ghostwriter需要手動更改第一個錯誤處理,但之後結果看起來很好。

5.2.4、Codeium

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Codeium了解按類别聚合的概念,但錯過了COUNT聚合(可能是因為它沒有了解任務表中的行數等于彙總對象中的任務字段的語義)。除此以外其他方面表現良好,無需修改。更新:自從釋出這篇文章以來,Codeium在Go和許多“罕見”的語言上的品質有所提高,這是由于對訓練資料消毒和訓練資料采樣邏輯的改進。

5.3、機器學習/常用包(Python)

任務:經典的機器學習訓練流程,包括資料加載、測試/訓練分割、使用常用包(如sklearn)進行訓練和生成評估結果。以下是在Tabnine首頁上的示例:

5.3.1、Github Copilot

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Copilot在處理sklearn metrics方面遇到了導入問題,甚至在手動逃脫之後仍然進入了導入錯誤的循環。它還假設标簽列是訓練-測試分割中的最後一列,這不一定是錯的,但肯定是一個假設。除此之外,結果看起來很好。

5.3.2、Tabnine

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

作為一個手工精選的示例,我們預計Tabnine在這個例子中表現良好,但是同樣存在導入太多的sklearn metrics的問題,假設标簽列位于最後一列,并且即使沒有導入相關子產品也使用了imports(如sklearn.metrics.meansquarederror)。總體而言,它的表現并不是特别出色。

5.3.3、Replit Ghostwriter

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Ghostwriter也在不斷導入sklearn metrics,最後還嘗試使用sklearn.metrics.meansquarederror工具,但沒有實際導入。此外,訓練-測試分割也不正确,因為pd.read_csv不傳回帶有值和目标屬性的對象。在這個例子中,Ghostwriter的表現最不出色。

5.3.4、Codeium

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Deep TabNine并沒有遇到導入問題或使用不存在的import,但假設Survived是标簽列,則與Copilot或Tabnine不同。除此之外,結果符合我們的預期。

5.4、模闆代碼 / 單元測試(JavaScript)

任務:快速生成模闆代碼和單元測試代碼,以節省打字時間。如Replit Ghostwriter示範所示:

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

5.4.1、Github Copilot

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

在這個任務中,Copilot遇到了一些困難。它提供的建議經常會重複早期部分,完全沒有意義,但是即使在接受時,插入的代碼與提議看起來完全不同。即使它給出了合理的建議,它們也會與現有的代碼不正确地合并,進而生成需要手動删除的額外字元。我們期望測試的右括号和分号應該被建議,但最終我們還是不得不手動添加。使用Copilot在生成這個樣闆代碼時,比起手動輸入反而更加繁瑣。

5.4.2、Tabnine

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

(作為警告,測試TextDecoderStream替換并不是Tabnine的問題,這隻是我們本地Intellisense的問題)

對于Tabnine,在生成測試用例代碼時,建議添加了一些與測試描述無關的測試用例,并且存在一些縮進錯誤。此外,像我們在連結清單示例中看到的那樣,它似乎不了解“函數作用域”的概念,在這裡建議應該在目前範圍結束時結束。例如,我們期望建議在一個測試用例結束時結束,并在之後提供另一個建議開始一個新的測試用例,而不是把兩個建議放在一起(強迫我們在鍵入我想要的部分和接受+删除我不想要的部分之間做出選擇)。

5.4.3、Replit Ghostwriter

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

Ghostwriter在自己的示例中犯了一些很小的錯誤,比如在第二個測試用例中為參數添加了"done",但除此之外很幹淨。

5.4.4、Codeium

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

在這個任務中,Codeium表現符合我們的期望,除了測試用例的末尾缺少分号之外。

5.5、總體品質評級

經過主觀評估,Github Copilot和Codeium在滿足任務目标方面的一緻性大緻相同,需要手動幹預的比例也相似。相比之下,Replit Ghostwriter的表現略低,而Tabnine的表現則較差,無法解決大部分任務,出現了大量錯誤,讓它更像是一個幹擾者而不是助手。

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

六、總體評估

雖然這種方法不是很科學也不是很準确,但将各項評分相加是一種彙總名額。

五大AI程式設計工具(Copilot、Tabnine、Codeium)綜合評估分析

這篇文章比較了Copilot和Codeium,它們在使用場景和預算方面存在很大差異。如果您不介意支付每年100美元或者不需要在線上筆記軟體或Web IDE(如Gitpod)等平台上使用,那麼Copilot可能更适合您。雖然其他選項也很有潛力,但目前看來還不及Copilot。

我們還沒有評估這些産品的增長潛力。Copilot已經存在了一年半,由OpenAI和Github共同推出,這兩家公司可能在持續的開發方面沒有對齊的動機。另一方面,Codeium在幾個月内就趕上了,這主要歸功于我們的完全垂直整合,可以跨整個堆棧做出決策優化,進而實作了非常流暢的體驗。與Copilot不同,我們積極聽取并采納使用者回報,并建立了一個活躍的Discord社群。值得一提的是,自從釋出該文章以來,Codeium還推出了自然語言搜尋功能,更多功能即将推出。而Copilot的項目,如Copilot for X,還未從Beta版轉入生産。

總之,這種評估方法本質上是有限的。雖然它可能在一定程度上改變您的觀點,但我們認為,隻有親自嘗試Codeium才能确信它是并将繼續成為适用于您的情況的#1 IDE AI動力代碼輔助工具。請記住,我們是免費的,安裝時間不超過2分鐘,是以請在我們的Web Playground中嘗試,無需任何安裝。如果您喜歡我們的内容,請點選下面的按鈕擷取Codeium。

七、如何選擇

關于這幾款AI程式設計輔助工具,在前面的文章中都有從功能和使用層面做過詳細的介紹,需要做進一步了解實戰的可以去合集中檢視,從我的整體使用感受來看,總結幾點如下:

1、如果有條件購買Github Copilot或者你所在的公司統一采購了Github Copilot企業服務,可以優先選擇(對學生/開源貢獻者免費)

畢竟Github背後的東家是微軟,而GitHub Copilot是基于OpenAI(微軟最大的投資者)的Codex模型在編寫代碼方面進行了改進和優化後開發而來的,具備優先結合GPT模型的天然優勢。

同時Github作為全球主流的代碼托管平台,開源社群之一,Copilot基本Github公共庫代碼進行訓練,未來不管是産品增長方面還是資金扶持方面都具備很大的優勢。

2、對于個人日常開發來講,在具備Github Copilot同等能力的平替産品Codeium可以作為智能代碼提示方面的首選。

Codeium不僅僅提供代碼智能提示生成方面的能力,同時還提供了代碼智能檢索、智能聊天功能,其對于語言和IDE的支援目前來看應該是最豐富且完善的,而且還支援網頁Notebook類應用的代碼智能提示。

Codeium所使用的語言文本模型基于最新的自然語言處理技術自主研發,與Open AI公司代表的GPT模型不一樣

Codeium由一群外籍華人團隊成立的初創企業,其Exafunction團隊也具備AI方面的背景,社群活躍度較高。

3、對于AWS最新釋出的CodeWhisperer,在同類競品中目前優勢不明顯,但不排除有後起之勢。

可以先等待AWS後續版本推出,目前的版本體驗不太好,延遲也比較高。

八、免責聲明

首先,本文結合個人使用不同AI代碼助手的實際感受和官網介紹的總結而來。對于産品對比評估,僅代表個人觀點,供大家參考和學習交流之用。畢竟,隻有真正使用過才權評價。AI領域發展迅速,同類産品層出不窮,如果不認真去嘗試,會很難選擇到适合自己所需的tools。

其次,這些産品都在快速地疊代和發展中,不斷進行優化和改進,是以本文僅作為同類産品的對比參考,沒有下結論。我們無法明确回答誰是NO.1、誰的品質最高、速度最快等問題。

繼續閱讀