重點
- Stanford、SambaNova、卡內基美隆與華盛頓大學等單位的研究者 10 月 6 日在 arXiv 發表 Stateless Language Agents(SLA),處理自動化研究系統跑很久之後就不再進步的問題。
- 核心原則是「有狀態的搜尋,無狀態的 agent」:沒有任何 agent 把對話帶到下一次呼叫,候選解與量測結果都存在 harness 裡,每次呼叫再依角色重建一份新的上下文。一個 Advisor 讀 harness 整理的證據,把具體實驗分派給平行的 Worker。
- 在軟體工程、kernel 最佳化與演算法設計任務上,以最多 10 億 token 的預算對比 EvoX、CORAL 與 SwarmResearch,SLA 在每個任務的最終結果都最好。Anthropic 的 kernel 最佳化任務用 Codex 跑三次,三次 SLA 都贏過九次對照,達到最強對照的最終成績只用了 6,790 萬 token,少了 93.1%。
- 評測預算太短會看錯:在 FrontierSWE 的四個任務上,SLA 在 25% 預算時都落後最強對照,到滿預算時都領先。
- Advisor 只占總 token 的 0.24–0.51%、模型成本的 1.2–2.3%。多數設定只跑了一次,只有 kernel 任務與消融實驗有重複。
要解決的問題
自動化研究(AutoResearch)讓 agent 反覆提出、實作、評估解法,對象是有可量測目標、但不知道最佳解在哪的問題。系統要處理的問題越難,越要問:多給推論預算,會不會換來更好的解?
論文指出兩個原因讓這件事很少被測到:
- 預算單位不一:多數評測用迭代次數或模型呼叫次數計預算,不用 token。
- 基準太早飽和:在由 AlphaEvolve 推廣的 26 圓填充問題上,四個方法在 500 萬 token 時就相差不到 2.3×10⁻¹⁰,之後只是在比誰先碰到天花板。
長時間執行會碰到兩個困難。第一是保留經驗與控制上下文的衝突:舊的候選解與失敗紀錄之後可能有用,但反覆讀越來越長的歷史既耗 token,也讓 agent 表現變差。第二是紀錄本身不會決定下一步該試什麼。
論文舉了 CORAL 的兩段實際紀錄:
- 在一個 GPU kernel 任務上,最後一次改進出現在 2.31 億 token,之後 token 一路燒到 10 億,最後 1,500 個 session 有 98% 沒有呼叫任何工具。agent 一再宣稱自己的解已是最佳並停下來;CORAL 重啟時恢復同一段對話,agent 又做出一樣的決定。
- 在 FrontierSWE 的 libexpat 任務上,兩個 agent 從同一個父版本出發,各自實作了同一個功能,得到同樣的分數。接下來又重疊一次,即使其中一個先貼了筆記宣告自己要做這個方向。
做法
論文區分 agent 的「狀態」與「上下文」:狀態是跨呼叫保留的東西,上下文是單次呼叫裡看到的東西。SLA 的 agent 沒有狀態,但有上下文,上下文由 harness 從研究狀態重建。
每一輪的流程:
- harness 從研究狀態重建 Advisor 的上下文。
- Advisor 把具體實驗分派給各個 Worker。
- 每個 Worker 在隔離的工作區做幾次本地嘗試,預設 3 次。
- 獨立的評估器替每個候選打分。
- harness 記錄結果,更新每個 Worker 的本地候選與全域最佳解,直到預算用完。
兩種角色看到的東西不同:
| 角色 | 上下文內容 | 看不到的東西 |
|---|---|---|
| Advisor | 任務說明、全域最佳解與分數、harness 整理的證據摘要(近期嘗試、依搜尋方向分組的結果、Worker 狀態、近期進展) | 完整的時序紀錄 |
| Worker | 任務說明、自己的分派、自己保留的候選、上一次的狀態、分數與正確性診斷 | 其他 Worker 的工作區與完整研究歷史 |
證據摘要會把「量到沒改進」和「實作、執行或正確性失敗」分開,避免一次執行失敗被當成這個方向已經走不通。Worker 的本地候選即使落後全域最佳解,改進仍會保留,讓替代做法有時間成熟。Advisor 改派某個 Worker 時,該 Worker 從全域最佳解重新開始。
無狀態是強制的,不靠提示詞請 agent 遵守:
- Advisor 每輪開新 session
- Worker 以無特權行程執行,用 Linux Landlock 限制檔案系統存取,網路也受限制
- 每次嘗試之間清掉 Worker 保存的 session 與暫存檔
- 評估器在 Worker 環境之外執行,程式碼受保護
論文也說明了它跟 coding agent 內建子代理的差別:內建子代理雖然各有上下文,負責協調的 agent 仍保有自己的對話。SLA 裡連 Advisor 都是無狀態的。
實驗設定
| 類別 | 任務 | Token 預算 |
|---|---|---|
| 長時程軟體工程 | FrontierSWE:libexpat 轉 x86-64 組合語言、Git 轉 Zig、Dart 轉 Haskell、Lua 原生編譯器 | 每題 7 億 |
| Kernel 最佳化 | Anthropic VLIW SIMD kernel 最佳化 | 10 億 |
| Kernel 最佳化 | NVIDIA SOL-ExecBench #1、#58、#210 | 每題 5 億 |
| 演算法設計 | FrontierCS Structured-LWE | 2 億 |
- 兩種 coding agent 設定:Codex CLI v0.152.1 配 GPT-5.5,Claude Code v2.1.258 配 Claude Opus 4.8,推理強度都設為 high。
- Advisor 與 Worker 用同一個模型,所以進步不能歸因於較強的 Advisor 指導較弱的 Worker。
- 對照方法都用固定版本的上游實作,不改搜尋邏輯;所有方法共用同樣的種子解、公開任務材料與受保護的評估器。
- 外部的累計 token 計數器統一在預算用完時停止每個方法,agent 看不到計數器。
結果
Anthropic kernel 任務,數字是週期數,越低越好:
| 方法 | Codex,10 億 token(三次平均) | Codex 達標所需 token | Claude Code,10 億 token(一次) | Claude Code 達標所需 token |
|---|---|---|---|---|
| EvoX | 1343.3 ± 4.0 | 未達到 | 1153 | 未達到 |
| CORAL | 1350.0 ± 134.2 | 未達到 | 1130 | 8.883 億 |
| SwarmResearch | 1275.7 ± 133.9 | 9.863 億 | 1243 | 未達到 |
| SLA | 1112.0 ± 8.9 | 6,790 萬 | 1039 | 1.385 億 |
「達標」指第一次追上同設定下最強對照的最終成績。SLA 最差的一次是 1122 週期,仍好過對照最好的一次 1191 週期。
FrontierSWE(Codex,一次執行),分數乘以 100:
| 任務 | SLA 在 1.75 億 / 7 億 | 最強對照在 1.75 億 / 7 億 |
|---|---|---|
| libexpat 轉 x86-64 組合語言 | 18.82 / 31.33 | 19.67 / 24.58(SwarmResearch) |
| Git 轉 Zig | 20.42 / 28.84 | 24.32 / 27.98(SwarmResearch) |
| Dart 轉 Haskell | 15.43 / 45.27 | 26.70 / 38.59(SwarmResearch) |
| Lua 原生編譯器 | 80.22 / 96.15 | 82.97 / 90.66(CORAL) |
滿預算時,SLA 平均比各題最強對照高 4.95 分。只看 25% 預算的話,四題都會判 SLA 落後。
其他任務:
- SOL-ExecBench:三題平均高 5.5%。#58 達標只用了 1,450 萬 token,最強對照 EvoX 用了 3.541 億,少 95.9%。#1 是唯一的例外,EvoX 先達標(4,610 萬對 1.527 億),但 SLA 最後分數較高(0.763 對 0.710)。#210 的進步最小,所有方法在 25% 到 100% 預算之間都沒有提升超過 0.02,最佳 kernel 都用 Triton 寫成。
- FrontierCS Structured-LWE:59.5 對 SwarmResearch 的 58.0。
消融與成本
消融從共享的 SLA checkpoint 開始,分別在 10% 與 20% 預算時存下研究狀態,每個設定再跑 1 億 token,各跑三次。三個變體都保持 agent 無狀態,只改上下文內容或有沒有分派:
- 拿掉 Advisor 上下文重建:Advisor 不看摘要,改用唯讀介面自己翻完整紀錄
- 拿掉 Worker 隔離:每個 Worker 每次嘗試前都能讀完整紀錄與所有 Worker 的候選
- 拿掉 Advisor 分派:Worker 收到的是獨立嘗試的提示,Advisor 仍會執行
三個變體在每組比較裡的平均進展都比完整 SLA 少。例如 libexpat 從 7,000 萬到 1.7 億 token 這段,完整 SLA 進步 2.66 分,拿掉分派的版本進展少了 84.2%。沒有分派時,紀錄裡可以看到三個 Worker 從同一份程式碼出發、各自加上同一個 XML 實體解碼功能,三個都沒有提高分數。
影響會隨時間累積。拿掉 Worker 隔離,在 1 億 token 的延續實驗裡只差 5–11 個週期;從頭跑滿 10 億 token,最後停在 1336 週期,比完整 SLA 的平均差了 224 個週期。
協調者的開銷:
| 任務 | 方法 | 協調者占 token | 協調者占成本 |
|---|---|---|---|
| Anthropic kernel(10 億 token) | SwarmResearch 的 Shepherd | 8.39% | 6.14% |
| Anthropic kernel(10 億 token) | SLA 的 Advisor | 0.24% | 1.20% |
| FrontierSWE libexpat(7 億 token) | SwarmResearch 的 Shepherd | 10.70% | 7.35% |
| FrontierSWE libexpat(7 億 token) | SLA 的 Advisor | 0.51% | 2.29% |
Shepherd 的開銷多半來自它長期累積的上下文:在 kernel 任務上,它平均每次呼叫讀入約 9.9 萬個 token,新開的 session 起始約 8,000 個。成本以 GPT-5.5 的牌價估算,兩個方法都有九成以上的 token 是命中快取的輸入。
Worker 數量的影響:
- 從 1 個加到 15 個,kernel 任務的執行時間縮短 6.6 倍,FrontierSWE 的平均縮短 7.3 倍。
- kernel 任務在 25% 預算時,7 個與 15 個 Worker 分別落後 1 個 Worker 337 與 174 個週期,滿預算時四種寬度都落在 1107–1113 週期之間。
- FrontierSWE 上最佳寬度因題而異:Dart 是 3 個,Git 與 libexpat 是 7 個,Lua 是 1 個。預設的 3 個離每題的最佳值都不遠,速度是 1 個 Worker 的 2.5–2.7 倍。
Worker 模型也可以分開挑。Advisor 固定用 GPT-5.5 時,花 100 美元的情況下,GPT-5.4 mini 當 Worker 在 Git 轉 Zig 上反而比 GPT-5.5 高(20.88 對 19.68),在 kernel 任務上則是 GPT-5.5 較好。
跟既有工作比新在哪
FunSearch、AlphaEvolve、EvoX 這一類演化式搜尋,每個候選只靠一兩次模型呼叫產生。CORAL 與 SwarmResearch 改用會用工具的 coding agent,但 agent 各自維持長時間的 session,研究歷史大半存在對話裡。SwarmResearch 的 Shepherd 也被指示不要分派具體點子。
SLA 把歷史整個移到 harness,並把「下一步試什麼」交給一個每輪都重新開始的 Advisor。論文認為最接近的是 Kosmos 的共享世界模型,不過 Kosmos 是由專家評閱報告來評估,沒有可執行的目標函數。
因為研究狀態都存在 harness,SLA 也可以當實驗工具使用:消融實驗能從完全相同的 checkpoint 恢復,分開比較各個設計。論文另外提到兩點延伸:
- 一次長跑被拆成許多上下文有界、結尾有評估分數的短呼叫,這些呼叫可以直接當強化學習的回合,不必拿長達 10 億 token 的完整執行去訓練。
- 所有持久狀態都在 harness 裡,人可以檢查、存檔與回滾;候選程式碼仍可能鑽評估器的漏洞,所以受保護的評估器仍有必要。
限制
論文自己列出的限制:
- 重複次數少:一次長時程執行要花數百到數千美元,多數設定只跑一次,只有 Codex 的 kernel 任務與 checkpoint 消融有三次重複。
- 成本估算不完整:比較以 token 對齊,成本估算不含執行與評估實驗的算力。
- 消融的範圍:消融改變的是 agent 看到什麼,沒有直接比較 agent 保留對話與不保留對話的差別。
- 任務類型:所有任務都有可執行的評估器,目標模糊或評估很慢的問題還沒測過。
設定上也有一處要留意:在 kernel 任務上,CORAL 依上游預設直接使用原始任務描述,裡面另外列出了最佳化方向與先前已知的最佳分數,給 CORAL 的資訊比其他方法多。