介紹 Code Llama:一款用於程式碼生成的最新大型語言模型

介紹 Code Llama:一款用於程式碼生成的最新大型語言模型

簡介

生成式 AI 即將完全自動化程式碼生成,雖然尚未達成此里程碑,但目前最好的工具就是 Code Llama!Meta 於 2023 年推出的最新程式碼生成器 Code Llama,旨在協助開發者完成各種程式設計任務。Code Llama 專注於提升開發者工作流程、生成與補全程式碼,並協助測試。讓我們先將 Code Llama 視為獨立資產來探討,再與其他專精於程式碼的生成式 AI 工具進行比較。

Code Llama 的運作方式

Code Llama 是 Llama 2 的程式碼專用變體,透過在程式碼專用資料集上進一步訓練 Llama 2,並從這些資料集中長時間取樣更多資料而開發出來。這個過程賦予 Code Llama 更強的程式碼能力,建立在 Llama 2 的基礎上。它可以根據程式碼和自然語言提示(例如:「寫一個輸出費波那契數列的函數」)生成程式碼以及程式碼的自然語言描述。此外,它還可用於程式碼補全和除錯。Code Llama 支援多種流行程式語言,包括 Python、C++、Java、PHP、TypeScript(JavaScript)、C# 和 Bash。

來源:Meta AI

Meta 發布了四種大小的 Code Llama,分別具有 7B、13B、34B 和 70B 參數的模型。除了 70B 版本外,每個模型都在 500B 個程式碼及相關資料 token 上訓練,而 70B 模型則在 1T 個 token 上訓練。7B 和 13B 的基本版與指令版模型還具備填空 (fill-in-the-middle, FIM) 能力,讓它們能將程式碼插入現有程式碼中,並立即支援程式碼補全等任務。

這些模型滿足不同的服務和延遲需求。例如,7B 模型可以在單一 GPU 上運行。雖然 34B 和 70B 模型能提供最佳結果和優異的程式碼輔助,但較小的 7B 和 13B 模型速度更快,更適合需要低延遲的任務,例如即時程式碼補全。

Code Llama 的能力

Code Llama 模型可穩定生成最多 100,000 個 token 的內容。所有模型都在 16,000 個 token 的序列上進行訓練,並在輸入長達 100,000 個 token 時展現改進。

處理更長輸入序列的能力不僅有助於生成更長的程式,也為程式碼語言模型 (LLM) 開啟了新的使用案例。例如,使用者可以提供模型更多來自其程式碼庫的上下文,使生成的程式碼更相關。此外,在較大程式碼庫中進行除錯時,開發者很難追蹤與特定問題相關的所有程式碼,而這個能力非常有用。透過讓開發者輸入完整的程式碼長度,模型可以協助除錯大段的程式碼。

此外,Meta 還進一步微調了 Code Llama 的兩個額外變體:Code Llama — Python 和 Code Llama — Instruct。

Code Llama — Python 是語言專用的版本,在 100B 個 Python 程式碼 token 上進一步微調。由於 Python 是程式碼生成領域最常被評測的語言,且在 AI 社群中與 PyTorch 一起扮演重要角色,這個專用模型提供了額外的實用性。

Code Llama — Instruct 是指令微調與對齊的變體。指令微調以不同的目標繼續訓練過程,模型會獲得「自然語言指令」輸入和預期輸出。這增強了模型從提示中理解人類期望的能力。建議使用 Code Llama — Instruct 變體進行程式碼生成,因為它們經過微調,能夠以自然語言產生有用且安全的答案。

不建議將 Code Llama 或 Code Llama — Python 用於一般自然語言任務,因為這些模型並非設計來遵循自然語言指令。如果您想完成 NLP 任務,可以選擇 Llama2 或 Llama3 模型,透過整合 novita.ai LLM API 即可使用:

Novita AI LLM 推理 API 提供最實惠的價格和可擴展的模型,讓您的 LLM 擁有極佳的穩定性,且延遲低於 2 秒。透過 Novita AI LLM 推理 API,LLM 效能可大幅提升。

Code Llama 專精於程式碼相關任務,不適合用作其他應用程式的基础模型。

Code Llama 模型的使用者必須遵守 Meta 的授權與可接受使用政策。

評估 Code Llama 的效能

為了評估 Code Llama 在現有解決方案中的表現,Meta 使用了兩個流行的程式碼基準:HumanEval 和 Mostly Basic Python Programming (MBPP)。HumanEval 評估模型根據文檔字串補全程式碼的能力,而 MBPP 則測試模型根據描述撰寫程式碼的能力。

基準測試顯示,Code Llama 優於其他開源、程式碼專用的語言模型,並超越了 Llama 2 的表現。例如,Code Llama 34B 在 HumanEval 上獲得了 53.7% 的分數,在 MBPP 上獲得了 56.2% 的分數,這是目前開源解決方案中最高的,並可與 ChatGPT 相媲美。

