RTK Compression (中文 (繁體))
強度等級 (v3.8.16+)
Section titled “強度等級 (v3.8.16+)”RTK 支援 3 個強度等級,用於在壓縮積極程度與安全性之間取捨。此等級透過引擎設定中的 config.intensity 設定。
| 等級 | 截斷閾值 | Token 節省量 | 風險 | 最適合 |
|---|---|---|---|---|
minimal |
每個區段 24 行 | ~20-40% | 極低 | 需要保留關鍵上下文的正式環境 |
standard(預設值) |
每個區段 24 行 | ~50-70% | 低 | 日常程式設計工作階段 |
aggressive |
每個區段 16 行 | ~70-90% | 中等 | 長時間工作階段、追求最大節省量 |
截斷發生的位置
Section titled “截斷發生的位置”截斷閾值會影響 lineFilter.ts:
// 來源:open-sse/services/compression/engines/rtk/index.ts:329-330config.intensity === "aggressive" ? 16 : 24,config.intensity === "aggressive" ? 16 : 24,每個區段的開頭與結尾都會保留;觸發截斷時,中間內容會被捨棄。
保留與刪減的內容
Section titled “保留與刪減的內容”| 內容 | minimal | standard | aggressive |
|---|---|---|---|
| 錯誤/堆疊追蹤 | ✅ 保留 | ✅ 保留 | ✅ 保留 |
| 測試失敗 | ✅ 保留 | ✅ 保留 | ✅ 保留 |
| 建置錯誤 | ✅ 保留 | ✅ 保留 | ✅ 保留 |
| 測試通過(詳細輸出) | ✅ 保留 | 🟡 摺疊 | 🟡 摺疊 |
| 例行輸出(資訊日誌) | 🟡 摺疊 | 🟡 摺疊 | ❌ 捨棄 |
| 進度列 | 🟡 摺疊 | ❌ 捨棄 | ❌ 捨棄 |
| 橫幅/ASCII 圖案 | 🟡 摺疊 | ❌ 捨棄 | ❌ 捨棄 |
選擇適當的強度
Section titled “選擇適當的強度” 遺失上下文是否會造成災難性後果? │ ┌───────────┼───────────┐ │ │ │ 是 否 不確定 │ │ │ ▼ │ │ minimal │ │ │ │ │ │ ▼ ▼ │ 輸送量有多 請先嘗試 `standard` │ 關鍵? (適用於 80% 的 │ │ 情況) │ ┌────┴────┐ │ │ │ │ 低 高 │ │ │ │ ▼ ▼ │ standard aggressive │ │ │ └──────┴─────────┘個別組合(在組合設定中):
{ "combo": "my-coding-combo", "routing": {/* ... */}, "compression": { "engine": "rtk", "intensity": "aggressive" }}以程式方式設定:
rtkEngine(@omniroute/open-sse/services/compression/engines/rtk)是一個
CompressionEngine,且沒有 updateConfig 方法。請改為透過登錄輔助函式更新引擎設定:
import { updateEngineConfig } from "@omniroute/open-sse/services/compression/engines/registry";
updateEngineConfig("rtk", { intensity: "aggressive" });使用驗證關卡(請參閱下方)確認篩選器在所選強度下是安全的:
import { runRtkFilterTests } from "omniroute/compression/engines/rtk/verify";
const result = runRtkFilterTests({ intensity: "aggressive" });if (!result.passed) { console.error("篩選器在 aggressive 強度下失敗");}自訂篩選器開發 (v3.8.16+)
Section titled “自訂篩選器開發 (v3.8.16+)”engines/rtk/filters/ 目錄包含 49+ 個內建篩選器 JSON 檔案。您可以新增自己的篩選器,以壓縮預設篩選器未涵蓋之自訂工具的輸出。
篩選器結構描述 (Zod)
Section titled “篩選器結構描述 (Zod)”{ "id": "string", // 必填。篩選器識別碼(kebab-case,例如 "python-traceback") "label": "string", // 必填。人類可讀的篩選器名稱 "description": "string", // 選填(預設值:"")。篩選器功能的簡短說明 "category": "git|test|build|shell|docker|package|infra|cloud|generic", "priority": number, // 選填(0-100,預設值:50)。執行順序(數值越高越先執行) "match": { "commands": ["string"], // 要比對的命令名稱(例如 "python"、"pytest") "patterns": ["string"], // 用來比對輸出的正規表示式模式 "outputTypes": ["string"] // 偵測到的輸出類別(例如 "test-failure") }, "rules": { "stripAnsi": boolean, // 選填(預設值:false)。移除 ANSI 色彩代碼 "replace": [ // 尋找及取代規則(預設值:[]) { "pattern": "regex", "replacement": "..." } ], "matchOutput": [ // 模式符合時短路處理(預設值:[]) { "pattern": "regex", "message": "short summary", "unless": "regex" // 若此模式符合則略過 } ], "includePatterns": ["string"], // 要保留的行(正規表示式模式,預設值:[]) "dropPatterns": ["string"], // 要捨棄的行(正規表示式模式,預設值:[]) "collapsePatterns": ["string"], // 要摺疊為單次出現的行(預設值:[]) "deduplicate": boolean, // 選填(預設值:false)。移除重複行 "truncateLineAt": number, // 選填(預設值:0)。將行截斷至最大字元數 "maxLines": number, // 選填(預設值:0)。總行數的硬性上限 "headLines": number, // 選填(預設值:20)。保留符合輸出的前 N 行 "tailLines": number, // 選填(預設值:20)。保留符合輸出的最後 N 行 "onEmpty": "string", // 選填(預設值:"")。所有行均被篩除時的備用訊息 "filterStderr": boolean // 選填(預設值:false)。同時篩選 stderr 輸出 }, "preserve": { "errorPatterns": ["string"], // 必須一律保留的模式(預設值:[]) "summaryPatterns": ["string"] // 最終摘要行的模式(預設值:[]) }, "tests": [ // 用於驗證的內嵌測試(預設值:[]) { "name": "string", // 必填。測試名稱 "input": "sample output", // 必填。範例輸入文字 "expected": "expected output", // 必填。預期的壓縮輸出 "command": "optional command" // 選填。命令情境 } ]}範例:Python Traceback 篩選器
Section titled “範例:Python Traceback 篩選器”{ "id": "python-traceback", "label": "Python Traceback Filter", "description": "Compresses Python tracebacks to essential file/line locations and error type", "category": "test", "priority": 60, "match": { "commands": ["python", "python3", "pytest", "uv", "poetry"], "patterns": ["Traceback \\(most recent call last\\)", "Error", "Exception"], "outputTypes": ["error-traceback"] }, "rules": { "stripAnsi": true, "includePatterns": [ "Traceback \\(most recent call last\\)", "^\\s*File \".+\", line \\d+", "^\\s*[A-Z][a-zA-Z]+Error:", "^\\s*[A-Z][a-zA-Z]+Exception" ], "dropPatterns": ["site-packages/", "^\\s+[a-z_]+\\([^)]*\\)$"], "headLines": 5, "tailLines": 3, "maxLines": 25, "filterStderr": true }, "preserve": { "errorPatterns": ["Error:", "Exception:", "Traceback"], "summaryPatterns": ["^[A-Z][a-zA-Z]+(?:Error|Exception):"] }, "tests": [ { "name": "preserves-error-type-and-location", "input": "Traceback (most recent call last):\n File \"app.py\", line 42, in main\n do_thing()\n File \"lib/utils.py\", line 17, in helper\n return 1 / 0\nZeroDivisionError: division by zero", "expected": "Traceback (most recent call last):\n File \"app.py\", line 42, in main\n File \"lib/utils.py\", line 17, in helper\nZeroDivisionError: division by zero", "command": "python app.py" } ]}載入自訂篩選器
Section titled “載入自訂篩選器”將檔案放置於可辨識的位置:
~/.omniroute/rtk/filters/my-filter.json # 使用者層級<project>/.rtk/filters/my-filter.json # 專案層級篩選器會在啟動時,透過 open-sse/services/compression/engines/rtk/filterLoader.ts 中的 loadRtkFilters() 自動載入。載入器會從下列位置尋找篩選器:
- 內建目錄:
open-sse/services/compression/engines/rtk/filters/ - 使用者目錄:
~/.omniroute/rtk/filters/ - 專案目錄:
<project>/.rtk/filters/
若要以程式設計方式載入篩選器:
import { loadRtkFilters } from "@omniroute/open-sse/services/compression/engines/rtk/filterLoader";
// 選項:customFiltersEnabled(載入使用者/專案篩選器,預設開啟)、// trustProjectFilters、refresh。const filters = loadRtkFilters({ customFiltersEnabled: true });篩選器在載入時會依據 Zod 結構描述進行驗證。結構不正確的篩選器將無法載入,並記錄錯誤:
RTK_FILTER_LOADER: filter "my-filter" failed validation: - rules.replace.0.pattern: Invalid regex - match.commands: must not be empty若要驗證所有已安裝的篩選器,請呼叫由 open-sse/services/compression/engines/rtk/verify.ts 匯出的 runRtkFilterTests()。
- 一律包含
tests[]— 它們能證明你的篩選器有效,並防止迴歸問題 - 使用
matchOutput處理短路情況 — 如果單一行就能說明重點,請取代整個區塊 - 優先使用
keep,而非strip— 明確的「一律保留」規則比「一律移除」更安全 - 測試所有 3 種強度等級 —
minimal應不執行任何操作,aggressive仍應保留錯誤 - 使用
unless欄位 — 以「如果存在 X 就不要觸發」來防護短路條件
原始輸出復原與驗證閘門
Section titled “原始輸出復原與驗證閘門”當 RTK 大幅壓縮輸出時,您可以復原原始文字,以進行偵錯、稽核或重播。
原始輸出復原的運作方式
Section titled “原始輸出復原的運作方式”原始輸出(10K tokens) │ ▼RTK 壓縮(rawOutput.enabled=true) │ ├─▶ 壓縮後的輸出(2K tokens) ──▶ 傳送至 LLM │ └─▶ 原始輸出(10K tokens) ──▶ 儲存於 DB (透過 request_id 關聯)啟用原始輸出儲存
Section titled “啟用原始輸出儲存”針對單一請求(在組合設定中):
{ "compression": { "engine": "rtk", "intensity": "aggressive", "rawOutput": { "enabled": true, "maxBytes": 1048576 // 上限為 1MB } }}預設值:rawOutput.enabled: false(節省儲存空間)。
| 每個請求 | 上限 1MB | 上限 10MB |
|---|---|---|
| 平均壓縮後輸出 | ~5KB | ~5KB |
| 儲存的原始輸出 | ~50-500KB | ~500KB-5MB |
| 每日 1000 個請求 | 50-500MB/日 | 500MB-5GB/日 |
建議:只在偵錯工作階段或抽樣稽核時啟用原始輸出,請勿持續啟用。
復原原始內容
Section titled “復原原始內容”import { readRtkRawOutput } from "omniroute/compression/engines/rtk/rawOutput";
const raw = readRtkRawOutput(pointerId); // pointerId 來自壓縮統計資料if (raw) { console.log("Original output:", raw);}壓縮後,pointerId 會回傳於 CompressionStats.rtkRawOutputPointers[] 中。
函式簽章請參閱 open-sse/services/compression/engines/rtk/rawOutput.ts:102。
RTK 篩選器驗證(open-sse/services/compression/engines/rtk/verify.ts)會根據各篩選器的 tests[] 驗證所有篩選器,並確保其在全部 3 種強度等級下的行為皆正確。
呼叫 runRtkFilterTests() 以執行驗證:
import { runRtkFilterTests } from "open-sse/services/compression/engines/rtk/verify";
const result = runRtkFilterTests();console.log(`Passed: ${result.outcomes.filter((o) => o.passed).length}`);console.log(`Failed: ${result.outcomes.filter((o) => !o.passed).length}`);if (!result.passed) { console.error("Filters failed verification"); result.outcomes .filter((o) => !o.passed) .forEach((o) => { console.error( ` - ${o.filterId} / ${o.testName}: expected "${o.expected}", got "${o.actual}"` ); });}驗證內容:
- 每個篩選器皆可載入並通過結構描述驗證
- 每個
tests[]項目皆會產生預期輸出 minimal強度不會執行任何操作(保留原始內容,僅套用結構性篩選器)aggressive強度會保留錯誤、測試失敗資訊與堆疊追蹤- 壓縮後的輸出絕不會大於原始輸入
-
原始碼:
open-sse/services/compression/engines/rtk/(63 個檔案,約 70KB) -
合併篩選器變更之前 — 一律確認測試通過
-
升級 RTK 引擎之後 — 結構描述可能已變更
-
定期監控時 — 防止測試固定資料發生偏移
-
新增工具/命令系列時 — 證明新篩選器能正常運作
- COMPRESSION_GUIDE.md — 完整的壓縮管線概覽
- COMPRESSION_ENGINES.md — 引擎登錄檔與內建引擎
- EXTENDING_COMPRESSION.md — 自訂引擎、語言套件、堆疊式管線
- 原始碼:
open-sse/services/compression/engines/rtk/(63 個檔案,約 70KB)
HagiCode
HagiCode 是智慧代理程式開發工作台,結合結構化工作流程、多代理程式執行與 Hero Dungeon 介面,將想法化為交付成果。
以更聰明、更快速且更有趣的智慧代理程式工作流程,打造實用的軟體。

- Smart結構化流程將意圖轉化為從構想到交付的可執行步驟。
- Efficient多代理程式工作流程讓研究、實作與審查並行進行。
- FunHero Dungeon 讓長時間的程式協作更直覺、更有參與感。