論文筆記 · AI Agent 開發者/研究者
Dream-RSI:把探索歷史變成可回放的自我改進迴路
先用一個問題定位:它究竟改了什麼?
長程 discovery(發現)任務通常有兩個角色。第一個是 discovery agent:提出候選演算法、數學構造或 GPU kernel,並實際執行與評估;第二個是 exploration policy:決定下一步要從哪個分支繼續、同時開幾個嘗試、何時停止。Dream-RSI 改的是後者,因此它比較像「探索控制器的離線評估與選擇器」,不是把 coding agent 重新訓練一遍。[3]
這個區分很重要:若把任何「下一輪做得更好」都叫作模型自我學習,就會把 prompt、工具、控制流程、策略程式與模型權重混成同一件事。本文後面所說的 RSI(recursive self-improvement,遞迴式自我改進),專指 exploration policy 在多輪中被回放評估、改寫、選出,再部署的閉環。
為什麼固定探索策略會成為瓶頸?
固定策略不一定差;它的問題是,探索空間變大之後,策略仍用同一套「往哪裡分支、怎麼平行、何時收手」的規則。作者把瓶頸拆成兩層:一是固定策略無法從累積的 discovery experience 改善,可能重複把計算花在已經反覆失敗的方向;二是若直接在線上優化策略,每個候選策略都要等一個長程 rollout 完成後才知道好不好。[1][3]
| 問題 | 為何昂貴 | Dream-RSI 的切入點 |
|---|---|---|
| 回饋延遲 | 探索 policy 的好壞通常要等許多 proposal–evaluation cycle 後才顯現;不像單一候選,可以立刻看分數。 | 把已完成 rollout 的每個節點與結果保存下來,讓候選 policy 先讀取既有結果。 |
| 後設策略空間很大 | 很多新 policy 可能根本不行;若每個都線上試,差的候選也會消耗完整執行預算。 | 在同一批 history 上反覆回放,將昂貴的實際 rollout 留給入選者。 |
| 控制器被寫死 | 底層 coding agent 可能變強,但「如何分配探索計算」仍由固定程式決定。 | 把 branching、parallel exploration、stopping 顯式化為可改寫的 exploration-policy code。 |
因此這篇工作的核心不是「再造一個更聰明的 discovery agent」,而是把原本藏在 harness 裡的探索決策抽出來,成為能被觀察、評估、版本化的 meta-layer。這也是為何它對 Agent 工程有啟發:長程任務的瓶頸有時不在模型回答內容,而在控制器把昂貴的執行機會分配給誰。
核心比喻:把走過的山徑變成可查閱地圖
想像 Agent 第一次穿越一片陌生山區。它走錯路、遇到死路、回頭,並在過程中畫下一張地圖。下一個探索策略不需要把所有路再走一次;它可以在地圖上比較不同路線、避開已知死路,或重新考慮之前太早放棄的分岔。
Dream-RSI 把這張地圖對應到 discovery tree:每個節點是一個嘗試,帶著從父節點繼承的 workspace、產物、分數與診斷。完成的探索樹不是只供模型閱讀的文字摘要,而是能按父子關係被另一個 policy 重新走訪的記錄。[3]
| 山徑比喻 | Dream-RSI 對應物 | 可做的事 | 不能做的事 |
|---|---|---|---|
| 已走過的路 | 已記錄的節點與 parent–child 關係 | 改變分支順序、選擇不同已知分支、改變平行批次、提早停止 | 不能從未走過的地方讀出真實新結果 |
| 地圖上的觀測 | artifact、score、diagnostics、workspace snapshot | 讓候選 policy 依照目前已揭露資訊做下一個決策 | 不能偷看尚未揭露節點的分數 |
| 再次出發 | 下一輪 online deployment | 把挑出的 policy 放回真實 discovery agent,新增另一棵樹 | 回放分數不等於真實部署已成功 |
精確性的正確邊界:作者稱 replay simulator 在「已實現的 search space」上是 exact,因為它揭露的是已發生的 outcome,而不是模型猜測的 outcome。這不代表它對未探索分支、換了 evaluator 的環境或下一次隨機生成結果都精確。[1][3]
三階段 RSI loop:online → replay → redeploy
論文的 loop 可以濃縮成三個階段。online(線上)是產生新候選與新結果;offline(離線)是固定 history 後,用相同的決策介面揭露既有節點;redeploy(重新部署)則把被選中的 policy 帶回下一輪。這裡的 offline 不是對模型做權重訓練,而是對探索控制器做歷史回放。
真正探索
目前的 πt 選擇分支與平行批次;discovery agent 和 evaluator 產生新節點與結果。
保存成世界池
把完成的 discovery tree 加入 history;每棵樹成為一個可重播的 replay world。
回放後再部署
policy-development agent 改寫探索程式,在整個固定 history 上評分,選出下一輪 policy。
| 階段 | 誰在做決策 | 會不會產生新執行結果 | 改變的東西 |
|---|---|---|---|
| Online rollout | 目前部署的 exploration policy | 會 | 新增 discovery tree;底層 discovery agent、evaluator 與執行介面固定。 |
| Offline replay | 候選 policy 與 policy-development agent | 不會 | 只改寫與評估 exploration-policy code;從固定歷史揭露已存結果。 |
| Redeploy | selector/部署閘門 | 下一輪才會 | 把選中的策略版本帶回 online,讓 history pool 再長出新世界。 |
Off-policy(離策略)在此指「資料由一個已部署的行為策略留下,但現在拿另一個候選策略去評估」。它不是任意地把舊 log 丟給模型:候選只能使用回放時已揭露的 prefix(目前前綴),並且下一步只能走記錄中存在的 child。這個限制是低成本的來源,也是泛化能力的邊界。[3]
Discovery tree 與 replay 規則:只能揭露已存在的分支
先固定同一個決策介面
每棵樹從 root r 開始。已揭露樹中的 root 與 leaf 是可繼續探索的 eligible nodes;平行 worker 數為 W 時,一輪動作是從這些節點挑一個 batch。用白話寫,policy 每次都在回答:「現在有哪些入口或分支尖端可以接著走?這一輪最多同時開幾個?」
論文把 online 與 replay 的介面刻意做成相同,差異放在「選完 batch 之後怎麼得到下一個觀測」。這使得 policy 的程式可以被拿到另一個 transition backend 執行,而不是為 offline 另造一套評估規則。[3]
Online 會生成,replay 只會揭露
| 規則 | Online rollout | Offline replay |
|---|---|---|
| 起點 | 新樹的 root;可同時使用已完成 history 作為上下文。 | 每個 policy–tree pair 都從該樹 root 重新開始;不沿用另一個候選的已揭露 subtree。 |
| 選 batch | 從目前新樹的 root/leaf 選取,至多 W 個。 | 從目前已揭露 subtree 的 root/leaf 選取,至多 W 個。 |
| transition | discovery agent 執行新嘗試,evaluator 評分;同一起點也可能產生不同 outcome。 | 依 selected node 揭露對應的已記錄 child;不呼叫 discovery agent 或 evaluator 生成新結果。 |
| 可見資料 | 新產生的 workspace、artifact、score、diagnostics。 | 只看已揭露 prefix;未揭露節點的結果仍是未知。 |
| 停止 | policy 選空 batch 或到達 online round limit。 | policy 選空 batch、到達 replay round limit,或沒有可揭露的 recorded continuation。 |
對非 root 節點,replay 依照原樹的 parent–child 順序揭露下一個已記錄 child;對 root,則依既有記錄逐步開啟尚未揭露的分支。因而回放軌跡是原樹的 subtree,不是把所有節點一次塞進 prompt。每個 policy–tree pair 都重置,避免早先候選的觀測狀態污染後來候選。[3]
回放目標函數:品質、成本與平行性的折衷
Dream-RSI 不只問「最後分數最高嗎」,也把代表性執行成本與平行度放進 replay objective(回放目標)。對第 i 棵歷史樹與第 m 個 policy version,論文給出的形式是:
其中:
max sᵥ是這次回放揭露 subtree 中最好的 discovery quality,論文設定分數越高代表品質越好。Nᵢᵐ是回放軌跡揭露的非 root 節點數,代表「這條策略等價於要求多少次 generation–evaluation」,不是 replay 當下真的發生了多少次 API/程式執行。β₁是代表性執行成本懲罰;β₂是平行性獎勵,讓一次批次完成多個有價值的 continuation,而不是把相同工作序列化。kᵢᵐ,★是完成的回放決策輪數;若回放是非空的,最後一項近似「每一決策輪平均揭露多少嘗試」。
這個目標函數帶來一個工程上的提醒:若只最大化最高分,policy 可能把所有資源押在單一路線;若只最小化節點數,policy 可能太早停;若忽略平行性,理論上相同的節點數也可能有完全不同的 wall-clock。實作時應把品質、代表性成本、平行輪數分開記錄,不能只留下單一總分。[3]
「固定歷史上不變差」到底保證什麼?
外層 iteration t 的 offline phase 會從目前 policy πt 開始產生多個 revision。關鍵做法是:目前已部署的版本本身也放在候選集合中,所有候選都在相同的固定 history Ht 上回放,再選平均 replay score 最高者:
這就是「固定歷史上不變差」的正確讀法:相對於同一批已收集的 trees、同一個 replay transition、同一組 β,選出的版本在平均回放分數不低於目前版本。論文與官方頁面都把這個候選保留機制視為 selection 的理由。[1][3]
| 可以說 | 不能說 |
|---|---|
| 固定 Ht 上的平均 replay score 不低於 πt。 | 下一個未探索分支的真實結果一定更好。 |
| 候選 policy 在同一套 prefix-observable 規則下被公平比較。 | 已經找到全域最佳 exploration policy。 |
| 選擇器不會因為回放分數較低而主動替換目前版本。 | 線上 rollout、模型隨機性、資料分布改變或 evaluator 改版都不會造成 regression。 |
我的工程判讀:這是一個「對固定資料與固定 surrogate objective 的單調選擇性質」,不是部署安全性 theorem。若要把它帶進生產環境,仍需 holdout rollout、canary、版本鎖定與 rollback;否則只是把 history overfitting 包裝成穩定。
三類實驗:作者報告了什麼數據?
作者在三個 scientific discovery domain 評估八個任務:algorithm engineering、mathematical optimization 與 GPU kernel engineering。下面先列論文摘要和官方頁面特別突出的數字,再說這些數字不該被怎麼解讀。
| 領域 | 作者報告的數據 | 正確解讀 | 來源 |
|---|---|---|---|
| Algorithm engineering Lasso regularization path | 相對 fixed exploration,最多 1.7× 較少 discovery-agent calls;相對 SimpleTES,最多 162× 較少 calls。SimpleTES 的表格預算為 51,200 generations。[2] | 這是探索成本與下游 solver 表現的比較,不是說每個 Lasso 設定都得到 162× 加速,也不是本機重跑結果。 | arXiv HTML |
| Mathematical optimization | Sum–Difference、Autocorrelation、Circle Packing 三任務;作者摘要報告在少於 1k generations 的設定下,相對 SimpleTES 有超過 50× 的 budget savings。[2] | 不同任務的方向不同:Sum Diff 越高越好,Auto Correlation 越低越好,Circle Packing 越高越好;不能把三個數字當成同一種指標。 | arXiv HTML |
| GPU kernel engineering KernelBench | VGG16 以約 2.43× 較少 generations 達到可比性能;LayerNorm 為 1.79×;ConvDiv 在可比 budget 下性能 2.09×;ConvMax 為 1.44×。[1][3] | 前兩個是較少 generations 達到 comparable performance,後兩個是 comparable budget 下較高 performance;方向不能混為「全部快 2 倍」。 | 官方專案頁 |
Lasso 的表格:成本與下游結果要一起看
arXiv HTML 的 Lasso 表格列出兩個 discovery-agent 設定。Gemini-3.1-Pro 下,Dream-RSI 的 cumulative discovery-agent calls 為 317,六個 held-out downstream dataset 的平均 wall-clock runtime 為 2,931.0 ms;Recursive Fixed Exploration 為 550 calls 與 3,587.1 ms。Gemini-3.7-Flash 下,Dream-RSI 為 1,879 calls 與 2,350.6 ms;固定探索為 3,200 calls 與 2,516.7 ms。表格的 runtime 是越低越好,compute 是 cumulative calls。[3]
| Discovery agent | 方法 | Compute(calls) | 六資料集平均 runtime(ms) | 來源 |
|---|---|---|---|---|
| Gemini-3.1-Pro | Recursive Fixed Exploration | 550 | 3,587.1 | 論文報告,未由本文重跑;arXiv HTML[3] |
| Gemini-3.1-Pro | Dream-RSI | 317 | 2,931.0 | 論文報告,未由本文重跑;arXiv HTML[3] |
| Gemini-3.7-Flash | Recursive Fixed Exploration | 3,200 | 2,516.7 | 論文報告,未由本文重跑;arXiv HTML[3] |
| Gemini-3.7-Flash | Dream-RSI | 1,879 | 2,350.6 | 論文報告,未由本文重跑;arXiv HTML[3] |
數學任務:不是每一欄都由 Dream-RSI 贏
在作者列出的代表性數字中,Sum Diff 的 Dream-RSI 為 1.145427,Recursive Fixed Exploration 為 1.144047,SimpleTES 為 1.143975;Circle Packing 三者都列為 2.635983;Auto Correlation 則是 Dream-RSI 1.456375、固定探索 1.456001、SimpleTES 1.453675,而且該欄越低越好。這表示「整體 competitive」不等於每個任務都刷新最佳值;作者也特別註明 SimpleTES 在 Auto Correlation 的數值較佳,但使用 51,200 generations。[3]
行為分析:先省計算,停滯後再擴張
在 ConvDiv 的分析中,作者報告 learned exploration policy 會先把 evaluated attempts 從 110 降到 50,性能停滯後再增加探索力度,並與之後的 round-best score 上升對齊。這比較像自適應資源配置,而不是單調地「越廣越好」或「越貪心越好」。官方頁面也報告,把歷史抽成語義方向直接塞進 prompt,在相同 budget 下反而劣於 replay;長程、多分支任務中,過強的語義先驗可能壓縮探索多樣性。[1][3]
為什麼它不是完整的 world model?
論文把 replay simulator 與 world model 放在類比關係中:兩者都讓 policy 有機會在不重複真實互動的情況下「想像」路徑。然而,經典 world model 的核心是學習環境如何因動作而演化的可泛化 dynamics;Dream-RSI 的 replay simulator 則是把已發生的探索樹當成 empirical、grounded 的可回放資料結構。[3]
| 比較面向 | 學習式 world model | Dream-RSI replay simulator |
|---|---|---|
| 如何得到 transition | 從經驗學習或近似環境 dynamics,產生預測。 | 從 recorded discovery tree 揭露已存的 child 與 outcome。 |
| 對未見狀態的能力 | 理想上可對未見組合做泛化,但準確度取決於模型。 | 不對未探索分支提供真實反事實;coverage 就是歷史實際走過的範圍。 |
| 是否更新模型權重 | 常見做法會學習 dynamics 或 policy representation。 | 作者固定 discovery agent、evaluator、execution interface,只改 exploration-policy code。 |
| 精確性敘述 | 是對真實環境的近似程度問題。 | 可在 realized search space 內精確重播,但不延伸成整個世界的真實模型。 |
所以「evolving worlds」不是宣稱 Dream-RSI 擁有一個會預測未來的完整環境模型。每一輪 online deployment 只是新增一棵實際探索樹,讓 replay pool 擴大;它仍然不能把未被探索的 branch 變成已知事實。這個縮小後的定義反而是工程優勢:不必先訓練一個昂貴的 generative world model,就能利用已經為長程任務支付過的執行記錄。
失效模式、限制與證據界線
Dream-RSI 的力量與限制是同一件事:它很忠實地重播歷史,因此不會憑空補上歷史沒有覆蓋的世界。下表把方法限制翻成工程風險。
| 失效模式 | 會發生什麼 | 最小控制 |
|---|---|---|
| 歷史覆蓋太窄 | 候選 policy 在已探索的幾條路上看起來很好,但真正部署遇到新的 branch 就失去依據。 | 保留多棵 tree、不同初始分支與 holdout rollout;不要只對單一幸運 run 選 policy。 |
| 回放 overfit | policy 學會針對既有節點分數排序,而不是學到可遷移的探索原則。 | 把 history、policy version、task version 與 evaluator version 綁定;以新的 online run 驗證。 |
| 記錄不完整或不可重建 | 缺 parent、workspace、artifact、diagnostics 或 score 時,transition 可能不再是原始 outcome。 | 以不可變 node ID 與 schema 驗證保存;缺欄位就讓 replay 失敗,不要靜默填值。 |
| policy revision 產生壞程式 | 離線候選可能語法錯誤、超出介面、破壞批次限制,甚至讀取不該看的資料。 | 先做 syntax/contract test,再用隔離 backend 執行;只有通過靜態檢查和 approval 才能進 online。 |
| 目標函數被錯配 | β₁、β₂ 或 evaluator 改變後,原本「最佳」可能只是成本與品質權重的產物。 | 版本化 objective,分別報告 quality、represented probes、rounds、parallelism,不只看總分。 |
| 敏感資料進入 history | workspace snapshot、錯誤輸出或 proposal 可能包含 token、個人資料或內部程式碼。 | replay store 與線上工作區分權限;最小化保存、遮罩敏感欄位,禁止把 secrets 放入 tree。 |
| 把回放當成部署保證 | 離線 score 上升,但線上遇到 stochastic discovery agent、資源限制或新 evaluator 後回歸。 | staging、canary、人工核准、版本鎖定與 rollback 缺一不可。 |
公開性也是可重現性限制
本次查證的官方 GitHub README 明確寫著 code is being prepared for release;其 release plan 將「Discovered programs」「Full codebase」與「Reproduction scripts」列為 Being prepared。這代表論文、專案頁與部分 PDF 資產可讀,不代表完整程式碼與重現腳本已可供外部獨立重跑。[4]
證據界線:本文不把 preprint 寫成同儕審查定論,不宣稱作者結果已在本機重現,也不把「固定歷史上不變差」擴張成線上安全或品質保證。對任何引用的倍數與分數,請回到論文表格、官方頁面與 release plan 查核。
對 Hermes、NOOA 與一般 Agent 平台的最小落地架構
如果要把這個想法放進 Hermes、NOOA 或一般 Agent 平台,最小可行單位不是「讓 Agent 自己改所有東西」,而是增加一個可審核的 exploration-controller layer。以下是設計映射,不是聲稱論文已與這些平台整合;尤其 NOOA 的特定 API、隔離模型與資料格式,本文不做未查證假設。
| 元件 | 最小責任 | Hermes/NOOA/一般平台的對應方式 |
|---|---|---|
| Explorer | 執行固定的 discovery agent、工具與 evaluator。 | 沿用現有 Agent loop;不讓 policy revision 直接改模型、工具權限或 evaluator。 |
| Controller | 輸入已揭露 prefix 與 legal actions,輸出至多 W 個 node 的 batch 或 stop。 | 可做成受版本控制的 Skill、worker 或 policy module;介面要比自由文字更窄。 |
| Recorder | 以 immutable tree 保存 parent、workspace/artifact reference、score、diagnostics、policy version。 | 放在 durable store/工作區;敏感原文與可回放 metadata 分離,權限分層。 |
| Replay evaluator | 不呼叫外部 Agent,依 recorded child 做 deterministic transition;每個 pair 從 root reset。 | 使用獨立 worker 或 sandbox,拒絕網路與未列入 history 的讀取。 |
| Policy developer | 根據 replay trajectory 產生有限候選版本與變更理由。 | 在隔離的研究 worker 執行;輸出 diff、測試結果與風險,不直接覆蓋 production policy。 |
| Selector | 以固定 objective 評估目前版本與 revisions,保留 current policy,選最高 replay score。 | 需要 approval gate、版本鎖定與可回滾 deployment record;不要只用最後一次候選。 |
| Online gate | 用新 rollout 驗證 history coverage、品質、成本與安全。 | 接到 Hermes/NOOA 的任務狀態與通知層;生產入口仍保留人工核准和 rollback。 |
不依賴新資料庫的最小記錄格式
先把資料契約定清楚,再選儲存後端。下面只是欄位示意,不是作者公開的程式碼或固定 schema:
{
"tree_id": "run-2026-09-16-001",
"task_version": "task-v3",
"policy_version": "policy-v7",
"evaluator_version": "eval-v2",
"nodes": [
{
"node_id": "n-0042",
"parent_id": "n-0017",
"observed": true,
"artifact_ref": "artifact://internal/…",
"score": 0.0,
"diagnostics": ["…"],
"sensitive_fields": "redacted-or-separated"
}
]
}
對 Hermes,這個 controller 可以由獨立 worker 管理,policy revision 以檔案變更和測試結果交付,外層任務再決定是否部署;對 NOOA 或其他平台,重點同樣是把「觀測 prefix、合法 batch、回放 transition、選擇閘門」做成平台無關的合約。不要把平台已有的長期記憶直接當 discovery tree:記憶是可檢索上下文,tree 還需要 parent–child、可揭露順序與 outcome 完整性。
實作檢查清單:先保留可回放性,再談自我改進
- 定義固定的 policy API:觀測內容、合法節點、批次上限 W、停止語意都要明確。
- 為每次 online rollout 建立不可變 tree ID,保存 parent、workspace/artifact reference、score 與 diagnostics。
- 將 online executor 與 replay executor 分開;offline 不得偷偷呼叫 discovery agent 或 evaluator。
- 讓每個 policy–tree pair 從 root reset,並強制 policy 只能看到已揭露 prefix。
- 把 history、task、evaluator、policy、objective、schema 全部版本化。
- 將 represented probes、quality、parallelism 與 replay score 分開記錄,避免只最佳化一個混合數字。
- 把目前 deployed policy 放進候選集合;若 revision 低於 baseline,selector 不得自動替換。
- 對 policy code 執行 syntax、contract、resource、權限與敏感資料檢查,再進 staging。
- 用新的 online rollout 或 holdout tree 驗證,不把 replay 上升當成部署成功證據。
- 保留 approval、canary、版本鎖定與 rollback;任何自動學習都不能繞過線上安全邊界。
- 在研究筆記中標示「作者報告/本文未重跑/尚未公開的 reproduction 資產」,讓讀者知道證據在哪一層。
閱讀順序與證據界線:怎麼讀才不會把比喻當保證
- 先看官方專案頁:快速建立三階段 loop、山徑地圖比喻與官方 highlight;不要先從倍數 headline 推導機制。dream-rsi.com[1]
- 再看 arXiv HTML 的方法段:優先讀 discovery tree、online rollout、offline evaluation、replay objective 與 policy selection,尤其注意「只揭露已記錄 child」和「每個 pair 從 root reset」。arXiv HTML v1[3]
- 接著看實驗段:確認每個數字的方向、budget、比較基準和是否是 held-out downstream data;不要把 2.43× fewer generations 和 2.09× higher performance 當成同一類指標。arXiv abstract[2]
- 最後查 GitHub release plan:確認哪些資產已公開、哪些仍在準備;在完整 code 與 reproduction scripts 未列為可取得前,不要把本篇或其他文章的轉述當成獨立重現。GitHub repository[4]
若只記得一個判斷:Dream-RSI 的新意在於把已付費的長程探索歷史,轉成可供 meta-policy 反覆試走的有限世界。它不是把未探索的未來預測出來,也不是保證線上策略永遠變好;它提供的是一個可以被版本化、評分、審核和回滾的 exploration-controller 改進迴路。
來源與研究口徑
以下來源由查證時建立的 citation ledger 登錄;正文的 [1]–[5] 連結到此清單。論文與官方頁面是外部事實的依據;工程架構、風險控制與 Hermes/NOOA 對應段落則明確標示為本文設計建議,不冒充作者已驗證的整合。
- Dream-RSI 官方專案頁:方法概念、三階段 loop、官方 highlight、結果摘要與行為分析。
- arXiv 摘要:Dream-RSI: Recursive Self-Improvement through Evolving Worlds:論文標題、作者、提交資訊與摘要中的跨領域數據。
- arXiv HTML v1:Dream-RSI:discovery tree、online/offline replay 規則、回放目標函數、policy selection 與實驗表格。
- Dream-RSI 官方 GitHub:README、release plan、公開資產與 full codebase/reproduction scripts 的狀態。
- Dream-RSI 原始 PDF:論文原始 PDF 版本,供公式、圖表與頁面版面交叉核對。[5]
查證限制:本文未執行作者的 Gemini CLI、Discovery agent、evaluator 或 KernelBench 實驗;未把 GitHub release plan 的「Being prepared」改寫成已公開;如來源頁面後續更新,應以來源當下內容和版本標記重新核對。