當前位置: 妍妍網 > 碼農

從 CodeGemma 到 CodeQwen1.5:開源編程大模型百家爭鳴

2024-04-19碼農

筆者最近剛剛試用完 CodeGemma ,準備分享我的心得時,通義千問的 CodeQwen1.5 就也悄然釋出。本文主要介紹 CodeQwen1.5 這款開源編程大模型,並展示如何在 VSCode 中使用它幫你提升編程體驗。

1. 開源編程大模型的必要性

大型語言模型(LLMs)在各行各業擾動風雲的今天,在編程領域也是首當其沖,掀起了一場變革,為開發者帶來了顯著的效率和準確性提升。然而,像 Github Copilot 這樣的基於專有 LLMs 的流行編碼助手,卻因其成本、私密、安全和潛在的版權侵權問題而備受詬病。因為除了參與的開源計畫外,我們也總會有很多私有和需要保密的商業計畫需要處理,這就使得將程式碼庫完全暴露給第三方服務變得頗為敏感。

這些擔憂催生了開源社群的積極響應,促進了對更加透明、更易於存取的替代方案的開發,並已經取得了顯著成果。具體來說,如 Codegemma、StarCoder2、CodeLlama 和DeepSeek-Coder 等開源模型的出現標誌著這一領域的重大進步。也讓普通的開發人員可以更加自由地選擇適合自己的工具,而不必受限於專有模型的局限。

2. 開源編程大模型的優勢

透明度: 開源模型的程式碼和開發過程公開透明,允許任何人審查和改進模型,確保其安全性和可靠性。這與專有模型的封閉性質形成鮮明對比,後者可能會隱藏潛在的缺陷或安全漏洞。 可存取性: 開源模型通常是免費提供的,降低了門檻,使來自世界各地的人,無論經濟狀況或背景如何,都能使用和貢獻。這對於促進全球範圍內的技術進步和創新至關重要。 協作: 開源模型鼓勵協作和共同開發,匯聚來自不同背景和專業知識的貢獻者,共同完善模型。這種集體智慧可以推動更快速、更有效的創新,並最終帶來更強大的模型。 道德規範: 開源社群致力於開發負責任和符合道德規範的 AI 技術。開源模型可以更容易地進行審查和修改,以確保它們符合道德準則,並避免偏見或歧視。 靈活性: 開源模型可以根據特定需求進行客製和調整,使其適用於各種套用場景。透過加入自己或自己組織的專有程式碼庫進行訓練微調,可以使其更適應自己的編碼風格。

開源編程大模型為編程工具的未來開辟了令人興奮的可能性。透過透明、協作和創新的精神,我們可以共同構建更強大、更有用且更具道德責任感的編程工具,造福所有人,而不僅僅是開發人員,也包括不會編程的人。相信未來,越來越多的普通人會透過編程大模型讓他們的創意和想法變為現實。

3. CodeQwen1.5 的特點

Qwen

CodeQwen1.5 是通義千問的開源編程大模型,它具有以下幾個特點:

強大的程式碼生成能力: 能夠生成自然、準確且符合語法規範的程式碼。 優秀的長序列建模能力: 可以處理長達 64K 的上下文輸入,在處理復雜程式碼時表現出色。 出色的程式碼修改能力: 可以根據需求對現有程式碼進行修改或最佳化。 強大的 SQL 能力: 可以生成 SQL 語句,並對資料庫進行查詢和操作。 支持多種程式語言: 支持 92 種程式語言,覆蓋了主流的程式語言。 高效的參數規模: 擁有 7B 參數,在保證效能的同時,模型大小也相對適中。

Qwen 語言模型是一個經過中文良好訓練的大型語言模型,這為 CodeQwen1.5 提供了良好的基礎。GQA 架構是一種先進的模型架構,可以提高模型的效能和效率。同時,CodeQwen1.5 是在 ~3T tokens 的程式碼相關數據上進行預訓練的,這使得它能夠更好地理解和處理程式碼。支持 92 種程式語言,具有很強的通用性。

基於以上的特點和優勢,CodeQwen1.5 在編程輔助工具中具有廣泛的套用前景,可以幫助開發人員提高編程效率,減少編碼錯誤,加速計畫開發行程。

自動程式碼生成: 可以根據需求自動生成程式碼,幫助開發人員節省時間和精力。 程式碼最佳化: 可以對現有程式碼進行最佳化,提高程式碼的可讀性和可維護性。 程式碼測試: 可以自動生成測試用例,幫助開發人員發現程式碼中的缺陷。 程式碼文件生成: 可以自動生成程式碼文件,幫助開發人員了解程式碼的結構和功能。

4. 模型獲取和部署

CodeQwen1.5 是一個開源模型,可以透過 GitHub 獲取原始碼,並獲取相關資料和介紹: https://github.com/QwenLM/CodeQwen1.5?wt.mc_id=DT-MVP-5005195

對於模型檔,可以非常方便的透過 抱抱臉(Hugging Face) [1] 魔搭(ModelScope) [2] 獲取。同時,CodeQwen1.5 也提供了 Guff 和 AWQ 格式的量化版本,可以方便的使用不同的方式部署使用。

