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