作為軟體開發人員,我們夢想著輕鬆編碼,將複雜的問題轉化為優雅而高效的解決方案。 然而,軟體開發是一個複雜的過程,即使對於最有經驗的開發人員來說,編寫多行無錯誤的程式碼也是一項挑戰。 因此,結對程式設計(兩個程式設計師同時工作並互相提供回饋)在軟體開發中很流行。
傳統上,一個程式設計師編寫程式碼,另一個程式設計師審查每一行程式碼,提供即時回饋和建議。 隨著人工智慧 (AI) 的快速普及,利用 AI 進行結對程式設計使得單一開發人員能夠快速編寫程式碼,從而提高效率、改善程式碼品質、促進快速學習並提高整體生產力。
如今,開發人員可以使用一系列基於大型語言模型 (LLM) 建構的工具,這些工具不僅限於基本的程式碼自動完成功能,還能提供強大的 AI 輔助編碼體驗。儘管 OpenAI 的 GPT-4o 在大多數編碼基準測試中處於領先地位,但 Anthropic Claude 和Google的 Gemini 也緊隨其後。在本文中,我們將介紹可用於軟體開發的最佳 LLM,並將其中大多數 LLM 與Sourcegraph 的 Cody交替使用。
提供各種高階語言的編碼工具,提升編碼體驗。整合開發環境 (IDE) 透過在單一介面內提供一套全面的工具(包括程式碼編輯器、偵錯器和編譯器)簡化了編碼過程。開發人員可以根據自己對各種程式語言的編碼偏好輕鬆切換環境。
人工智慧輔助編碼的整合始於基本的自動完成功能,該功能可以根據上下文預測和完成程式碼片段。後來,人們引入了更先進的程式碼完成工具,例如Microsoft IntelliSense 、 Kite和Tabnine ,以及先進的機器學習模型。目前最受歡迎的一些具有先進機器學習模型的編碼工具包括:
Sourcegraph Cody是一款受歡迎的工具,它使用多個 LLM 和高級程式碼搜尋和分析功能來增強開發人員對程式碼和生成的理解。
GitHub Copilot 的概念源自於 OpenAI 的 GPT-3 作為程式碼完成工具的成功,其第一個技術預覽版於 2021 年 6 月在 Visual Studio 程式碼開發環境中推出。 Github Copilot 是一款專有工具,可作為訂閱制的服務提供給開發人員。自 2023 年以來,GitHub Copilot 一直使用 GPT 模型,例如 GPT-4。
Tabnine是一種專有工具,它利用人工智慧為各種程式語言提供程式碼補全,有助於加快開發過程並提高生產力。
還有一些開源模型,例如 code llama。但是,它們中的大多數都使用相同的 LLM,例如OpenAI GPT-4 、 Anthropic 的 Claude 、 Mistral AI 、 Google Gemini等,用於程式碼和聊天建議。在深入研究最適合您的開發工作流程的 LLM 之前,讓我們先了解這些基於大型轉換器的模型是如何運作的。
語言模型通常是機器學習中用於理解和生成自然語言的生成模型。大型語言模型具有巨大的參數(數百萬、數十億甚至數萬億),並使用稱為 Transformer 的深度學習架構。這些模型在非常大的資料集上進行訓練,以預測單字序列關注輸入序列的機率。因此,這些模型使用自註意力機制來捕捉輸入序列之間的依賴關係和關係,以處理和產生資料序列。
有多種大型語言模型和多模型 LLM 可供選擇;其中一些最受歡迎的如下:
OpenAI 的 GPT-4是一個 1 兆參數模型,顯著改進了 GPT-3(1750 億個參數)。 GPT-4 在許多基準測試中仍然是領先模型。它提供了兩個版本的上下文窗口,即 8,192 和 32,768 個令牌。
Google 的 Gemini是LaMDA和PaLM2的後繼者。 Gemini 1.5 最多可處理 200 萬個代幣。
人性的克勞德2,克勞德3.5十四行詩,關注道德考量與安全。
Meta Llama 3是開源模型,有 8B、70B 和 405B 版本。
Mistral AI Mixtral 8 X 7B 和 8 X 22 B 型號以及其他變體型號也可供下載,用於一般用途和專用用途。 Mixtral 也是一個開源的 LLM。
所有這些強大的模型都是在與程式碼相關的資料上進行訓練的,可以產生程式碼並執行其他編碼任務。
大型語言模型使用具有足夠上下文的自然語言描述或提示來執行自然語言處理任務。開發人員可以針對與編碼相關的任務(例如生成、除錯等)對這些模型進行微調。 LLM 可以展示理解多種程式語言的語法、編碼風格和程式設計實踐的能力。
給定與任務相關的先前標記和提示,這些模型的權重在這些資料集上進行微調,以預測序列中的下一個標記。這種微調有助於基於轉換器的模型產生連貫且與上下文相關的內容。
從 LLM 產生聲音輸出取決於訓練資料、模型的參數和良好的提示。來自各種來源的大量且多樣化的程式碼相關資料集(例如開源儲存庫、文件、線上資源、編碼書籍、教學和編碼論壇(例如 stack overflow))用於訓練程式碼生成。
像Cody這樣的編碼助理使用不同的模型來執行各種與程式碼相關的任務,例如即時程式碼產生、程式碼完成和程式碼分析,以幫助偵錯、重構、編寫測試案例和程式碼最佳化任務。他們還提供聊天介面來詢問與程式碼相關的問題、討論和解決問題,並透過解決方案激勵開發人員。
GPT-4、Gemini、Claude 和 Mistral 等大型語言模型和基礎模型功能多樣且難以預測,這使得評估其表現變得複雜且具有挑戰性。然而,許多組織設計了特定的基準,以提供標準化、嚴格的框架,用於比較 LLM 在核心語言相關任務中的能力。
大多數基準測試都包含精心設計的任務,例如問答、邏輯推理、數字推理、程式碼產生和其他自然語言處理任務。例如,大規模多任務語言理解 (MMLU)是一個綜合基準,旨在測試LLMs理解和回答各個學科問題的能力。同樣, Glue和SuperGlue是測試一般語言理解的其他流行基準。
基準測試還需要選擇合適的指標進行比較;準確度、BLEU 分數和困惑度是最常見的,而其他一些基準測試也使用人類判斷進行對比。
不同的挑戰和基準針對不同的目的對模型進行評估。一些基準,例如ARC(AI2 推理挑戰) ,評估 LLM 推理複雜、多步驟科學問題的能力。而GSM8K(小學數學 8K)等基準則評估 LLM 的數學問題解決能力。這些基準促進了競爭,並促進了與學校或大學畢業生知識水平相當的模型的發展。
大多數基準都專注於語言和學術能力;然而,有一些基準可以評估與程式設計相關的任務。下圖來自Big Code Bench 排行榜,透過各種實際且具挑戰性的程式設計任務對 LLM 進行評估,包括基於自然語言描述的程式碼產生和程式碼完成。
排行榜顯示,GPT-4 Turbo 位居榜首,其次是 Claude 3.5 Sonnet 和其他型號。 Gemini 1.5、Mistral 和 GPT-4o 也名列前十。多種基準測試和排行榜可用於全面測試 LLM 編碼能力。以下是一些測試不同 LLM 的選定編碼基準:
EvalPlus 排行榜透過嚴格的測試來評估 AI 程式設計師。 GPT4-Turbo 也位居榜首。
聊天機器人競技場排行榜收集了超過 1,000,000 次人類成對比較,使用 Bradley-Terry 模型對 LLM 進行排名,並以 Elo 等級顯示模型評級。 ChatGPT-4o 排名第一,其次是 Gemini-1.5 Pro、Claude 3.5 Sonnet、Meta Llama 和 Mistral AI Large,這些模型都屬於頂級模型。
Evo-Eval :由於其他基準測試的流行和年代久遠,許多基準測試容易發生資料洩露,程式碼的範例解決方案可以在網路上輕鬆找到。 Evo-Eval 將現有的編碼基準(例如 HumanEval)轉化為難度、創造力、微妙性等領域的問題。下圖是該模型的排名:
每個LLMs (LLM) 都有其優點和缺點。許多基準測試在不同情境下產生程式碼的能力,以了解 LLM 的優點和缺點。以下詳細概述了最常用的 LLM 的優點和缺點:
根據上述結果,我們對這些 LLMS 進行了以下排名:
OpenAI 的 GPT-4 和 GPT-4o:它在多個基準測試中表現最佳
Anthropic Claude 3.5 Sonnet:在大多數基準測試中僅次於 GPT-4 和 GPT-4o,在不同場景中也更準確
Google的 Gemini 1.5:它比 GPT-4 更注重事實,但缺乏想像力,在某些需要更具創造性的編碼方法的場景中可能會失敗。
Mistral AI:速度快,但上下文視窗相對較短
隨著時間的推移,這些模型的架構不斷改進,並在更多的資料上進行訓練,這個排名可能會改變。因此,我們需要一個編碼助手,使我們能夠輕鬆地在這些模型之間切換。 Sourcegraph 的 AI 助理 Cody 可以與我們最喜歡的 IDE 集成,並允許我們互換 LLM。
LLMs (LLM) 種類繁多,各有優缺點。 Sourcegraph 的 AI 助手 Cody 可以使用不同的 LLM 來幫助開發人員更有效地理解、編寫和修復程式碼。使用多個高級 LLM 允許 Cody 提供快速的單行和多行程式碼完成。如果您還沒有使用過 Cody,您可以免費註冊並開始使用。
安裝Cody
Cody 提供與您選擇的 IDE 和程式碼編輯器的無縫整合;它可以整合到 Microsoft Visual Studio Code、JetBrains IntelliJ IDEA、PhpStorm、PyCharm、WebStorm、RubyMine、GoLand、Google Android Studio 和 NeoVim 中。
對於 Visual Studio Code IDE 集成,您可以從市場取得 Cody 擴充功能。或者,您可以透過點擊VS 程式碼中的「檢視」>「擴充功能」並蒐索 Cody AI來開啟該頁面。
當您第一次在 Microsoft Visual Studio 中安裝 Cody 時,它通常是側邊欄中的最後一項。檢查圖標,如下圖所示。您需要使用建立帳戶時所使用的相同登入方法和 ID 進行登入。
再次按下按鈕。您將獲得一個 Cody 聊天側邊欄,您可以使用它與 Cody 聊天來產生程式碼、記錄您的程式碼、解釋部分程式碼、編寫單元測試、尋找程式碼異味等等。
在科迪大學內轉換LLMs
在 VS Code 中安裝 Cody 後,您可以透過 Cody:聊天列提示框下方的下拉式選單在不同的 LLM 之間進行選擇。如前面所討論的,每種模型都有其優點和缺點。然而,科迪根據準確性、速度或兩者的優點對不同的模型進行了分組。
人性的克勞德 | 開放人工智慧 GPT | Google Gemini | Mistral AI |
---|---|---|---|
克勞德 3.5 十四行詩 | GPT-4o | 雙子座 1.5 專業版 | Mixtral-8x22B |
克勞德 3 首十四行詩 | GPT-4 Turbo | 雙子座 1.5 閃光燈 | Mixtral 8x7B |
克勞德 3 作品 | GPT-3.5 Turbo | ||
克勞德 3 俳句 |
這些模型的集成為程式設計師提供了人工智慧輔助軟體開發的幾個好處:
Cody 建議用戶選擇不同的選項,以獲得更好的程式碼準確性、更快的生成速度或平衡性。因此,使用者可以輕鬆選擇自己的偏好,而無需研究每個 LLM。
LLM 使 Cody 能夠提供更準確、更上下文感知的程式碼完成和除錯。
LLMs學位使 Cody 能夠更好地理解程式碼語義。因此,它可以解釋複雜的程式碼結構、演算法和設計模式。
以下程式碼範例說明了 Cody 整合如何允許嘗試不同的 LLM 來解決編碼問題:
產生解決 Leet 程式碼問題的演算法:
讓我們來試驗一下這個問題:最長的無重複字元子字串
複製描述並將其放入使用 Claude 3.5 Sonnet 的 Cody 中的聊天或提示中。 Cody 將產生通過所有測試案例的解決方案。在這種情況下,我們正在編寫 Python 程式碼。這是程式碼輸出:
程式碼通過了所有測試用例。 Claude 的生成非常詳細,因為它會產生有關程式碼在聊天中的工作方式以及空間和時間複雜度的額外細節和解釋。不同的 LLM 會產生不同的輸出格式。使用與 Gemini 1.5 Pro 相同的提示會產生以下程式碼。
使用 GPT-o,我們得到以下輸出,其中包含程式碼解釋和範例用法。
所有產生的執行時間都以毫秒為單位,且產生的程式碼中不存在任何語法錯誤。
生成程式碼來訓練深度學習模型
如今,訓練人工智慧模型是一項常見的程式設計任務。 AI訓練AI模型是自動編碼系統的另一個目標。使用以下提示,我們可以產生可執行的 Python 程式碼來訓練物件偵測模型。
產生 Python 程式碼以使用 PyTorch 建立和訓練用於物件偵測的深度學習模型。程式碼應該包括以下步驟:
導入必要的庫和模組。
定義資料集和資料載入器。這裡,圖像在資料集資料夾中可用,而註釋在 json 檔案中提供,如Coco 資料集網站中提到的那樣。
使用適合物體偵測的預訓練神經網路模型。
定義損失函數和最佳化器。
透過驗證來實現訓練循環。
保存訓練好的模型。
確保程式碼註釋良好並遵循可讀性和效率的最佳實踐。
這是由 Claude 3.5 Sonnet 模型產生的程式碼;部分被限制以減少冗長的程式碼。
import torch
import torchvision
...
# Step 1: Import necessary libraries and modules
import torch.optim as optim
from tqdm import tqdm
# Step 2: Define the dataset and data loaders
class CocoDataset(Dataset):
def __init__(self, root_dir, annotation_file, transform=None):
self.root_dir = root_dir
self.coco = COCO(annotation_file)
...
# Create dataset and data loaders
train_dataset = CocoDataset(root_dir='dataset/train', annotation_file='annotations/instances_train2017.json')
val_dataset = CocoDataset(root_dir='dataset/val', annotation_file='annotations/instances_val2017.json')
train_loader = DataLoader(train_dataset, batch_size=2, shuffle=True, num_workers=4, collate_fn=lambda x: tuple(zip(*x)))
val_loader = DataLoader(val_dataset, batch_size=2, shuffle=False, num_workers=4, collate_fn=lambda x: tuple(zip(*x)))
# Step 3: Use a pretrained neural network model suitable for object detection
def get_model(num_classes):
model = fasterrcnn_resnet50_fpn(pretrained=True)
in_features = model.roi_heads.box_predictor.cls_score.in_features
...
# Step 4: Define the loss function and optimizer
params = [p for p in model.parameters() if p.requires_grad]
optimizer = optim.SGD(params, lr=0.005, momentum=0.9, weight_decay=0.0005)
# Step 5: Implement the training loop with validation
num_epochs = 10
for epoch in range(num_epochs):
model.train()
train_loss = 0
for images, targets in tqdm(train_loader, desc=f"Epoch {epoch+1}/{num_epochs}"):
...
# Step 6: Save the trained model
torch.save(model.state_dict(), 'object_detection_model.pth')
print("Model saved successfully!")
程式碼按預期工作,只需稍加調整即可修正專案目錄中的格式並修復一些小錯誤。再次,模型產生了額外的解釋,例如先前解釋程式碼產生和 LLM 模型所做的假設。 GPT4-o、Gemini 和 Mixtral 也給出了非常相似的結果,需要對程式碼進行一些根本性的更改。
在 IDE 中整合大型語言模型已經透過提高效率、改善程式碼品質以及促進快速學習和原型設計改變了軟體開發。這些先進的工具使用 LLM 提供即時程式碼完成、程式碼產生、解釋、除錯和理解功能。
在所有流行模型中,GPT-4o 在許多編碼基準測試中處於領先地位,而 Claude 3.5 Sonnet 在這些基準測試中位列前五名。 Claude 3.5 和 Mixtral-8X7B 速度極快,而 GPT-4o 和 Gemini 在多模式輸入下運作良好。每種模型都有其優點和缺點,不同的場景可能需要不同的模型。
Cody 可協助您找到最適合編碼場景和您組織的編碼實踐的 LLM。無論您追求的是速度、準確性還是平衡性,Cody 的適應性整合都能滿足您的需求。您今天就可以開始嘗試多個 LLM,從 GPT-4 到 Claude 3.5(可直接從Sourcegraph Cody取得),並為您的編碼問題選擇最佳模型。
原文出處:https://dev.to/hackmamba/these-are-the-best-large-language-models-for-coding-1co2