![]()
本項目由曼徹斯特大學、北京航空航天大學、香港科技大學,以及Multimodal Art Projection(MAP)研究團隊聯合提出。
本文由 Jincheng Ren、Siwei Wu、Yizhi Li 共同一作完成,通訊作者為 Jian Yang 和 Chenghua Lin。Jincheng Ren 來自 MAP,并在曼徹斯特大學開展研究實習;Siwei Wu 和 Yizhi Li 來自曼徹斯特大學。Jian Yang 來自北京航空航天大學,Chenghua Lin 來自曼徹斯特大學。
![]()
- arXiv 論文:http://arxiv.org/abs/2604.19572
- Hugging Face Daily Paper:https://huggingface.co/papers/2604.19572
- GitHub 開源代碼:https://github.com/multimodal-art-projection/TACO
隨著代碼智能從 code foundation models 走向 autonomous coding agents,CLI/terminal 正在成為智能體進入真實軟件工程工作流的重要入口。
近期一篇關于 Code Intelligence 的綜述也指出(arXiv:2511.18538),真實部署中的代碼智能不僅要會生成代碼,還要能處理大代碼庫上下文、開發工具鏈集成和復雜工作流。也正是在這種背景下,CLI Agent 被用于更長程、更復雜的終端任務,一個新的瓶頸開始顯現:問題不一定是上下文窗口不夠大,而是上下文在多輪交互中變得越來越 “臟”。但 terminal output 又不能被簡單刪除。
錯誤信息、文件路徑、測試名稱、build target、依賴版本等關鍵線索,往往就藏在冗長日志里。
為了解決這一問題,團隊提出了TACO(Terminal Agent Compression),一個無需訓練、即插即用的終端智能體自進化觀測壓縮框架。TACO 讓智能體從真實交互軌跡中學習 compression rules,在過濾低價值 terminal output 的同時,盡量保留后續決策所需的關鍵行動線索。
實驗顯示,TACO 在 TerminalBench 1.0/2.0 以及多個 terminal-related benchmark 上同時提升了任務成功率和 token 效率。
長程 CLI Agent 不是記不下,而是上下文越來越臟
CLI Agent 每執行一步命令,都會把 terminal output 帶入下一輪決策。任務越長,安裝日志、編譯輸出、測試結果、構建 trace 等低價值環境反饋就越容易堆滿上下文,淹沒真正關鍵的行動線索。
我們在 TerminalBench 2.0 的軌跡中驗證了這一點。圖 1 顯示,在 Qwen3-Coder-480B、DeepSeek-V3.2 和 MiniMax-M2.5 的運行軌跡里,raw prompt 中有相當一部分內容可以被人工抽取為低價值冗余,比例達到 24.6%–44.1%。這說明,長上下文并不總是意味著更多有效信息,很多時候只是更多噪聲。
![]()
但 terminal output 又不能被粗暴刪除。錯誤信息、文件路徑、命令參數、測試名稱、build target、依賴版本、二進制符號,往往就藏在這些日志里。全量保留會讓上下文越來越臟,簡單壓縮又可能刪掉后續決策所需的關鍵線索。
這也說明,解決辦法不能只是 “把 terminal output 變短”。
因此,terminal observation compression 的難點不只是 “壓短”,而是判斷:哪些內容可以安全過濾,哪些信息必須保留。更麻煩的是,這個邊界并不固定。同樣是編譯輸出,在一個任務里可能只是冗余日志,在另一個任務里卻可能包含關鍵編譯參數;同樣是安裝日志,在普通任務里可以大量過濾,但在依賴沖突任務里,版本號和錯誤信息可能就是下一步決策依據。
為此,我們比較了三類靜態壓縮方法,基礎模型選擇的是 Qwen3-Coder-480B:
- Seed Rules:少量人工預設規則,例如壓縮 pip install、apt-get、git clone 等常見高輸出命令。
- High-Quality Rules:更多人工整理的高質量規則,覆蓋范圍更廣,但仍然是固定規則。
- LLM Summarize:直接讓 LLM 對 terminal output 做摘要壓縮。
如下圖所示,靜態方法雖然可以降低 token 開銷,但性能并不穩定。LLM Summarize 的 token cost 最低,但準確率反而明顯下降;TACO 的 token cost 不是最低,卻取得了最高的準確率和更小的方差。這說明,terminal observation compression 的關鍵不是 “壓得越狠越好”,而是能否在減少低價值輸出的同時,穩定保留后續決策所需的關鍵線索。
![]()
相比之下,TACO 的關鍵不是 “壓得更狠”,而是self-evolving:它會在真實交互軌跡中觀察哪些規則有效、哪些規則可能壓縮過度,并把可復用的規則沉淀到全局規則池中。也就是說,TACO 不是用一套固定策略壓所有輸出,而是讓 Agent 在不同工作流中逐步學會:哪些觀察可以安全過濾,哪些行動線索必須保留。
TACO:讓 Terminal Agent 學會過濾低價值觀察
TACO:一個面向終端智能體的、即插即用的自進化觀測上下文壓縮框架。
TACO 的核心思路徹底拋棄了 “人工預設截斷” 或 “LLM 實時總結” 的傳統路徑,而是構建了一個輕量級的自進化規則引擎。在 TACO 中,所謂的 “規則” 并非模糊的自然語言提示詞,而是由觸發條件、保留模式和剔除模式組成的函數。
為了讓這些規則能夠動態適應極度異構的終端環境,TACO 設計了一套“任務內動態糾偏、全局跨域沉淀”的閉環流轉機制。具體而言,整個自我演化過程包含以下三個核心階段:
![]()
第一,Terminal Output Compression。
在每個交互步驟中,agent 執行命令并得到原始 terminal output。TACO 會根據當前任務的 active rules 對輸出進行壓縮。對于包含顯式錯誤、異常、失敗信號或關鍵診斷信息的輸出,TACO 采取保守策略,避免過度壓縮。對于非關鍵、重復性強的輸出,例如安裝進度、編譯流水、下載日志、重復測試信息,TACO 會通過規則過濾掉低價值部分。
第二,Intra-Task Rule Set Evolution。
不同任務會產生不同類型的終端輸出。固定規則很難覆蓋所有情況。因此,當 TACO 遇到某類當前規則無法處理的高輸出命令時,會生成新的壓縮規則,并加入當前任務的 active rule set。
同時,TACO 也會關注壓縮是否過度。比如,agent 后續重新請求完整輸出、重復執行同一命令,或者表現出缺失信息的行為,都會被視作潛在的 over-compression signal。此時,TACO 會降低相關規則的使用,并生成更保守的替代規則。
第三,Global Rule Pool Evolution。
很多終端壓縮模式是跨任務復用的。例如,pip install 的下載進度通常可以壓縮,apt-get 的 Unpacking / Setting up 行通常信息密度較低,git clone 的 transfer progress 大多是噪聲,而編譯輸出中的 error、warning、undefined reference 必須保留。
TACO 會把任務中驗證有效的規則寫回 Global Rule Pool。后續任務開始時,TACO 會從全局規則池中檢索相關規則,用來初始化當前任務的 active rules。隨著更多任務被執行,Global Rule Pool 會不斷積累高質量壓縮知識。
實驗:不只是省 token,也提升任務成功率
TACO 被評估在 TerminalBench 1.0、TerminalBench 2.0 以及多個 terminal-related benchmark 上,包括 SWE-Bench Lite、CompileBench、DevEval 和 CRUST-Bench。
在 TerminalBench 上,將 TACO 插入 Terminus-2 后,多種強模型都獲得了穩定提升。
![]()
這些提升說明,終端觀測壓縮并不是單純節省上下文空間。過濾低價值輸出后,模型反而更容易關注任務相關信息,從而提升長程任務完成率。
相同 token budget 下,TACO 仍然更強
一個自然疑問是:TACO 的提升是否只是因為 agent 運行了更多步驟?
為此,論文進一步比較了固定 token budget 下 Baseline 和 TACO 的準確率。結果顯示,在相同 token 消耗下,TACO 在六個模型上都獲得了更高準確率。
這說明 TACO 并不是簡單通過增加交互開銷換取性能,而是在相同上下文預算下提高了有效信息密度。
![]()
這個結果也回應了一個更實際的問題:對于長程 agent 來說,真正重要的不只是 “總 token 少了多少”,而是每個 token 里有多少信息真正服務于下一步決策。
跨 Benchmark 泛化:規則不是只適配 TerminalBench
除了 TerminalBench,TACO 還在多個 terminal-related benchmark 上進行了驗證。
![]()
可以看到,在 SWE-Bench Lite、DevEval、CRUST-Bench 等任務上,TACO 在提升準確率的同時降低了總 token 消耗;在 CompileBench 上,準確率保持不變,但 token 消耗明顯下降。
這說明 TACO 學到的規則不是只針對某一個 benchmark 的特殊技巧,而是在不同 terminal workflow 中捕獲了可復用的壓縮模式。
Self-evolving 如何判斷已經穩定?
自進化方法還會帶來一個實際問題:如果系統一直生成和更新規則,什么時候才算收斂?
TACO 沒有直接用測試集準確率來判斷是否停止,因為這會引入評測泄露。我們轉而觀察 Global Rule Pool 中 Top-K 規則的穩定性:如果連續多輪演化后,排名靠前的規則大部分保持不變,說明系統已經學到一組穩定可復用的壓縮規則。
具體來說,論文使用 Retention 衡量相鄰兩輪中 Top-K 規則的重合比例。Retention 越高,說明有效規則前沿越穩定。
![]()
圖中上半部分顯示,三個模型的 Top-30 rule retention 在多輪演化后逐漸超過 90%;下半部分顯示,當 retention 穩定后,任務準確率的 rolling standard deviation 也明顯下降。也就是說,規則池穩定和性能穩定是同步出現的。因此,Retention 可以作為 TACO 的實用收斂信號:當高價值規則集合基本不再變化時,繼續自進化的收益就會變小。
Case Study
上面的實驗說明 TACO 能提升準確率和 token 效率。接下來更重要的問題是:TACO 到底刪掉了什么,又保留了什么?下面通過三個真實軌跡片段來看它的壓縮行為。
10,000 字符的安裝日志,壓縮到 73 字符
在 TerminalBench 2.0 的 adaptive-rejection-sampler 任務中,agent 需要安裝 R runtime,于是執行:apt-get install -y r-base
原始輸出超過 10,000 字符,包含大量重復的 Unpacking 和 Setting up 行。對后續決策來說,agent 并不需要完整閱讀所有安裝過程。它真正需要知道的是:安裝是否還在進行、有沒有報錯、最終是否成功。
TACO 在任務中演化出針對這類輸出的規則,將 10,071 字符的輸出壓縮到 73 字符,只保留當前安裝狀態。
![]()
關鍵不在于這個數字本身,而在于:TACO 沒有粗暴截斷輸出,而是根據命令類型和任務狀態識別出 “進度噪聲” 和 “狀態信號” 的區別。
更重要的是:保留任務連續性的關鍵線索
另一個例子來自 sqlite-with-gcov 任務。
在這個任務中,agent 需要編譯 SQLite 并啟用 gcov 覆蓋率。原始 make 輸出中有大量文件復制列表和長編譯命令。TACO 會刪除冗長的復制列表,但保留 -fprofile-arcs、-ftest-coverage 等覆蓋率相關編譯參數。
![]()
這很關鍵。因為對這個任務來說,這些編譯 flag 是判斷 gcov 是否正確啟用的重要證據。普通截斷策略很可能會把它們切掉,而 TACO 的規則式過濾可以保留這些行動線索。
在二進制逆向任務 vulnerable-secret 中,TACO 還演化出針對 objdump 輸出的規則:過濾重復的 hex dump 行,同時保留 call 指令、符號標簽和關鍵地址信息。這些信息正是 agent 追蹤二進制控制流所需要的。
![]()
這說明 TACO 并不是簡單地把輸出變短,而是把終端輸出變得更像 “下一步決策所需的 observation”。
總結
TACO 提供了一種無需訓練的自進化觀測壓縮方案,讓 Agent 從真實軌跡中學習哪些輸出可以安全過濾、哪些行動線索必須保留。
讓 Agent 學會丟掉無效觀察,才能讓它在長程任務中走得更穩。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.