棧遷移能力的長時(shí)程基準(zhǔn))
這次我們來看一個(gè)評測基準(zhǔn)SWE Refactor Bench。它的定位很直接——不是又一個(gè)編碼代理工具而是一套用來回答“編碼代理能不能完成長時(shí)間跨度、全倉庫級別、真實(shí)技術(shù)棧遷移任務(wù)”的評估框架。為什么這個(gè)問題值得單獨(dú)做評測因?yàn)楝F(xiàn)有的編碼代理評估大多集中在單文件 bug 修復(fù)、小范圍功能開發(fā)、Issue 級別的局部改動(dòng)。而真實(shí)工程里更常見、也更消耗人力的任務(wù)恰恰是“把一個(gè)舊版本框架升級到新版本”“把整個(gè)倉庫的調(diào)用方式統(tǒng)一替換”“把配置體系從 A 遷移到 B”這類跨文件、多步驟、需要長鏈路推理的改造。SWE Refactor Bench 想補(bǔ)上的正是這一環(huán)。從標(biāo)題拆這個(gè)基準(zhǔn)的關(guān)注點(diǎn)Long-Horizon 表示任務(wù)鏈條長代理需要連續(xù)完成多個(gè)步驟Whole-Repository 表示修改范圍是整個(gè)代碼倉庫不是單文件補(bǔ)丁Stack Migration 表示任務(wù)內(nèi)容是技術(shù)棧遷移包括框架升級、API 替換、依賴收斂、配置格式遷移等。這幾個(gè)詞放在一起決定了它和普通 bug 修復(fù)基準(zhǔn)有本質(zhì)區(qū)別。本文會(huì)從基準(zhǔn)定位、任務(wù)設(shè)計(jì)、評估指標(biāo)、運(yùn)行流程、常見失敗模式、工程化啟示幾個(gè)角度展開最后給出一套把 SWE Refactor Bench 用進(jìn)編碼代理能力評估與團(tuán)隊(duì)選型的參考流程。1. SWE Refactor Bench 核心能力速覽先給一張速覽表把基準(zhǔn)的關(guān)鍵信息列清楚。評估項(xiàng)目說明項(xiàng)目類型編碼代理Coding Agent評測基準(zhǔn)核心任務(wù)全倉庫級別技術(shù)棧遷移包括框架升級、API 替換、依賴遷移、配置體系切換關(guān)鍵維度Long-Horizon長時(shí)程任務(wù)、Whole-Repository全倉庫、Stack Migration技術(shù)棧遷移與 SWE-bench 的關(guān)系同屬編碼代理自動(dòng)評估方向但 SWE-bench 偏 bug 修復(fù)SWE Refactor Bench 偏重構(gòu)與遷移適用對象LLM 應(yīng)用工程師、編碼代理開發(fā)者、研發(fā)效能團(tuán)隊(duì)、做技術(shù)選型的技術(shù)負(fù)責(zé)人運(yùn)行方式本地或 CI 按任務(wù)實(shí)例執(zhí)行通常需要容器化隔離環(huán)境結(jié)果形態(tài)代理輸出代碼改動(dòng)評估端通過構(gòu)建、測試、靜態(tài)檢查等方式判斷是否成功顯存要求不涉及基準(zhǔn)本身不需要 GPU 推理但如果被測代理使用本地模型則取決于所接入模型是否支持 API基準(zhǔn)沒有內(nèi)置業(yè)務(wù) API但可通過腳本接入任意支持命令行或 HTTP 調(diào)用的編碼代理這幾點(diǎn)先明確SWE Refactor Bench 不是一個(gè)編碼代理也不是一個(gè)開發(fā)工具而是一套“考卷”。考的不是代理能不能聽懂指令而是代理能不能在沒有人一步步指揮的情況下把一次完整的技術(shù)棧遷移從頭做到尾。從當(dāng)前公開信息看這類基準(zhǔn)的設(shè)計(jì)思路和 SWE-bench 同源從一個(gè)真實(shí)倉庫出發(fā)選取真實(shí)發(fā)生過且可以被驗(yàn)證的改造任務(wù)把“代理生成的改動(dòng)”與“驗(yàn)證條件”進(jìn)行自動(dòng)比對。不同的是SWE-bench 的驗(yàn)證條件通常是測試用例是否通過而 SWE Refactor Bench 的驗(yàn)證條件要復(fù)雜得多——遷移后代碼不僅要能編譯還要保證原有行為不被破壞同時(shí)所有需要替換的調(diào)用點(diǎn)都得替換干凈。2. SWE Refactor Bench 與 SWE-bench 的定位差異要理解 SWE Refactor Bench最方便的方式是把它和 SWE-bench 放在一起對比。SWE-bench 是編碼代理評測領(lǐng)域繞不開的基準(zhǔn)它從真實(shí) GitHub 倉庫中抽取 Issue 和對應(yīng)的修復(fù) PR讓代理獨(dú)立閱讀 Issue、定位問題、修改代碼最后用隱藏測試來判定是否修復(fù)成功。這個(gè)設(shè)計(jì)解決了早期“人工看對話覺得厲害但不知道代碼能不能跑”的問題把評價(jià)標(biāo)準(zhǔn)拉回到了自動(dòng)化驗(yàn)證上。但 SWE-bench 的任務(wù)單元本質(zhì)上還是“局部 bug 修復(fù)”問題描述已經(jīng)明確影響范圍通常集中在少量文件修復(fù)目標(biāo)可以濃縮成一兩句可驗(yàn)證的描述。真實(shí)工程里還有另一類任務(wù)它們的難度不在“定位單一 bug”而在“改動(dòng)橫跨大量文件且彼此之間必須保持契約一致”。技術(shù)棧遷移就是最典型的一類。SWE Refactor Bench 正是從這個(gè)缺口出發(fā)。它的任務(wù)設(shè)定和 SWE-bench 有明顯差異對比維度SWE-bench典型 bug 修復(fù)類基準(zhǔn)SWE Refactor Bench重構(gòu)遷移類基準(zhǔn)任務(wù)范圍局部 Issue 修復(fù)全倉庫、跨多模塊改造任務(wù)鏈條通常幾步完成多階段、需要長期規(guī)劃驗(yàn)證方式隱藏單測是否通過構(gòu)建、測試、行為等價(jià)、遷移完整度是否存在中間無效狀態(tài)較少常見遷移過程中代碼可能長期無法編譯對代理規(guī)劃能力的要求中等高這個(gè)區(qū)別非常重要。做 bug 修復(fù)時(shí)代理的目標(biāo)高度收斂找到出問題的函數(shù)修復(fù)它跑通測試。做堆棧遷移時(shí)代理的目標(biāo)是開放的先把舊調(diào)用點(diǎn)全部列出來再確定新調(diào)用方式再分批替換每替換完一批還要確認(rèn)不影響周邊模塊。過程中任何一個(gè)環(huán)節(jié)的判斷失誤都會(huì)傳導(dǎo)到后續(xù)步驟。所以SWE Refactor Bench 評估的更像是編碼代理的“工程執(zhí)行力”而不只是“代碼理解力”。這也是它區(qū)別于其他基準(zhǔn)的核心價(jià)值它逼著代理在真實(shí)項(xiàng)目里做一次完整的技術(shù)債償還。3. 任務(wù)設(shè)計(jì)全倉庫堆棧遷移為什么難很多人會(huì)低估技術(shù)棧遷移的難度覺得“不就是把舊接口換成新接口嗎”。真實(shí)做一次遷移就會(huì)知道難點(diǎn)根本不在于某一個(gè)替換動(dòng)作而在于替換動(dòng)作背后的全局一致性。3.1 跨文件調(diào)用鏈在大型倉庫里一個(gè)接口可能被幾十個(gè)文件引用。舊調(diào)用點(diǎn)分布在不同的模塊、不同的目錄、不同的業(yè)務(wù)層級里。代理不能只看幾個(gè)文件就動(dòng)手它必須先建立一張“調(diào)用關(guān)系圖”知道哪些地方在用、哪些地方是入口、哪些地方是深層依賴。沒有全倉庫視野很容易出現(xiàn)“改了 A 文件忘了 B 文件結(jié)果整體編譯不過”。3.2 中間狀態(tài)不可編譯技術(shù)棧遷移往往不是一步到位的。以框架升級為例假設(shè)舊框架用setup()初始化新框架改成了initialize()那么一次性把全部調(diào)用點(diǎn)改完之前代碼庫大概率處于無法編譯的狀態(tài)。這對代理提出了一個(gè)和 bug 修復(fù)完全不同的要求它必須能容忍“中間狀態(tài)是壞的”繼續(xù)按計(jì)劃推進(jìn)而不是一看到編譯失敗就回滾或陷入死循環(huán)。3.3 行為等價(jià)性要求遷移完成后代碼行為必須和遷移前保持一致。這看起來是基本要求實(shí)際執(zhí)行時(shí)卻很難判斷。很多代理在遷移過程中會(huì)順手“優(yōu)化”代碼邏輯、調(diào)整變量命名、改變調(diào)用順序。這些改動(dòng)在單一測試用例里可能不報(bào)錯(cuò)但放到回歸測試?yán)锞褪请[患。評估框架要在“遷移完成度”和“行為未變”之間同時(shí)把關(guān)難度比單純跑測試高很多。3.4 上下文窗口限制全倉庫代碼通常遠(yuǎn)遠(yuǎn)超出編碼代理的上下文窗口。代理不可能把整個(gè)倉庫讀完再動(dòng)手它必須在探索、理解和修改之間做平衡。這就非常考驗(yàn)代理的信息管理能力哪些文件讀一遍就夠哪些文件需要反復(fù)回顧哪些信息可以放進(jìn)長期記憶哪些信息必須隨時(shí)校正。從現(xiàn)有編碼代理的通用表現(xiàn)看長任務(wù)里“前后不一致”是最常見的失敗原因之一。3.5 遷移順序依賴一次完整的遷移通常有先后順序先改底層依賴再改中間層封裝最后才能改業(yè)務(wù)調(diào)用點(diǎn)。順序錯(cuò)了編譯錯(cuò)誤會(huì)堆積到難以理解的程度順序?qū)α嗣恳恍〔降尿?yàn)證成本都會(huì)降低。這類順序規(guī)劃能力正是 Long-Horizon 任務(wù)的核心挑戰(zhàn)。SWE Refactor Bench 把這些問題打包成了標(biāo)準(zhǔn)任務(wù)讓不同編碼代理在同樣的約束條件下被評估。這也是它最有價(jià)值的產(chǎn)出它能讓代理開發(fā)者看到自己的系統(tǒng)在長鏈路任務(wù)上的真實(shí)短板而不是被短任務(wù)上的優(yōu)秀表現(xiàn)迷惑。4. 評估指標(biāo)與結(jié)果判斷編碼代理完成一次重構(gòu)遷移后怎么判斷成功還是失敗不能只靠“看著改得對不對”必須有一組可自動(dòng)執(zhí)行的驗(yàn)證條件。從這類基準(zhǔn)的通用設(shè)計(jì)思路看評估指標(biāo)至少應(yīng)該覆蓋以下幾個(gè)層面。指標(biāo)作用判斷方式構(gòu)建通過率驗(yàn)證遷移后的代碼能否正常構(gòu)建執(zhí)行編譯/構(gòu)建命令看退出碼原測試通過率驗(yàn)證遷移沒有破壞已有行為運(yùn)行倉庫原有測試套件適配測試通過率驗(yàn)證遷移后的新接口實(shí)際可用運(yùn)行針對新接口編寫的定向測試遷移覆蓋率驗(yàn)證舊調(diào)用點(diǎn)是否全部替換干凈靜態(tài)掃描統(tǒng)計(jì)舊 API 殘留行為等價(jià)性驗(yàn)證重構(gòu)前后對相同輸入是否輸出一致行為探針用例、基準(zhǔn)輸出比對完成耗時(shí)記錄代理完成任務(wù)消耗的資源步數(shù)、token 數(shù)、墻鐘時(shí)間這里要特別說明遷移覆蓋率。很多代理做遷移時(shí)會(huì)替換掉主要入口但留下邊角調(diào)用點(diǎn)。這些殘留調(diào)用點(diǎn)在常規(guī)測試?yán)锊灰欢〞?huì)觸發(fā)卻會(huì)在上線后帶來線上故障。評估基準(zhǔn)如果缺少覆蓋率檢查代理很容易“看起來成功、實(shí)際沒做完”。在 SWE Refactor Bench 這類任務(wù)里驗(yàn)證腳本的工作流大致是# 通用驗(yàn)證流程示例具體命令以基準(zhǔn)項(xiàng)目實(shí)際實(shí)現(xiàn)為準(zhǔn) # 1. 應(yīng)用代理生成的補(bǔ)丁 git apply /path/to/agent_patch.diff # 2. 執(zhí)行構(gòu)建 npm run build # 或 mvn compile / pip install -e .取決于任務(wù)倉庫 # 3. 運(yùn)行測試 npm test # 或 pytest / go test # 4. 掃描舊 API 殘留 ./scripts/check_migration.sh最終的評分不是單一數(shù)字而是多個(gè)維度的綜合結(jié)果。這樣設(shè)計(jì)的目的很明確避免代理通過“取巧”的方式拿到分?jǐn)?shù)比如把測試文件也改了、把失敗測試刪掉、或者只遷移了最容易遷移的那一層。5. 本地運(yùn)行 SWE Refactor Bench 的通用流程SWE Refactor Bench 這類基準(zhǔn)的實(shí)際運(yùn)行流程通常包括環(huán)境準(zhǔn)備、任務(wù)實(shí)例讀取、代理執(zhí)行、結(jié)果收集、驗(yàn)證打分。下面給出一套通用流程具體命令需要按你所用的基準(zhǔn)倉庫實(shí)際結(jié)構(gòu)調(diào)整。5.1 環(huán)境準(zhǔn)備建議在隔離環(huán)境里跑評估。因?yàn)樵谠u估過程中代理會(huì)真實(shí)修改倉庫代碼這些改動(dòng)可能是不完整的、錯(cuò)誤的甚至可能破壞環(huán)境。容器化是最穩(wěn)妥的方式。# 創(chuàng)建評估工作目錄 mkdir -p swe-refactor-eval cd swe-refactor-eval # 拉取基準(zhǔn)倉庫占位鏈接以實(shí)際項(xiàng)目地址為準(zhǔn) git clone benchmark-repo-url cd benchmark-repo # 查看任務(wù)實(shí)例元信息 ls tasks/ cat tasks/migration_task_001.json任務(wù)實(shí)例元信息通常包含目標(biāo)倉庫地址、原始 commit、期望改動(dòng)范圍、驗(yàn)證命令、評估說明。這個(gè)文件是跑評估的核心輸入。5.2 任務(wù)實(shí)例格式一個(gè)任務(wù)實(shí)例的元信息大致長這樣{ instance_id: migration_task_001, task_type: framework_upgrade, target_repo: https://github.com/example/legacy-repo, base_commit: a1b2c3d4e5f6..., required_change_summary: Replace legacy cache library with new cache interface, validation: { build_command: npm run build, test_command: npm test, migration_scan: scripts/check_legacy_cache.sh } }實(shí)際字段名和結(jié)構(gòu)以基準(zhǔn)項(xiàng)目為準(zhǔn)但大方向是一致的基準(zhǔn)把“一個(gè)完整遷移任務(wù)”封裝成一個(gè)結(jié)構(gòu)化實(shí)例讓評估者可以批量運(yùn)行。5.3 運(yùn)行編碼代理把任務(wù)實(shí)例交給編碼代理執(zhí)行。這里有兩種接入方式如果代理支持命令行模式可以寫一個(gè)循環(huán)腳本逐條讀取實(shí)例調(diào)用代理命令生成補(bǔ)丁。如果代理只有交互界面則需要把輸入輸出腳本化或者在 CI 環(huán)境里借助驅(qū)動(dòng)層自動(dòng)操作。# 批量運(yùn)行示例偽代碼需按代理接口調(diào)整 for task in tasks/*.json; do echo Running task: $task # 讀取任務(wù)信息啟動(dòng)隔離環(huán)境 # 調(diào)用編碼代理 CLI 生成補(bǔ)丁 # 保存補(bǔ)丁到 results/ echo Done: $task done5.4 結(jié)果收集與驗(yàn)證代理完成后把生成的補(bǔ)丁存入結(jié)果目錄然后逐條執(zhí)行驗(yàn)證腳本# 結(jié)果處理示例讀取補(bǔ)丁并調(diào)用驗(yàn)證腳本 import json import subprocess from pathlib import Path def run_validation(instance_path: Path, patch_path: Path) - dict: instance json.loads(instance_path.read_text()) result {} # 應(yīng)用補(bǔ)丁 apply_result subprocess.run( [git, apply, str(patch_path)], capture_outputTrue ) result[apply_success] apply_result.returncode 0 # 執(zhí)行構(gòu)建 build_result subprocess.run( instance[validation][build_command].split(), capture_outputTrue, timeout600 ) result[build_success] build_result.returncode 0 # 執(zhí)行測試 test_result subprocess.run( instance[validation][test_command].split(), capture_outputTrue, timeout1800 ) result[test_success] test_result.returncode 0 return result if __name__ __main__: result run_validation( Path(tasks/migration_task_001.json), Path(results/agent_a.patch) ) print(json.dumps(result, indent2))這套流程的核心原則是代理和驗(yàn)證完全解耦。代理負(fù)責(zé)生成補(bǔ)丁評估端負(fù)責(zé)判斷補(bǔ)丁是否讓倉庫進(jìn)入預(yù)期狀態(tài)。隔離越徹底結(jié)果越可信。6. 從評估結(jié)果觀察代理的工程化能力SWE Refactor Bench 的價(jià)值不只是給一個(gè)“通過/不通過”的結(jié)論。它的設(shè)計(jì)深度足夠讓評估者從結(jié)果中反推代理的系統(tǒng)能力短板。6.1 任務(wù)拆解能力看代理是否先把全倉庫掃描一遍、列出調(diào)用點(diǎn)清單再開始改代碼。如果代理拿到任務(wù)后立刻開始改第一個(gè)文件大概率會(huì)在后期被跨文件依賴卡住。6.2 長上下文管理觀察代理在任務(wù)進(jìn)行到中段時(shí)是否還記得最初的遷移目標(biāo)。技術(shù)棧遷移任務(wù)通常有幾十步操作如果代理沒有把目標(biāo)寫成持久化記錄就會(huì)在改到后半程時(shí)出現(xiàn)行為漂移把精力花在無關(guān)的代碼優(yōu)化上。6.3 失敗恢復(fù)能力在遷移過程中倉庫會(huì)經(jīng)歷一段不可編譯的中間狀態(tài)。這是正常的。優(yōu)秀的代理會(huì)在出現(xiàn)編譯錯(cuò)誤時(shí)檢查自己最近的一步改動(dòng)而不是從頭排查也不應(yīng)該因?yàn)橹虚g態(tài)報(bào)錯(cuò)就放棄整個(gè)任務(wù)。評估時(shí)重點(diǎn)看代理遇到的第一次失敗是什么類型后續(xù)采用了什么恢復(fù)策略。6.4 變更聚合與提交習(xí)慣觀察代理是完成一部分就提交一部分還是全部改完后一次性提交。從驗(yàn)證角度看前者的可追溯性更好從評估角度看兩種方式都應(yīng)該被支持只要最終 patch 可以應(yīng)用并滿足驗(yàn)證條件。6.5 多文件一致性這點(diǎn)是重構(gòu)遷移任務(wù)最核心的能力。代理在修改interface.ts時(shí)是否同步意識到了consumer_a.ts和consumer_b.ts里的舊調(diào)用會(huì)失效它會(huì)主動(dòng)搜索所有舊調(diào)用點(diǎn)還是只改自己讀過的那幾個(gè)文件對遷移覆蓋率指標(biāo)影響最大的就是這項(xiàng)能力。7. 當(dāng)前編碼代理在長時(shí)程遷移任務(wù)中的典型失敗模式雖然 SWE Refactor Bench 的具體評測結(jié)果還沒有大范圍公開但從編碼代理在長時(shí)程任務(wù)上的普遍表現(xiàn)可以歸納出幾類典型失敗模式。這些模式也是評估新代理時(shí)需要重點(diǎn)留意的信號。7.1 目標(biāo)漂移代理在任務(wù)開始時(shí)理解得很清楚接觸了大量代碼后注意力逐漸被細(xì)節(jié)帶走。可能花了大段時(shí)間優(yōu)化某個(gè)不影響遷移的局部實(shí)現(xiàn)卻遲遲沒有推進(jìn)真正的遷移主線。這在長任務(wù)里非常常見屬于 Long-Horizon 場景下的“規(guī)劃失焦”。7.2 局部最優(yōu)陷阱代理看到倉庫大部分調(diào)用點(diǎn)就認(rèn)為遷移已完成忽略了邊角文件。從局部看它確實(shí)完成了絕大多數(shù)替換從全倉庫看殘留的舊調(diào)用點(diǎn)會(huì)讓整個(gè)遷移失敗。評估端如果只跑測試、不做遷移覆蓋率掃描這類問題很難被發(fā)現(xiàn)。7.3 中間態(tài)恐慌代理把第一個(gè)文件改為新接口后發(fā)現(xiàn)整個(gè)倉庫編譯失敗于是回滾改動(dòng)重新嘗試。反復(fù)幾次后任務(wù)時(shí)間耗盡。這種情況說明代理對“遷移過程中存在中間無效狀態(tài)”缺少認(rèn)知沒有規(guī)劃好分批順序。7.4 驗(yàn)證不足代理完成了所有代碼替換但只驗(yàn)證了新接口能正常工作沒有運(yùn)行舊測試套件。結(jié)果遷移后的代碼雖然能用卻破壞了原有模塊的行為。這類問題在真實(shí)開發(fā)里更隱蔽因?yàn)楣δ苕溌烽L回歸測試的缺失短期內(nèi)不會(huì)暴露。這些失敗模式對所有編碼代理開發(fā)者都有參考價(jià)值如果你的代理跑 SWE Refactor Bench 表現(xiàn)不佳不要只怪基準(zhǔn)太苛刻更要分析代理是在哪一類失敗模式上栽的跟頭。8. 運(yùn)行 SWE Refactor Bench 的常見問題與排查下面是運(yùn)行這類評估基準(zhǔn)時(shí)經(jīng)常遇到的問題按出現(xiàn)頻率整理成排查表。問題現(xiàn)象可能原因排查方式解決方案任務(wù)實(shí)例無法解析元信息格式不匹配檢查 JSON 結(jié)構(gòu)和字段名按基準(zhǔn)文檔調(diào)整解析腳本代理生成的補(bǔ)丁無法應(yīng)用代理改了無關(guān)文件或基準(zhǔn) commit 不匹配對比補(bǔ)丁 base commit 和任務(wù)要求重新 checkout 到指定 commit 再應(yīng)用構(gòu)建超時(shí)依賴安裝慢或資源不足查看日志確認(rèn)卡在哪一步增配機(jī)器預(yù)裝依賴后制作鏡像快照測試結(jié)果不穩(wěn)定每次運(yùn)行代理的結(jié)果隨機(jī)性強(qiáng)同樣的任務(wù)重復(fù)跑多次固定隨機(jī)種子和溫度參數(shù)取多次結(jié)果匯總遷移覆蓋率低但測試通過測試用例沒有覆蓋到殘留的舊 API執(zhí)行靜態(tài)掃描腳本增加遷移掃描步驟計(jì)入最終評分并發(fā)運(yùn)行導(dǎo)致機(jī)器卡死多個(gè)容器同時(shí)構(gòu)建消耗資源查看系統(tǒng)負(fù)載串行執(zhí)行或限制并發(fā)數(shù)代理反復(fù)重試同一失敗步驟代理無法從當(dāng)前錯(cuò)誤中恢復(fù)查看代理日志中的重試循環(huán)增加任務(wù)步數(shù)上限避免無限循環(huán)運(yùn)行 SWE Refactor Bench 最大的坑不是單個(gè)技術(shù)問題而是評估環(huán)境的不一致。兩臺(tái)機(jī)器、兩套依賴版本、不同的 Node/Python 環(huán)境都可能導(dǎo)致同一個(gè)代理出現(xiàn)完全不同的結(jié)果。建議把整個(gè)評估環(huán)境做成鏡像固定下來。9. 把 SWE Refactor Bench 用進(jìn)團(tuán)隊(duì)評估與代理選型如果你不是在做基準(zhǔn)研究而是想給自己的團(tuán)隊(duì)選一個(gè)編碼代理SWE Refactor Bench 也很有參考價(jià)值。技術(shù)棧遷移是研發(fā)團(tuán)隊(duì)每天都會(huì)遇到的真實(shí)場景用它來評估代理的實(shí)際工程能力比單純看編程競賽題目有意義得多。9.1 建立基線先挑選少量有代表性的任務(wù)實(shí)例用你當(dāng)前正在用的代理跑一遍建立基線。不要一開始就上百個(gè)任務(wù)選 5 到 10 個(gè)覆蓋不同難度的實(shí)例就夠了。記錄每個(gè)實(shí)例的成功率、失敗方式、耗時(shí)、資源消耗。9.2 對比多個(gè)代理在相同環(huán)境下讓多個(gè)代理跑同一批任務(wù)。對比時(shí)不只看“誰成功了”還要看“誰失敗的姿勢更有修復(fù)希望”。有些代理失敗是只差一兩個(gè)文件人工接手幾分鐘就能補(bǔ)完有些代理失敗是全盤推倒人工接手等于重做。這兩種失敗的工程價(jià)值完全不同。9.3 結(jié)合人工抽查自動(dòng)化驗(yàn)證是底線但技術(shù)棧遷移里有些問題無法完全自動(dòng)判斷比如代碼風(fēng)格遷移得是否自然、是否引入了不必要的復(fù)雜度。建議對每個(gè)代理的 20% 到 30% 成功樣例做人工 code review綜合判斷質(zhì)量。# 建議的抽查流程 # 1. 將代理生成且驗(yàn)證通過的補(bǔ)丁導(dǎo)出 # 2. 按文件數(shù)、改動(dòng)行數(shù)排序 # 3. 人工 review 改動(dòng)最多的前幾個(gè)樣例9.4 合規(guī)注意事項(xiàng)使用 SWE Refactor Bench 的基準(zhǔn)任務(wù)時(shí)注意基準(zhǔn)任務(wù)里的倉庫代碼有自己的開源許可。如果要在評估中引入公司內(nèi)部倉庫要確保代碼脫敏不把內(nèi)部代碼提交到外部評估環(huán)境。涉及客戶數(shù)據(jù)、敏感業(yè)務(wù)邏輯的倉庫不建議直接用于外部基準(zhǔn)測試。10. 從評估結(jié)果反推編碼代理的產(chǎn)品化思路SWE Refactor Bench 這類長期任務(wù)基準(zhǔn)給編碼代理產(chǎn)品化的方向提供了一個(gè)重要參考代理的能力不能只靠“單輪對話理解”體現(xiàn)更要靠“長時(shí)間自主執(zhí)行和恢復(fù)”來證明。如果你在開發(fā)自己的編碼代理這個(gè)基準(zhǔn)帶來的啟示很直接。首先代理需要一個(gè)“任務(wù)管理器”把全倉庫遷移拆成可驗(yàn)證的小步驟每步完成都能自檢。其次代理需要把目標(biāo)、已驗(yàn)證內(nèi)容、剩余待辦持久化保存避免上下文漂移。再次代理需要一種“中間態(tài)容忍”機(jī)制當(dāng)編譯失敗時(shí)能判斷這是自己剛引入的錯(cuò)誤還是遷移過程中必然出現(xiàn)的過渡態(tài)。這些能力在普通短任務(wù)基準(zhǔn)里很難暴露但在 SWE Refactor Bench 這類任務(wù)里會(huì)迅速顯現(xiàn)。對于使用編碼代理的研發(fā)團(tuán)隊(duì)這個(gè)基準(zhǔn)也提醒了一點(diǎn)不要只看代理在 demo 里的驚艷表現(xiàn)要拿真實(shí)的長時(shí)程重構(gòu)任務(wù)去壓測。代理能寫好一個(gè)函數(shù)不代表它能完成一次跨全倉庫的框架升級。技術(shù)棧遷移需要考慮的兼容性、依賴順序、回歸風(fēng)險(xiǎn)恰好是編碼代理最容易出問題的地方。如果你想進(jìn)一步驗(yàn)證自己的代理可以關(guān)注 SWE Refactor Bench 基準(zhǔn)倉庫和論文的更新看它是否補(bǔ)充了更多行業(yè)級遷移案例。隨著基準(zhǔn)覆蓋的任務(wù)類型越來越廣它給出的評估結(jié)論也會(huì)越來越有參考價(jià)值。最值得先做的一步是克隆基準(zhǔn)倉庫挑一個(gè)遷移任務(wù)實(shí)例讓代理跑一次認(rèn)真分析它生成的 patch。是干凈利落地全局替換還是改一半就斷了是正確地保持了行為不變還是引入了不必要的重構(gòu)這些觀察比任何宣傳材料都更能說明一個(gè)編碼代理的真實(shí)水平。