前言¶
在 DeepSeek Harness(DSH)工作流中,工具執行結果會被附加到對話歷史中,並在模型發出的每一個後續請求裏被重新發送。長輸出(例如 npm test 或大型代碼庫讀取)會伴隨整個會話,不僅佔滿上下文窗口,還會把關鍵的錯誤信息埋沒在大量冗餘日誌之下。現有的層級(捕獲、執行、壓縮時間)無法直接解決模型“看到什麼”的問題,也無法在每輪對話開始前就進行過濾。
是什麼¶
dsh-funnel 是一個工作流插件,由 YuanyuanMa03 開發,採用 MIT 許可證。它的核心作用是在數據進入模型上下文之前進行策展:保留關鍵行(如錯誤、警告、頭部和尾部),將剩餘部分轉儲到磁盤並附帶指針。這能讓模型視圖顯著縮小,同時保證原始數據在磁盤層面無損,供模型在需要時按需讀取。
核心功能¶
- 工具輸出策展:覆蓋 bash、文件讀取、網絡抓取、搜索等所有返回文本的工具。
- 保留關鍵行:自動保留錯誤行、警告行,以及輸出內容的頭部和尾部。
- 磁盤轉儲:將完整的原始輸出寫入
.dsh-funnel/目錄,並通過日誌中的指針引用。 - 性能提升:模型可見的內容被大幅壓縮。實測中,2001 行的輸出被壓縮至約 370 字符,模型視圖縮小約 24 倍。
- 零配置:默認行爲已覆蓋常見場景,小結果會以字節相同的方式直接通過,無需調整。
- 無損與一致性:磁盤層面完全保留原始數據,模型可見內容與日誌記錄完全一致。
安裝與配置¶
安裝插件需要執行以下命令:
dsh plugin add github:YuanyuanMa03/dsh-funnel
插件安裝後,需要在配置文件中對行爲進行微調。所有配置項均爲可選,位於插件配置塊中:
- id: dsh-funnel
name: 'dsh-funnel'
config:
maxChars: 4000 # 長度在此以下的原始結果會以字節相同的方式直接通過
keepHead: 15 # 保留輸出開頭的行數
keepTail: 25 # 保留輸出末尾的行數(通常包含錯誤信息)
keepPatterns: # 通過正則匹配需要保留的關鍵行
- error
- warn
- fail
- fatal
- exception
- assert
- denied
- panic
maxLineChars: 1000 # 對單行過長的內容(如 minified JSON)進行截斷
spill: true # 是否將完整原始內容寫入磁盤
tools: # 針對特定工具的覆蓋配置
web_fetch: { maxChars: 2000 }
工作原理¶
dsh-funnel 掛載在 tools/execute 擴展點上。它攔截工具執行的返回值,替換其中的長字符串字段(如 stdout、文件內容、網頁抓取結果),只將策展後的內容投影到模型可見的 value 字段中。同時,它將完整的原始數據寫入磁盤。錯誤結果從不被策展,因爲它們通常短小且對上下文至關重要。
注意事項¶
- 運行環境:插件需要 Node.js 環境版本 >= 20。
- 工具範圍:僅覆蓋返回文本類型的工具。
- 錯誤處理:錯誤結果不會被策展或截斷,始終保持原樣。
- 安全性:插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。
總結¶
dsh-funnel 通過在數據進入模型上下文前進行預處理,解決了長輸出帶來的上下文膨脹和注意力分散問題。它以極低的配置成本,實現了顯著的 Token 節省和性能提升,同時保留了數據的完整性和可審計性。更多細節可參考 SkillHub 目錄 或 GitHub 倉庫。