重點
- 上海科學智能研究院、復旦大學等單位的研究者 10 月 8 日在 arXiv 發表 REMORY,處理長時程 agent 壓縮上下文(context compaction)之後,文字摘要不足以支撐後續決策的問題。
- 做法是在摘要後面附上一段有上限的軟記憶 token:記憶網路讀取被壓縮的歷史與新摘要,產生最多 4,096 個位於模型輸入空間的向量。執行任務的模型(論文稱為 actor)保持凍結,只訓練記憶網路,目標是讓 actor 看到「摘要+記憶」時的續寫,接近它看到完整歷史時的續寫。
- 在 SummHay 上,摘要加記憶讓 citation F1 從 56.98 升到 61.03,insight 涵蓋率幾乎不變。輸入位置平均只有完整上下文的 5.2%,joint score 43.39,完整上下文是 43.41。
- 在 Codex CLI harness 下,Qwen3.8-27B 在 AutomationBench、JobBench、Terminal-Bench 2.1 與 BrowseComp 分別進步 9.8、7.6、4.5 與 3.0 分;GLM-5.3-Flash 在後兩項進步 3.3 與 4.1 分。重複的工具輸出少了 17.9–29.8%,工具錯誤少了 25.3–49.7%。
- Terminal-Bench 與 BrowseComp 每個設定只跑一次。公開的 GLM 記憶網路有 12.4 億參數,論文描述的是 15.02 億。
要解決的問題
長時程 agent 的上下文視窗有上限,觀察、工具輸出與決策累積到一定長度,就得壓縮歷史才能繼續。Claude Code 與 Codex CLI 的 /compact 都是把先前的互動換成一段文字摘要,agent 再從這份摘要往下做。論文畫出一次 agent 執行中每個請求的輸入長度:隨互動增加,壓縮時驟降,然後再增加,呈鋸齒狀。
摘要寫成的時候,還不知道之後會需要哪些細節。論文刻意不假設摘要之外需要的資訊能事先列舉出來。論文舉的例子是 Terminal-Bench 的一個細胞分割任務:一次重構在壓縮前刪掉了幾個 helper function,摘要記下了已知的錯誤和備份檔,但沒有留下實際的編輯指令。
做法
殘差記憶
每到一次壓縮邊界 :
- :上一份摘要與記憶(如果有),加上上次壓縮之後的互動
- :這次產生的新摘要
- 記憶網路產生 ,長度
actor 依序讀到固定的系統指示、,再讀之後的新互動。下一次壓縮時, 裡包含上一輪的摘要與記憶,所以記憶能跨越多次壓縮保留下來。論文把「以摘要為條件產生、再附在摘要後面」類比為沿著序列維度的殘差連接,因此稱為 residual memory。存檔與檔案檢索工具照常可用,需要精確紀錄時仍然靠工具取回。
記憶網路的設計:
- 讀取凍結 actor 的特徵,用可學習的 query 平行預測記憶向量,再透過 gated cross-attention 參考摘要
- 每 1,024 個來源位置產生 64 個軟 token,再以階層式壓縮把最終記憶限制在 4,096 個 slot,並保留來源順序
- 輸出是 actor 輸入空間裡的連續向量,不對應詞彙表中的 token
- 梯度穿過凍結的 actor 回傳,actor 的參數不變
| Actor | 記憶網路架構 | 可訓練參數 | 上下文視窗 |
|---|---|---|---|
| Qwen3.8-27B | 改自 DFlash | 19.4 億 | 262,144 |
| GLM-5.3-Flash(3,200 億參數) | DFlash-2,加上分組動態卷積 | 15.02 億 | 100 萬 |
DFlash 原本是用於 speculative decoding 的 block diffusion 架構。記憶網路依附於特定 actor 訓練,兩個模型各有自己的一份。
兩階段訓練
teacher 與 student 共用同一個凍結的 actor,差別只在輸入:
| 階段 | Teacher 的輸入 | Student 的輸入 | 資料 |
|---|---|---|---|
| 一、重建 | 一段原文,加上「把它重複一次」的指令 | 以軟記憶取代原文,指令相同 | MMFineReason-Full-2.3M 的文字欄位 |
| 二、以摘要為條件的續寫 | 原始互動歷史 | 固定的摘要,加上由該歷史產生的記憶 | 推理與程式軌跡(含 Open-PerfectBlend 的提示)、預先產生的摘要與 Qwen 產生的回應,依前文長度由短到長排序 |
兩個階段都預測同一段目標回應,損失是 student 對 teacher 的 reverse KL:
其中 是 teacher 在第 個位置的預測分布, 是 student 的。KL 涵蓋整個詞彙表與整段回應,權重 稍微偏重較前面的位置,只更新記憶網路的參數 。
第二階段裡,記憶編碼器看不到未來的回應。摘要已經在 student 的輸入中,所以記憶被導向填補剩下的預測差距,可以與摘要重疊,也不必重建每個被省略的事實。論文也畫出第二階段以第一階段結果初始化、與隨機初始化的訓練曲線,兩者用相同的目標與資料順序,作為最佳化的診斷。
壓縮後還能不能指出來源
SummHay 要求模型從大量文件中找出與查詢相關的 insight,並標出來源文件。實驗用 Qwen3.8-27B 跑完十個文件集的 92 個查詢,比較四種輸入:
- 完整上下文
- 只有摘要
- Summary++:摘要加上一段額外文字,占用的位置與記憶相同
- 摘要+REMORY
三種壓縮條件共用同一個 actor、查詢、解碼設定與基礎摘要。回答時沒有工具、存檔或來源檢索可用,評分用 GPT-5.6-Sol 與基準自帶的 coverage 提示。
| 輸入 | Coverage | Citation F1 | Joint score |
|---|---|---|---|
| 完整上下文 | 72.46 | 56.60 | 43.41 |
| 只有摘要 | 67.55 | 56.98 | 39.84 |
| Summary++ | 67.52 | 56.94 | 39.78 |
| 摘要+REMORY | 67.95 | 61.03 | 43.39 |
- 加上記憶後,citation F1 增加 4.04、joint score 增加 3.55,coverage 只差 0.40(論文以四捨五入前的數字計算)。
- joint score 增益的 paired collection bootstrap 95% 區間是 [+0.74, +6.21]。
- 只看兩種摘要條件都找到的 553 個 insight,citation F1 仍從 57.31 升到 61.41。
- 平均輸入位置:完整上下文 96,872,只有摘要 1,393,摘要加記憶 5,024。
- 同樣位置預算的文字補充,分數和只有摘要幾乎一樣。
coverage 幾乎不變、歸因明顯提升,論文據此解讀:記憶主要幫模型把已經找回的主張對應到支持它的證據。
端到端的 agent 任務
每組比較固定模型權重、Codex CLI harness、提示詞、工具、解碼設定、預算與壓縮策略,兩種設定都能取回精確的歷史紀錄。差別只在壓縮時多加最多 4,096 個記憶 slot。
| 基準 | 任務數 | Actor | 執行次數 | 評分方式 |
|---|---|---|---|---|
| BrowseComp | 1,266 | Qwen、GLM | 1 | GPT-5.6-Sol 評審 |
| Terminal-Bench 2.1 | 89 | Qwen、GLM | 1 | 任務驗證器 |
| AutomationBench | 600 | Qwen | 5 | 任務驗證器 |
| JobBench | 65 | Qwen | 5 | GPT-5.6-Sol 評審 |
Qwen3.8-27B 在工作流程任務上的結果(五次平均 ± 標準差,成本為每題平均):
| 設定 | AutomationBench | 成本 | JobBench | 成本 |
|---|---|---|---|---|
| 無記憶 | 35.5 ± 1.3 | $0.59 | 33.4 ± 1.25 | $3.09 |
| 有記憶 | 45.3 ± 1.0 | $0.53 | 41.0 ± 1.41 | $3.21 |
Terminal-Bench 2.1 與 BrowseComp(各跑一次;重複與錯誤是整個任務集的工具輸出次數):
| 基準 | Actor | 記憶 | 分數 | 成本 | 重複 | 錯誤 |
|---|---|---|---|---|---|---|
| Terminal-Bench 2.1 | Qwen3.8-27B | 無 | 71.9 | $4.29 | 459 | 933 |
| Terminal-Bench 2.1 | Qwen3.8-27B | 有 | 76.4 | $2.86 | 377 | 568 |
| Terminal-Bench 2.1 | GLM-5.3-Flash | 無 | 84.3 | $3.27 | 334 | 664 |
| Terminal-Bench 2.1 | GLM-5.3-Flash | 有 | 87.6 | $3.05 | 240 | 496 |
| BrowseComp | Qwen3.8-27B | 無 | 74.0 | $5.39 | 25,801 | 25,244 |
| BrowseComp | Qwen3.8-27B | 有 | 77.0 | $4.69 | 18,105 | 12,698 |
| BrowseComp | GLM-5.3-Flash | 無 | 84.9 | $5.65 | 8,316 | 7,498 |
| BrowseComp | GLM-5.3-Flash | 有 | 89.0 | $5.00 | 5,834 | 5,412 |
- 「重複」指同一個任務裡同一個工具產生完全相同的輸出,不計規劃與輪詢;「錯誤」指失敗的指令或明確的工具錯誤。
- 降幅最大的是 Qwen 在 BrowseComp 上的工具錯誤,少了 49.7%;最小的是 Qwen 在 Terminal-Bench 上的重複輸出,少了 17.9%。
- 除了 JobBench,每組比較的生成成本都下降。成本以 2026 年 9 月各供應商未命中快取的牌價估算,記憶位置算作輸入;不含特徵編碼、記憶網路本身的運算與工具執行。
論文也把 GLM 加記憶後的分數,跟 Gemini 3.1 Pro、Claude Mythos 5、GPT-5.6 Sol 公開的 BrowseComp 與 Terminal-Bench 分數畫在同一張圖上。那些分數各用自己的 harness 與協定,論文註明它們只是參考,有控制的證據只有同一個 actor 的前後比較。
壓縮後的第一個動作
論文從 100 條 Qwen 的 BrowseComp 軌跡中取出 488 組壓縮後的下一個動作,固定系統提示與摘要,只比較有無記憶。GPT-5.6-Sol 依照根據先前歷史訂好的評分標準,比較匿名化的兩個動作;評審看不到候選動作的推理過程,反事實的工具呼叫也沒有實際執行。
| 結果 | 次數 | 比例 |
|---|---|---|
| 有記憶較好 | 345 | 70.7% |
| 平手 | 21 | 4.3% |
| 無記憶較好 | 122 | 25.0% |
這比較的是評審對提議動作的判斷,論文強調它沒有量到這些動作執行後的結果。
兩個案例
模擬交易:兩個 Qwen 模擬交易帳戶同時運作,壓縮策略相同,起始資金各 2 萬美元。
| 指標 | 無記憶 | 有記憶 |
|---|---|---|
| 9 月 23 日已結算 ROI | −11.86% | +5.11% |
| 生成成本 | $303.81 | $170.30 |
| 壓縮次數 | 56 | 45 |
| 回應次數 | 5,336 | 3,013 |
| 每千次回應的壓縮次數 | 10.5 | 14.9 |
| 平均上下文位置(含記憶) | 105,372 | 101,185 |
兩個帳戶選的市場與時機不同,論文說報酬不適合直接比較。成本較低的原因是呼叫次數較少、上下文較短。
細胞分割:前面提到的 Terminal-Bench 任務裡,有摘要與記憶可用的 actor 重新讀了兩個檔案、補回被刪的 helper function,通過全部 9 個驗證測試。論文說這個案例顯示摘要、記憶與檢索各有角色,但無法確定被省略的細節是不是來自記憶。
跟既有做法的差別
- 摘要加檢索:ReadAgent 搭配段落要點與原文,MemGPT 區分工作記憶與存檔記憶,ReSum 定期摘要長時程搜尋,AgentFold 學習多尺度的上下文管理。REMORY 保留文字摘要與檢索工具,另外加一條以摘要為條件的連續表徵。
- 學習連續壓縮:AutoCompressors、Gist Tokens、ICAE 與 LCLMs 學的是把較長文字壓成連續表徵。REMORY 的訓練目標只針對摘要留下的資訊缺口,透過凍結 actor 的續寫預測來訓練。
釋出與部署
- 程式碼與兩個記憶網路 checkpoint 都以 MIT 授權釋出在 GitHub 與 Hugging Face:Qwen3.8-27B-REMORY-1.9B 與 GLM-5.3-Flash-REMORY-1.24B。
- README 建議至少兩張 80 GB GPU,才能用 SGLang 同時部署 Qwen3.8-27B 與記憶網路。
- 接入 agent 的介面是
Harness.compact:產生摘要、編碼記憶、回傳新的 checkpoint,agent 自己的工具與壓縮觸發條件不變。記憶存在.remory/memory.sqlite,repo 也附了接入 Codex 的範例。
要留意的地方
論文沒有獨立的限制章節,以下整理自實驗設定與正文:
- 重複次數少:Terminal-Bench 與 BrowseComp 每個設定只跑一次;跑五次的 AutomationBench 與 JobBench 只測了 Qwen。
- 依賴模型評審:SummHay、BrowseComp、JobBench 與下一步動作的偏好比較,都由 GPT-5.6-Sol 評分。
- 成本估算不完整:只算以 token 計價的生成成本,不含記憶網路的運算。
- 案例無法歸因:模擬交易只有一組帳戶,兩邊的交易決策不同;細胞分割的案例論文自己說無法確定資訊來自記憶。
- 公開的 GLM checkpoint 與論文不同:README 說公開的是本地評估使用的 12.4 億參數版本,跟論文描述的 15.02 億參數編碼器不同,沒有說明論文裡的 GLM 數字出自哪一個。