對於普通使用者,低成本,簡單易操作的方式我推薦使用 Ollama 提供的 Windows 客戶端,內建 Cuda 環境,可以直接使用 GPU 進行推理,提供了非常好的使用體驗,只需要下載安裝即可: https://ollama.com/

ollama

在執行 Ollama 程式後,需要我們開啟控制台自行拉取模型檔執行,即可開始使用 CodeQwen1.5 進行編程輔助。

模型有兩類,一類是 code 用於程式碼補全,一類是 chat 用於對話生成。在使用時,我們可以根據自己的需求選擇不同的模型進行使用。

ollama pull codeqwen:chatollama pull codeqwen:code

拉取模型

我們可以使用上面的命令拉取這兩種模型檔,當然你也可以前往 Ollama 的 CodeQwen 模型庫 [3] ,尋找不同量化精度的版本,這樣可以根據自己的需求選擇合適的模型檔,當然模型的檔大小和推理速度也會有所不同。

模型拉取完成後,我們可以使用下面的命令來執行模型,當然也可以直接使用下面的命令,會自動完成模型拉取和執行。關於 Olamma 的更多的使用方法,大家可以自行搜尋學習,相關文章非常多,這裏不做過多的介紹。

ollama run codeqwen:chat

執行後我們就可以在控制台中與大模型進行交流了,CodeQwen1.5 除了程式碼生成,技術文件的生成也是非常的出色。

對話

5. 在 VSCode 中使用

對於開發人員來說,最便捷的使用當然是整合到 IDE 中。最常用的 IDE 莫過於 VSCode 了,那麽如何在 VSCode 中使用 CodeQwen1.5 呢?這裏筆者推薦使用 Twinny [4] 外掛程式,這是一個非常好用的外掛程式,可以幫助我們在 VSCode 中使用 CodeQwen1.5 進行編程輔助。

Twinny

作為一個開源計畫,Twinny 外掛程式提供了豐富的功能,包括程式碼補全、程式碼生成、程式碼最佳化、程式碼測試、程式碼文件生成等。透過簡單的配置,我們就可以在 VSCode 中使用 CodeQwen1.5,提高編程效率,減少編碼錯誤,加速計畫開發行程。

最重要的一點是,該外掛程式支持多種模型的部署提供方案,並且允許我們自行修改提示詞,以最佳化我們在不同模型中的使用表現。這為我們提供了更多的選擇和靈活性,使我們能夠更好地適應不同的編程場景。

5.1 外掛程式配置

外掛程式預設使用的 Codegemma ,我們需要透過以下操作修改配置。在側邊的對話功能頁,點選類似插頭的配置圖示:

配置引導

之後我們會看到兩個預設的配置,一個用於 Chat 對話,一個用於 FIM 補全,我們需要逐個將其修改為剛剛拉取的 CodeQwen 模型即可。

配置修改

需要註意的是,FIM 模型的配置時,CodeQwen 的 Fim Template 需要設定為 stable-code 。其使用的格式準則涉及使用三個專用標記,表示程式碼結構的相應段: <fim_prefix> <fim_suffix> <fim_middle>

配置資訊

5.2 使用範例

配置完成後,我們即可以開始使用 CodeQwen1.5 進行編程輔助。在編輯器中輸入程式碼時,外掛程式會自動彈出提示,只需要編寫註釋即可自動生成程式碼,非常方便。當然,我們也可以透過對話的方式與大模型進行交流,獲取更多的幫助和建議。

使用展示

5.2 高級功能

此外,CodeQwen1.5 還提供了一些當前 Twinny 外掛程式尚未支持的能力,比如:儲存庫級程式碼完成。這個功能可以透過推理輸入工作區的整個檔,幫助大模型更好地理解和處理程式碼。這對於處理復雜的程式碼檔和計畫非常有用,可以幫助我們更快地找到問題和解決方案。

這個功能透過特殊的標記,可以輸入多個程式碼檔:

<reponame>{repo_name}<file_sep>{file_path1} {file_content1}<file_sep>{file_path2} {file_content2}

這個功能類似於 Github Copilot 的 @workspace 指令,在官方的儲存我們可以看到程式碼範例。

6. 總結

你的私人編碼副駕駛已準備就緒,CodeQwen1.5 為你提供了一個強大的編程助手,它將成為你開發之旅中不可或缺的夥伴。如果你因為種種原因而無法使用 Github Copilot,那麽 CodeQwen1.5 將是你的最佳選擇。它的開源、透明、可存取、協作、道德規範、靈活性等優勢,將為你的編程工作帶來更多的便利和效率。

References

[1] 抱抱臉(Hugging Face): https://huggingface.co/
[2] 魔搭(ModelScope): https://www.modelscope.cn/
[3] CodeQwen 模型庫: https://ollama.com/library/codeqwen/tags
[4] Twinny: https://marketplace.visualstudio.com/items?itemName=rjmacarthy.twinny