壓縮與重置
長時間執行如何維持在模型視窗內,以及 reset 與 remove 會清掉什麼。
執行期壓縮
除了上述儲存分層,internal/agents/exec/compact 負責把單次長時間執行維持在模型視窗內。各階段獨立,依序套用且只做到夠用為止:
| 階段 | 觸發 | 效果 |
|---|---|---|
CheckThreshold(model) |
每次迭代 | 當前模型的 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 的回退值 |
ExtractOldHistories |
超出預算,該次執行第一次 | 把較舊的對話輪次併入滾動摘要 |
ToolHistory |
再次超出預算,或沒有較舊的對話可併入 | 將最舊的 tool-call 往返摘要成文字 |
TrimFallback |
Provider 回報 context 長度錯誤 | v1.1.1 起先跑同一套 ExtractOldHistories → ToolHistory 壓縮後重送;只有該壓縮無法縮減時,才丟掉最舊的一組對話再重送 |
RawToolFallback |
執行途中切換模型 | 將 tool 歷史轉為純文字,讓新模型可讀 |
手動壓縮可從 TUI(/compact;/memory 指令已移除,重設改為 /reset)或 POST /v1/session/:id/memory 觸發。該端點以 action 區分:compact 丟棄較舊訊息並回傳 removed、summary 重建滾動摘要並回傳 count、reset 清空對話——mode: "summary" 保留滾動摘要,mode: "all" 一併清除。v1.1.1 起 TUI popup 另有唯讀的 summary 分頁,顯示當前的滾動摘要。
搜尋路由
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 | 刪除目錄 | 清除 | 清除 | 刪除目錄 |