Cohere 今天發布了 North Mini Code,這是一款擁有 300 億參數的專家混合模型(Mixture-of-Experts),其中 30 億參數為活躍狀態,具備強大的代理式程式碼(agentic coding)能力。該模型已在 Hugging Face 上以 Apache 2.0 授權發布。

North Mini Code 是 Cohere 新模型系列中的首款產品,專為代理式軟體工程任務設計與訓練。

North Mini Code 針對複雜的軟體工程工作流程、基於終端機的代理任務以及高品質程式碼生成進行了優化。在 Artificial Analysis 的程式碼指數(Coding Index)上,North Mini Code 獲得 33.4 分,表現優於 Qwen3.5 (35B-A3B)、Gemma 4 (26B-A4B)、Devstral Small 2 (24B Dense) 等模型。

它甚至超越了 Nemotron 3 Super (120B-A12B)、Mistral Small 4 (119B-A6B) 和 Devstral 2 (123B) 等規模更大的模型,躋身同級別最強大的開源程式碼模型之列。

現實世界的程式碼代理(code agents)依賴於模型品質及其在不同代理框架(agent harnesses)下的穩健性。我們使用多個框架來訓練 North Mini Code,而非僅針對單一框架進行優化。這種方法使 North Mini Code 能夠成為 OpenCode 等程式碼代理的可靠基礎。

North Mini Code 是一個僅限解碼器(decoder-only)的 Transformer 架構稀疏專家混合模型。它採用了我們高效的注意力機制實作,以 3:1 的比例交錯使用帶有 RoPE 的滑動視窗注意力(sliding-window attention)和不帶位置嵌入的全域注意力(global attention)。

前饋網路區塊是一個 MoE 區塊,包含 128 個專家,其中每個 token 會啟動 8 個專家。每個專家區塊都是一個帶有 SwiGLU 激活函數的 FFN 區塊。路由器(router)在 top-k 選擇之前會對 logits 應用 sigmoid 激活函數,我們還在稀疏層之前使用了一個單一的密集層。

我們使用兩階段級聯式監督式微調(SFT)和可驗證獎勵強化學習(RLVR)對 North Mini Code 進行後訓練,重點放在代理式程式碼。第一階段 SFT 資料著重於程式碼能力,並融入更廣泛的資料組合以提升穩健性和可用性。該資料組合包含多種領域的程式設計、推理和指令遵循,其中程式碼資料佔可訓練 token 的 70%,代理工具使用資料佔 43%,單輪競爭或科學程式設計資料佔 27%。

在第二階段 SFT 中,我們僅使用來自代理式和推理驅動樣本的 45 億 token 資料混合,其中程式碼資料佔可訓練 token 的 61%。這個混合資料集包含了我們在程式碼和更廣泛代理任務中最高品質的資料,其中工具呼叫和完成都經過驗證是可執行且正確的。

我們的內部資料管線高度依賴容器化的代理式程式碼環境。我們維護這些環境的一個不相交子集,用於合成 SFT 資料生成和 RLVR。大多數環境基於真實世界儲存庫中的軟體工程任務,其餘則是來自開源和內部資料集的基於終端機的代理任務。總計,我們使用了超過 7 萬個可驗證任務,涵蓋約 5 千個獨特的儲存庫。

我們對照 SWE-Bench [2] 和 SWE-Bench-Pro [3] 的儲存庫來源進行環境去重,以避免評估期間的來源洩漏 [4]。

我們分別在 SFT 的第一階段和第二階段使用了 64K 和 128K 的上下文長度。這種「從長到更長」的級聯方法(類似於 [5, 6])使得模型能夠在有價值的較短資料上進行雙邊訓練,建立穩健的性能基準,然後僅針對高品質的驗證樣本進行目標式長上下文訓練。

如果沒有多階段訓練,初始訓練階段的 200 億非程式碼 token 往往會主導後期訓練中 15 億高品質程式碼資料,導致性能較差,並因階段間資料趨勢差異而產生更高的行為衝突。根據經驗,在接近完整長度分佈的樣本上進行訓練,在評估時產生的最終軌跡比僅在截斷至 64K 的分佈上訓練更短。

我們在 SFT 期間並未將 North Mini Code 優化為量化指標,而是嚴格將 SFT 作為 RLVR 的準備階段。資料混合旨在優化下游階段的採樣多樣性和 pass@K(針對高 K 值)。我們使用樣本級過濾來移除任何異常情況,例如無效的工具呼叫、錯誤的空白字元生成、格式錯誤的特殊 token 或幻覺引文。

透過消融實驗,我們修剪了產生不良 RLVR 行為(例如低熵、無效結構化生成)的產物或超參數。最終的 SFT 模型在 SWE-Bench Verified [2] 上達到 80.2% 的 pass@10,在 Terminal-Bench v2 [7] 上達到 55.1% 的 pass@10。

框架(harness)的穩健性提升了模型在實際軟體開發環境中的可用性,在這些環境中,代理會遇到多樣且不可預測的工具環境。這些環境不僅在提示詞(prompting)上有所不同,在基本的工具使用模式上也有差異。例如,SWE-Agent [8] 提供了一個相對豐富的代理 CLI 介面,包含專門的指令(bash、str_replace_editor 和 submit 工具)和模板化的觀察結果。

