清華系「自然語言編程神器」上新!支持100+種編程語言,效率upup
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
清華和智譜AI聯合打造的多語言代碼生成模型CodeGeeX,更新了!
它支持的編程語言種類從原來的20種增加到100多種。
通過IDE中的插件,可以輕松實現「無縫自然語言編程」。
圖片
由于使用了新版基礎模型,CodeGeeX2的功能更加強大。
據了解,這次的新版本,精度和速度分別是原來的兩倍和三倍,內存消耗卻只有1/5。
代碼生成、解釋、翻譯、糾錯和編程問答等工作,效率都比以前有顯著提高。
作為「課代表」,我們把CodeGeeX的更新概括成了下面這幾個方面:
- 代碼能力更強了
- 模型特性得到了優化
- AI編程助手功能更全面了
- 用戶協議更加開放
插件版本也將全面更新
模型用起來太繁瑣?沒關系,除了模型本身的更新,CodeGeeX的插件版本很快也將全面升級至新版。
新插件同樣支持超過100種編程語言,說不定比我們知道的還要多。
這之中除了Python、Java等我們耳熟能詳的語言之外,還包括Swift、Kotlin等移動端新興勢力。
甚至像Rust這種系統級的編程語言,也在CodeGeeX2的能力范圍之內。
比如下面這張動圖就展示了CodeGeeX2生成Kotlin代碼的場景。
圖片
代碼生成的速度簡直比人類輸入指令的速度還快。
而且從中我們可以看到,CodeGeeX2添加注釋或debug都能一鍵完成。
不僅是設計算法,實用程序的編寫也是小菜一碟。
補全個vue.js代碼,搭建出網頁,效率杠杠的!
圖片
除了這些代碼相關的任務,CodeGeeX2還有很多其他應用場景。
比如查詢SQL數據庫。
只要打開問答模式,用自然語言描述想要查詢的內容,CodeGeeX2就能自動生成SQL查詢語句。
圖片
模型變強之后,會不會收費呢?不必擔心,新版CodeGeeX插件將繼續對個人用戶免費開放。
而6B參數的CodeGeeX2,也已經進行了開源,相關代碼可以到GitHub倉庫中查看。
GitHub Copilot的模型也不是對手
OpenAI的HumanEval評測標準可以很好地評價生成代碼的表現。
這個名字很容易理解:模型生成的代碼質量如何將由人類來評價。
在HumanEval評測中,6B參數的CodeGeeX2的得分比15B參數的StarCoder模型還要高,可謂是四兩撥千斤。
而GitHub Copilot中曾使用的Code-Cushman-001模型同樣不是CodeGeeX2的對手。
不過,CodeGeeX畢竟是一個多語言模型,而HumanEval卻只支持Python。
所以,為了更加準確地測試CodeGeeX的表現,智譜團隊在其基礎上增加了Go、C++、Java和JS四種語言的測試數據,得到了HumanEval-X數據集。
結果顯示,在多語言方面,新版CodeGeeX2的表現和在Python中一樣優異。
相較于第一代,CodeGeeX2的Pass@1指標在各個語言上的平均表現提升了107%。
其中,Rust語言的性能提升顯著,提升了321%;C++和JS語言上的表現也提升了70%以上。
而在代碼翻譯方面,CodeGeeX2的表現同樣碾壓對手。
「不看廣告看療效」,CodeGeeX不僅測試結果優異,用戶的認可度也是很高的。
在「CodeGeeX是否提高了編程效率」這一問題中,有83.4%的用戶給出了正面的答案。
除了調查結果,用戶們也在「用腳投票」。
自第一個版本發布以來,CodeGeeX的下載量已達12萬次,平均每天生成近千萬行代碼。
這是個什么概念呢?如果只看代碼行數,相當于不到一周的時間就寫出一套Windows XP。
說了這么多,CodeGeeX又該如何體驗呢?
快速體驗
第一種方式就是IDE中的插件,VScode和JetBrains系列IDE的插件倉庫中均有收錄。
除了使用IDE中的插件之外,CodeGeeX也可以在Transformer中快速調用。
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/codegeex2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/codegeex2-6b", trust_remote_code=True, device='cuda')
model = model.eval()
# remember adding a language tag for better performance
prompt = "# language: python\n# write a bubble sort function\n"
inputs = tokenizer.encode(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(inputs, max_length=256, top_k=1)
response = tokenizer.decode(outputs[0])
>>> print(response)
# language: python
# write a bubble sort function
沒有支持的IDE,Transformer又覺得麻煩,但還是想體驗怎么辦?
沒關系,這里還有個還有在線版DEMO。
傳送門:https://codegeex.cn/zh-CN/playground
趕快來感受一下「無縫自然語言編程」吧!
論文地址:https://arxiv.org/abs/2303.17568
Github項目頁:https://github.com/THUDM/CodeGeeX2
Hugging Face項目頁:https://huggingface.co/THUDM/codegeex2-6b