dsh-funnel:在模型上下文之前策展工具輸出

前言

在 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 倉庫。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