與所有尖端技術一樣,Code Llama 也存在某些風險。負責任地建立 AI 模型至關重要,因此在發布 Code Llama 之前實施了多項安全措施。作為紅隊測試的一部分,進行了量化評估以評估 Code Llama 生成惡意程式碼的風險。使用旨在明確要求惡意程式碼的提示,並將 Code Llama 的回應與 ChatGPT (GPT-3.5 Turbo) 進行比較。結果顯示 Code Llama 提供了更安全的回應。

如何使用 Code Llama

Code Llama 不能直接透過網站或平台存取。它可以在 GitHub 上取得,並可下載到本地使用。以下是一些存取 Code Llama 的方式:

  1. 聊天機器人整合:類似 ChatGPT 的文字型 AI Perplexity-AI 已整合 Code Llama 的 34B 參數版本。這允許使用者透過文字提示生成程式碼。Perplexity-AI 提供多種專注於特定程式語言(如 Python、Java、C++ 和 JavaScript)的變體。

  2. 模型整合:開源平台 Hugging Face 提供預設模型,可輕鬆用於生成程式碼。

  3. 整合開發環境 (IDE):Ollama 是 Code Llama 的一個函式庫,可以下載並直接整合到 IDE 中。這讓使用者能夠在本機使用大型語言模型。

在本教學中,我們將使用 Perplexity AI 展示 Code Llama 的能力。我們將先定義並建立排序函數。首先建立一個二元排序函數,它類似於插入排序,但使用二元搜尋來決定元素的位置。接著,我們會詢問 Perplexity 是否有其他演算法可與二元排序相比。最後,我們要求 Perplexity 生成一個包含其中一些函數的 Sorting 類別。

提示:

我有一個 Python 類別,它需要二元排序演算法。請建立一個 Python 類別,接收一個數值列表,使用二元排序進行排序,並返回排序後的列表。

回應:

提示:

是否有其他演算法可比或優於二元排序?

回應:

提示:

我其實想針對我的需求有多種排序選項。你能建立一個具有二元排序、快速排序和合併排序功能的 Sorting 類別嗎?

回應:

誰受益於 Code Llama

程式設計師已經在使用大型語言模型 (LLM) 來協助各種任務,從撰寫新軟體到除錯現有程式碼。目標是提升開發者工作流程,讓他們專注於工作中更人性化的部分,而不是重複性任務。

在 Meta,我們相信 AI 模型,尤其是用於程式碼的 LLM,能從開放方法中顯著受益,促進創新與安全。公開可用的程式碼專用模型可以推動新技術的發展,改善人們的生活。透過發布像 Code Llama 這樣的模型,整個社群可以評估其能力、識別問題並解決漏洞。

Code Llama 的負責任使用

Meta 的研究論文詳細說明了 Code Llama 的開發過程、進行的基準測試、模型的局限性以及遇到的挑戰,同時也說明了採取的緩解措施和未來要解決的挑戰。

此外,負責任使用指南也已更新,納入了以負責任方式開發下游模型的指導方針,涵蓋以下方面:

  • 定義內容政策與緩解措施
  • 準備資料
  • 微調模型
  • 評估與改進效能
  • 處理輸入與輸出層級的風險
  • 在使用者互動中建立透明度與回報機制

建議開發者使用程式碼專用的評估基準來評估模型,並針對程式碼專用的使用案例(例如生成惡意軟體、電腦病毒或惡意程式碼)進行安全研究。也建議使用安全資料集進行自動化和人工評估,並使用對抗性提示進行紅隊測試。

程式碼生成式 AI 的未來

Code Llama 旨在支援所有領域的軟體工程師,包括研究、產業、開源專案、非政府組織和企業。然而,仍有許多使用案例超出了我們目前基本版和指令版模型所能支援的範圍。

我們希望 Code Llama 能激勵更多人利用 Llama 2 為研究和商業產品創造新的創新工具。

結論

Code Llama 是一個獨特的工具,旨在協助程式設計專案,讓開發者能將注意力從程式碼生成轉移到專案目標上。它支援程式碼補全、撰寫人類可讀的註解以及生成程式碼。

作為 AI 程式設計工具,Code Llama 以其離線能力脫穎而出。它可以匯入 IDE,無需網路連線。在 100GB 資料上訓練後,它在程式碼補全和生成方面表現出色。Code Llama 有多種版本可供選擇,包括 7B、13B 和 34B 參數版本,以及 -Python 和 -Instruct 等專用版本。選擇最適合您需求的版本,祝您程式設計順利!

novita.ai 是一個一站式平台,為您提供無限創意,可存取 100 多個 API。從圖像生成、語言處理到音訊增強和影片操作,採用廉價的隨用隨付制,讓您在建立自己的產品時無需煩惱 GPU 維護。立即免費試用。

推薦閱讀

LLM 與 GPT 的區別是什麼

2024 年 LLM 排行榜預測揭曉

Novita AI LLM 推理引擎:最高吞吐量與最便宜的推理服務