CodeGeeX能打過Copilot嗎?
寫在前面
CodeGeeX是一個類似于Github Copilot的、擁有130億參數(shù)的多編程語言代碼生成的預(yù)訓(xùn)練模型,是由清華大學(xué)、智譜AI等機構(gòu)共同研發(fā)的。
當(dāng)前CodeGeex是開源免費使用的CodeGeex開源地址,相對于Copilot的使用方式?jīng)]有那么陡峭,CodeGeex使用文檔還是比較簡單的。
CodeGeeX無需VPN,可以直接在vscode插件平臺安裝使用,上手簡單。
CodeGeex的4種使用模式
CodeGeex包含4種使用模式,分別是:
- 隱匿模式
- 交互模式
- 翻譯模式
- 提示模式
隱匿模式
CodeGeex處于激活狀態(tài)時,停止輸入內(nèi)容后,就會從光標(biāo)處開始生成內(nèi)容,生成待選內(nèi)容后會以灰色顯示,按??Tab鍵?
?即可插入生成結(jié)果。(這一點和Copilot一致)。
交互模式
按Ctrl+回車鍵激活交互模式,可以在右側(cè)窗口顯示生成的x個候選片段(x數(shù)量可以在設(shè)置的Candidate Num中修改,最多可以生成3個候選項,數(shù)目越多生成越慢),點擊候選片段上的use code即可插入使用。(這一點是有點困惑,在實際使用中只生成了一個候選項)。
翻譯模式
Windows系統(tǒng)是Ctrl+Alt+T,Mac系統(tǒng)是Ctrl+Option+T激活翻譯模式,CodeGeeX會把該代碼翻譯成匹配您當(dāng)前編輯器語言的代碼。點擊翻譯結(jié)果上方的use code插入。還可以在設(shè)置中選擇您希望插入的時候如何處理被翻譯的代碼,您可以選擇注釋它們或者覆蓋它們。(這個翻譯模式相比較Copilot是不友好的,沒有結(jié)合上下文生成匹配語言的代碼,反而要進行二次交互)。
當(dāng)選擇的內(nèi)容是純注釋,點擊Ctrl+Option+T可以選擇待翻譯的目標(biāo)語言,一次性生成代碼,個人體驗比隱匿模式更直接:
提示模式
官方demo:
可以對需要處理的代碼進行選擇,按Alt/Option + t觸發(fā)提示模式,此時會出現(xiàn)預(yù)定義模板列表(默認(rèn)的是只有Java和Python語言模板):
可以根據(jù)自己的需求在配置文件中的Prompt Templates,進行模板內(nèi)容添加和編輯:
模板內(nèi)容:
實際使用:
這個模式還需要探索,沒有達到預(yù)期。
額外功能(個人認(rèn)為可以歸納為編程語言轉(zhuǎn)譯)
可以點擊在側(cè)邊欄的CodeGeex插件,在input框輸入待處理代碼和選擇語言,在output框選擇目標(biāo)語言點擊Translate按鈕進行轉(zhuǎn)譯:
CodeGeex使用過程發(fā)現(xiàn)的問題
1、上下文結(jié)合能力不強,編碼能力較弱
CodeGeex對上下文的識別能力不是很好,當(dāng)我要它在ts文件中寫一個貪心算法解決股票買賣問題時,它給我的是c++語言的頭部引入:
我們看到官方給出的demo,也是如此,至少我沒想明白。
在重新讓它生成代碼時,它會給我補充注釋,但是補充的是英文,沒有結(jié)合上下文內(nèi)容:
翻譯模式下,這個引入的內(nèi)容不知道從哪兒來的:
明確要求使用ts語言生成代碼片段,還是直接候選的是c++頭部文件:
2、生成的內(nèi)容累贅,不夠簡潔,還標(biāo)注了模型訓(xùn)練代碼來源(屬實沒想到)
當(dāng)要它寫出一個快排算法示例時,萬萬沒想到還注釋了模型訓(xùn)練的代碼片段來源:
3、代碼生成較慢
簡單的代碼不能夠一次性給出,還要一小句一小句給出:
4、對JS/TS的支持不友好
在使用隱匿模式時,在py文件可以根據(jù)上下文生成代碼,在ts或js文件卻生成的是c#代碼。
寫在最后
在實際開發(fā)中,CodeGeeX的使用體驗是遠(yuǎn)差于Copilot,但是CodeGeeX是清華實驗室的開源免費項目,在算力支撐和數(shù)據(jù)量而言是遠(yuǎn)低于OpenAI?;贑odeGeeX項目的基礎(chǔ)上,可以進行私有部署,對算法模型進行改進優(yōu)化,還是需要支持蹣跚前行的國產(chǎn)開源模型的。
總之,還有許多需要做的。