mini-SWE-agent [9] 將其簡化為單一的 bash 工具,僅以 shell 的原始標準輸出作為回饋。而 OpenCode [10] 則使用細粒度、獨立型別的工具(如 edit、grep、todowrite 和 task 等),並返回結構化的 JSON 回應。

我們透過在第二階段 SFT 中引入少量額外的基準框架資料(佔 SFT 混合資料的 6%,而所選的 SWE-Agent 框架佔 50%)來解決跨框架泛化問題。具體來說,這種資料混合在 OpenCode 框架的評估中帶來了 10% 的提升,同時在 SWE-Bench Verified 上保持了 SWE-Agent 的性能。

這證明了跨框架遷移可以低成本實現,而不會降低基準性能。值得注意的是,North-Code-Mini 在使用 mini-SWE-Agent 時達到了 61.0% 的 pass@1,這種改進在跨任務、跨框架設定中自然產生。這表明具有重疊工具能力的框架共享足夠的表示結構以實現正向遷移。

我們還觀察到在混合框架資料上訓練時資料衝突極小,這表明不同框架所需的技能通常是互補而非矛盾的。

同樣地,官方的 Terminal-Bench 使用其專有的 Terminus 2 框架,其中所有代理 CLI 互動都透過純文字聊天回合進行通訊(而非原生工具呼叫)。為了讓我們的模型在 Terminus 2 上做好準備,我們在資料混合中包含了少量(少於 20%)的純文字格式資料,這已證明足以讓模型自然地進行泛化。

有趣的是,我們還發現,在各種框架中引入足夠的變異(類似於資料增強)至關重要,以迫使模型正確建立指令與行為之間的連結,而不是簡單地不理解就重複固定模板。當框架彼此相似時,這一點尤其重要。

程式碼代理的推演(rollouts)長度很長且變化多端,最慢的軌跡通常比中位數長一個數量級。同步的強化學習(RL)迴圈會讓訓練器閒置,等待每個批次生成這些試驗,因此我們將採樣與學習解耦。訓練器與一個 vLLM 輔助程式並行運行,該程式持續提供推演。策略權重每隔幾個學習步驟(K=4)就會匯出到 vLLM 中,因此採樣器在任何時刻最多只會稍微偏離策略。剩餘的不匹配則在損失層面進行校正。

為了避免學習器進程等待最長的推演,同時避免任務間資料分佈失衡,我們使用了一個帶有視窗的先進先出(FIFO)佇列(訓練器↔採樣器)[11]。佇列頭部的一小部分會按完成順序消耗,以處理落後者,其餘部分則保持輸入順序。經驗證明,這種方法恢復了大部分按完成順序方案的吞吐量,而沒有顯著阻礙訓練穩定性。

我們使用 CISPO [12] 進行訓練,這是一種帶有 token 級別重要性採樣校正的對數似然目標。CISPO 與 PPO 和 GRPO 的不同之處在於,其重要性權重乘以的是對數似然而非機率比,並透過更強的正規化來增強 RLOO [13]。我們在 token 級別而非提示詞級別聚合損失,因此梯度訊號會隨軌跡長度縮放,較長的代理式軌跡(其中大部分歸因訊號存在)不會相對於較短的軌跡被降權。

單一多環境強化學習訓練——我們進行了一次單一的多環境線上強化學習訓練,涵蓋兩個任務環境:基於終端機的任務和軟體工程任務。每個訓練批次包含 512 個推演,每個提示詞採樣 8 個推演。所有推演共享一個 128K token 的全域上下文視窗。

為了考慮不同的任務複雜度,每個任務都被分配了不同的代理步驟預算。這些按任務劃分的預算是在 RLVR 之前根據 pass@k 過濾設定的,確保預算與每個任務分佈的難度適當校準。我們觀察到,給予模型遠超必要的輪次預算會鼓勵其推演中出現不必要的冗長和跳躍性。

對於基於終端機的任務,我們為代理配置了一個簡單的 ReAct 框架,該框架採用基於 Harbor 的 Tmux 會話實作的單一終端機使用工具。而對於 SWE 任務,我們則採用 SWE-agent [8] 框架。這兩個環境都為代理提供了預先建置的 Docker 映像檔,其中包含環境狀態、自然語言使用者提示詞以及一組用於驗證的單元測試。

我們在內部和開源資料集的組合上進行訓練,只保留具有可接受 pass@k 率的問題,即排除那些微不足道或完全無法解決的實例。我們使用從基於單元測試的驗證器導出的二元獎勵。此外,模型在生成無效工具呼叫或無法解析的輸出時會收到 0 獎勵,這使得在最初的訓練步驟中,幻覺或格式錯誤的工具呼叫率急劇下降。

透過線上強化學習實現更高的性能和穩健性——RLVR 訓練將最終模型的性能從 SFT 初始化階段提升了 7.9%(絕對值)的 Terminal-Bench v2 pass@1 和 3.0%(絕對值)的 SWE-Bench pass@1。我們觀察到,在兩個環境中聯合訓練比單獨訓練每個環境產生了更強的結果。