筆者最近剛剛試用完 CodeGemma ,準備分享我的心得時,通義千問的 CodeQwen1.5 就也悄然釋出。本文主要介紹 CodeQwen1.5 這款開源編程大模型,並展示如何在 VSCode 中使用它幫你提升編程體驗。
1. 開源編程大模型的必要性
大型語言模型(LLMs)在各行各業擾動風雲的今天,在編程領域也是首當其沖,掀起了一場變革,為開發者帶來了顯著的效率和準確性提升。然而,像 Github Copilot 這樣的基於專有 LLMs 的流行編碼助手,卻因其成本、私密、安全和潛在的版權侵權問題而備受詬病。因為除了參與的開源計畫外,我們也總會有很多私有和需要保密的商業計畫需要處理,這就使得將程式碼庫完全暴露給第三方服務變得頗為敏感。
這些擔憂催生了開源社群的積極響應,促進了對更加透明、更易於存取的替代方案的開發,並已經取得了顯著成果。具體來說,如 Codegemma、StarCoder2、CodeLlama 和DeepSeek-Coder 等開源模型的出現標誌著這一領域的重大進步。也讓普通的開發人員可以更加自由地選擇適合自己的工具,而不必受限於專有模型的局限。
2. 開源編程大模型的優勢
• 透明度: 開源模型的程式碼和開發過程公開透明,允許任何人審查和改進模型,確保其安全性和可靠性。這與專有模型的封閉性質形成鮮明對比,後者可能會隱藏潛在的缺陷或安全漏洞。 • 可存取性: 開源模型通常是免費提供的,降低了門檻,使來自世界各地的人,無論經濟狀況或背景如何,都能使用和貢獻。這對於促進全球範圍內的技術進步和創新至關重要。 • 協作: 開源模型鼓勵協作和共同開發,匯聚來自不同背景和專業知識的貢獻者,共同完善模型。這種集體智慧可以推動更快速、更有效的創新,並最終帶來更強大的模型。 • 道德規範: 開源社群致力於開發負責任和符合道德規範的 AI 技術。開源模型可以更容易地進行審查和修改,以確保它們符合道德準則,並避免偏見或歧視。 • 靈活性: 開源模型可以根據特定需求進行客製和調整,使其適用於各種套用場景。透過加入自己或自己組織的專有程式碼庫進行訓練微調,可以使其更適應自己的編碼風格。
開源編程大模型為編程工具的未來開辟了令人興奮的可能性。透過透明、協作和創新的精神,我們可以共同構建更強大、更有用且更具道德責任感的編程工具,造福所有人,而不僅僅是開發人員,也包括不會編程的人。相信未來,越來越多的普通人會透過編程大模型讓他們的創意和想法變為現實。
3. CodeQwen1.5 的特點
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 程式後,需要我們開啟控制台自行拉取模型檔執行,即可開始使用 CodeQwen1.5 進行編程輔助。
模型有兩類,一類是 code 用於程式碼補全,一類是 chat 用於對話生成。在使用時,我們可以根據自己的需求選擇不同的模型進行使用。
ollama pull codeqwen:chat
ollama 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 外掛程式提供了豐富的功能,包括程式碼補全、程式碼生成、程式碼最佳化、程式碼測試、程式碼文件生成等。透過簡單的配置,我們就可以在 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