壓縮與重置
最後更新
長時間執行如何維持在模型視窗內,以及 reset 與 remove 會清掉什麼。
執行期壓縮
除了上述儲存分層,
internal/agents/exec/compact 負責把單次長時間執行維持在模型視窗內。各階段獨立,依序套用且只做到夠用為止:| 階段 | 觸發 | 效果 |
|---|---|---|
CheckThreshold(model) | 第一次之後的每次迭代,以前一次 send 的 input tokens 比對 | 當前模型的 token 預算——其 context window 的 80 %。自 v1.0.11 起 window 改由每小時向 https://llm-io.agenvoy.com/ 取一次的即時表提供,以 vendor + model 查表,取代原本寫死的各家族固定值;表中查不到的模型回退 128 K。v1.0.25 起表中查不到的 copilot@ 模型改用 Copilot 自身 /models 端點回報的 max_context_window_tokens(背景抓取、每 24 小時更新),取代原本一律 256 K 的回退值。v1.3.0 起從超限錯誤學到的上限若比表中值小就取而代之(表中查不到的模型也改用它),且 deepseek 的 deepseek-flash 固定為 1,048,576 input tokens。v1.3.1 起每次執行改在背景預熱此表、不再等待,抓取失敗則 5 分鐘後重試 |
ExtractContextHistories(v1.2.1 前為 ExtractOldHistories) | 超出預算,該次執行第一次 | 把較舊的對話輪次併入滾動摘要 |
ToolHistory | 再次超出預算,或沒有較舊的對話可併入 | 將最舊的 tool-call 往返摘要成文字 |
TrimRatio → TrimFallback | Provider 回報 context 長度錯誤 | v1.3.0 起先記下模型實際上限,再把歷史裁到原大小的 80 % 後重送。v1.3.1 起先由 decision model 移除信心至少 0.7 判定需求已用不到的工具步驟——最新一步與 write_todo 呼叫一律保留;接著由 TrimFallback 刪最舊的對話(一次兩則對話訊息,之後是最舊的 tool-call 步驟連同其結果),直到達標。v1.1.1 起「先跑 ExtractContextHistories → ToolHistory」的做法移除於 v1.3.0 |
RawToolFallback | 執行途中切換模型 | 將 tool 歷史轉為純文字,讓新模型可讀 |
手動壓縮可從 TUI(
/compact;/memory 指令已移除,重設改為 /reset)或 POST /v1/session/:id/memory 觸發。該端點以 action 區分:compact 丟棄較舊訊息並回傳 removed、summary 重建滾動摘要並回傳 count、reset 清空對話——mode: "summary" 保留滾動摘要,mode: "all" 一併清除。TUI 中 /compact 與 /reset 開啟同一個 popup,含三個分頁:summary(唯讀顯示當前滾動摘要,v1.1.1 起)、compact 與 reset;/compact 開在 compact 分頁,/reset 開在 reset 分頁。搜尋路由
match 參數 | 來源 | 使用情境 |
|---|---|---|
semantic(預設) | ToriiDB VSearch | 「我們討論過關於 X 的什麼?」—— 基於語意 |
keyword | SQLite FTS5(封存)+ ToriiDB 子字串(近期) | 「找出含 'sandbox' 的訊息」—— 精確文字 |
跨 session error memory
Tool 失敗與解決它的修正方式以 90 天 TTL 存於
error_memory,跨 session 存續。只有以 outcome=resolved 寫入的紀錄會被儲存;failed / abandoned 的寫入會被丟棄,因此不再保留放棄的策略。命中時(透過關鍵字 Contains 或 db.VSearch),該條目的 TTL 透過 db.Expire 續期。當同一 tool 名稱在未來 session 失敗時,
toolCall.go 自動查詢 error_memory,把最多 3 筆相關紀錄以 related_errors 附在失敗的工具結果後;agent 套用已記錄的修正方式。紀錄中的作法可在 web 儀表板的 Lessons 頁面編輯(
PATCH /v1/torii/error,改寫 action 並保留 TTL);GET /v1/torii/error 列出紀錄。Reset / remove 行為
| 操作 | history.json | ToriiDB DBSessionHist | SQLite(messages + meta) | summary.json |
|---|---|---|---|---|
| Compact(自動) | 裁剪至 80% | 移除早於 cutoff 的條目 | 不動(已含全部資料) | 不動 |
Reset(/reset,mode=summary) | 刪除 | 清除 | 清除 | 保留 |
Reset(mode=all) | 刪除 | 清除 | 清除 | 刪除 |
| Remove session | 刪除目錄 | 清除 | 清除 | 刪除目錄 |