🚀 DeepSWE-Preview
DeepSWE-Preview 是一個完全開源的、先進的編碼智能體,它僅通過強化學習(RL)進行訓練,在軟件工程(SWE)任務中表現卓越,旨在推動大語言模型智能體強化學習的普及。
🚀 快速開始
若要讓 DeepSWE-Preview 發揮最佳性能,我們建議進行如下設置:
- 溫度(Temperature)設為 1
- 最大令牌數(Max tokens)至少設置為 32 - 64K
- 使用 R2EGym 的系統/實例提示和工具(
file_editor.py
、execution_bash.py
、search.py
、finish.py
)。更多詳情請見此處。
✨ 主要特性
- 強大的推理能力:DeepSWE-Preview 在處理複雜代碼庫以及查看/編輯多個文件時展現出強大的推理能力,是未來編碼智能體的基礎模型。
- 優異的性能表現:在 SWE-Bench-Verified 測試中,DeepSWE-Preview 取得了令人矚目的 59.0% 的成績,在開源權重類別中排名第一。僅經過 200 步的強化學習訓練,SWE-Bench-Verified 得分就提高了約 20%。
📦 安裝指南
我們的模型可以使用以下流行的高性能推理系統進行部署:
- vLLM
- Hugging Face Text Generation Inference (TGI)
- SGLang
- TensorRT-LLM
所有這些系統都支持 OpenAI Chat Completions API 格式。
vLLM(推薦)
我們建議使用 vllm>=0.8.5
並在 VLLM 中啟用長上下文來部署 DeepSWE-Preview。
export MAX_CONTEXT_LEN=65536
export TENSOR_PARALLEL_SIZE=8
VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 vllm serve agentica-org/DeepSWE-Preview --tensor-parallel-size $TENSOR_PARALLEL_SIZE --max-model-len $MAX_CONTEXT_LEN --hf-overrides '{\"max_position_embeddings\": $MAX_CONTEXT_LEN}' --enable_prefix_caching
📚 詳細文檔
訓練方法
數據
我們的數據集包含來自 R2E-Gym
子集的 4500 個問題。為避免訓練過程中的數據汙染,我們過濾掉了與 SWE-Bench-Verified
源自相同存儲庫(如 sympy
)的問題。所有問題都對應於單獨的 Docker 鏡像。
環境
我們的環境基於 R2E-Gym
構建,這是一個現有的 Gym 環境,用於可擴展地創建高質量的可執行 SWE 環境。
- 狀態與動作:
R2E-Gym
將一組四個工具定義為動作空間的一部分。每個工具的輸出(一個帶有標準輸出/標準錯誤的 Python 程序)代表返回的狀態。具體如下:
- 執行 Bash:輸出大語言模型生成的 bash 命令的標準輸出和標準錯誤。
- 搜索:搜索並返回大語言模型定義的查詢在目錄或單個文件中的所有出現位置。
- 文件編輯器:允許查看、創建、替換字符串、插入和撤銷對特定文件的編輯。
- 完成/提交:大語言模型判定已解決拉取請求,從而終止軌跡生成。
- 獎勵:為簡化操作,我們的獎勵函數採用了稀疏結果獎勵模型(ORM):
1
:大語言模型生成的補丁在時間限制內通過選定的測試樣本(Pass2Pass 和 Fail2Pass)。為加速訓練,我們的最大時間限制為 5 分鐘,而官方 SWE-Bench 評估為 30 分鐘。
0
:如果大語言模型的代碼在至少一個測試用例中失敗或超時,則不給予獎勵。
強化學習算法
我們對原始的 GRPO 算法進行了改進,結合了 DAPO、Dr. GRPO、LOOP/RLOO 的見解以及我們的創新,以實現穩定的訓練和更好的性能。我們最終的融合算法包括:
- Clip High (DAPO):增加 GRPO/PPO 替代損失的上限,鼓勵探索並穩定熵。
- 無 KL 損失 (DAPO):消除 KL 損失,防止大語言模型被限制在原始 SFT 模型的信任區域內。
- 無獎勵標準差 (Dr.GRPO):去除獎勵標準差,消除 GRPO 損失中的難度偏差,確保更好地區分難題和簡單問題。
- 長度歸一化 (Dr.GRPO):將替代損失除以最大上下文長度,消除 GRPO 中存在的長度偏差,這種偏差會增加錯誤響應的長度。
- 留一法 (Loop/RLOO):移除一個樣本進行優勢估計,減少策略梯度的方差,而不引入偏差。
- 緊湊過濾 (我們的創新):受 DAPO 啟發,我們對達到最大上下文長度、生成過程中超時(20 分鐘)或達到最大步數的軌跡的損失進行掩碼處理。
- 無熵損失 (我們的創新):熵損失會引入更高的不穩定性,並最終導致熵呈指數級增加,從而使訓練崩潰。只要基礎模型的令牌級熵在 0.3 - 1 之間,就不需要熵損失。
更多關於訓練方法的詳細描述可在我們的博客文章中找到。
評估
DeepSWE-Preview 在最大上下文長度為 64k 和最大環境步數為 100 的情況下,通過官方 R2E-Gym
代碼庫進行評估。然後將 DeepSWE 生成的補丁移植到官方 SWE-bench 存儲庫中計算最終得分。以下是 16 次運行的平均 Pass@1 準確率:
模型 |
框架 |
類型 |
SWE-Bench 驗證準確率 (%) |
DeepSWE-Preview (32B) |
R2E-Gym |
智能體 + 混合最佳@16 |
59% |
DeepSWE-Preview (32B) |
R2E-Gym |
智能體 + 混合最佳@8 |
57.9% |
DeepSWE-Preview (32B) |
R2E-Gym |
智能體 |
42.2% |
Devstral-Small (24B) |
OpenHands |
智能體 |
46.6% |
Openhands-LM (32B) |
OpenHands |
智能體(迭代) |
37.2% |
SWE-Agent-LM (32B) |
SWE-Agent |
智能體 |
40.2% |
R2EGym-Agent (32B) |
R2E-Gym |
智能體 |
34.4% |
Skywork-SWE (32B) |
OpenHands |
智能體 |
38.0% |
Skywork-SWE (32B) |
OpenHands |
智能體 + 無執行最佳@8 |
47.0% |
SkyRL-Agent (14B) |
OpenHands |
智能體 |
21.6% |
測試時縮放
圖 3:不同 TTS 策略下的 SWE-Bench 驗證性能。通過混合 TTS,DeepSWE-Preview 達到了 59% 的準確率,比當前的開源權重模型(SkyWork + TTS,47%)高出 12%。我們注意到,僅使用基於執行和無執行的驗證器仍然有效,可以帶來 10% 以上的性能提升。
📄 許可證
本項目根據 MIT 許可證發佈,這體現了我們對開放和可訪問的人工智能開發的承諾。我們相信通過免費提供我們的工作,讓任何人都可以使用、修改和擴展,從而實現人工智能技術的普及。這種寬鬆的許可證確保了全球的研究人員、開發人員和愛好者可以無限制地利用和擴展我們的工作,促進人工智能社區的創新和合作。
致謝