dsh-rtk-filter:把超大命令輸出交給 RTK 再給模型

前言

在 DeepSeek Harness(DSH)裏做智能體時,工具輸出會直接進入模型上下文。像 bashjob_output 這類工具,有時會返回很長的命令輸出;如果原樣交給模型,會明顯增加 token 和上下文佔用,但也可能丟掉退出碼、超時、信號等狀態信息。

dsh-rtk-filter 的處理方式是:當工具結果滿足條件時,把正文交給外部 rtk CLI 精簡,再把 RTK 的輸出作爲模型可見內容。它不改寫工具的 canonical value,也保留末尾狀態標記;外部依賴不可用或失敗時,會靜默回退到原始輸出。

DSH 插件生態中的社區目錄是獨立站點,不是 DeepSeek 或幻方的官方應用商店。

這是什麼

dsh-rtk-filter 是一個 DSH 插件,由 Aeternus123 維護,許可證爲 MIT。

它的作用是:把過大的命令輸出通過外部 rtk CLI 管道處理,然後把 RTK 精簡後的文本交給模型,而不是把原始大段文本直接放進模型上下文。它註冊的是 tools/post-execute result transformer,在工具 dispatch 之後、lossless materialization 之前替換模型可見內容。

它依賴外部 rtk CLI。若 rtk 不存在、執行失敗、超時、被取消、沒有輸出或輸出無變化,插件會保留原始輸出。

核心功能

  • 只處理符合條件的結果:accept 決策、非失敗結果、工具名在配置列表中、內容爲純文本、字節數不低於 minBytes
  • 註冊 tools/post-execute result transformer,替換的是模型可見內容,不改工具 canonical value。
  • 保留末尾狀態標記,例如:
  • [exit code: N]
  • [killed by signal: ...]
  • [timed out after Nms]
  • [sandbox: ...]
  • [status: ...]
  • rtk 缺失、非零退出、超時、被取消、無輸出或輸出未變化時,靜默降級爲原始輸出。
  • 支持裸命令名。若配置裏寫 rtk,插件會探測候選目錄,例如:
  • ~/.cargo/bin
  • /opt/homebrew/bin
  • /usr/local/bin
  • /opt/local/bin
  • ~/.local/bin
  • 支持 rtk pipe 模式,也支持可選 filter,例如 -f cargo-test

安裝與啓用

準備 rtk

先確認本機已經安裝 rtk。例如:

brew install rtk

如果未安裝,插件會靜默降級,不會讓命令執行失敗。

GitHub 安裝

用 DSH CLI 安裝:

dsh plugin --profile web add github:Aeternus123/dsh-rtk-filter

這條命令以 web profile 爲例。安裝後,包內自帶的 cordis.patch.yml 會自動生效。

本地掛載

如果是本地開發,也可以把插件掛到 profile 的 node_modules 裏:

mkdir -p ~/.dsh/profiles/web/node_modules
ln -s /path/to/dsh-rtk-filter ~/.dsh/profiles/web/node_modules/dsh-rtk-filter

然後在 profile 的 cordis.patch.yml 裏追加掛載配置。

掛載配置

以下是一個基本配置示例:

- insert:
  - id: rtk-filter
    name: dsh-rtk-filter
    config:
      command: /opt/homebrew/bin/rtk
      args: ['pipe']
      minBytes: 2048

這段配置做了三件事:

  1. 指定 rtk 可執行文件路徑。
  2. 使用 pipe 模式,即 stdin 進原始文本,stdout 出精簡文本。
  3. 設置 minBytes: 2048,低於該字節數的輸出直接放行。

DSH 的 bash 工具使用非登錄 shell,可能不會繼承終端裏的 PATH。因此推薦寫 rtk 的絕對路徑,例如 /opt/homebrew/bin/rtk。如果寫裸名 rtk,插件會嘗試探測上面列出的候選目錄。

典型用法

通用 pipe 模式

最直接的配置是使用 pipe

- insert:
  - id: rtk-filter
    name: dsh-rtk-filter
    config:
      command: /opt/homebrew/bin/rtk
      args: ['pipe']
      minBytes: 2048

pipe 模式對應“stdin 進原始文本,stdout 出精簡文本”的使用方式。

指定 filter

如果主要處理某類輸出,可以給 rtk pipe 指定 filter:

- insert:
  - id: rtk-filter
    name: dsh-rtk-filter
    config:
      command: /opt/homebrew/bin/rtk
      args: ['pipe', '-f', 'cargo-test']
      minBytes: 2048

這裏使用 -f cargo-test,適合主要處理 cargo 測試輸出的工作流。

需要注意:rtk pipe 只會在輸入匹配指定 -f filter 時才真正壓縮;不匹配的輸入會原樣透傳。插件檢測到輸出無變化時,也不會追加額外提示。

適用場景與注意

適合使用 dsh-rtk-filter 的場景:

  • 智能體經常執行 bashjob_output 等命令,輸出經常偏大。
  • 希望減少模型上下文佔用,但保留退出碼、超時、信號等狀態標記。
  • 已有 rtk CLI,並希望通過 DSH 插件統一管理輸出精簡邏輯。

使用前需要注意:

  • 插件依賴外部 rtk CLI。rtk 不可用或執行失敗時,插件保留原始輸出。
  • 插件只改模型可見內容,不改工具的 canonical value。
  • rtk pipe 配合 -f filter 時,不匹配輸入會原樣透傳。
  • DSH bash 工具可能不繼承終端 PATH,建議配置 rtk 絕對路徑。
  • 插件以當前 DSH 進程權限運行。安裝前應檢查源碼與 MIT 許可證。
  • 運行環境要求 Node >=20
  • Peer dependencies 包括:
  • @deepseek-ai/cordis ^4.0.0
  • @deepseek-ai/dsh-llm ^0.1.0-rc.6
  • @deepseek-ai/dsh-tools ^0.1.0-rc.6
  • @deepseek-ai/schemastery ^3.18.0

鏈接

  • GitHub:https://github.com/Aeternus123/dsh-rtk-filter
  • 目錄頁:本文資料未提供已覈實 URL;可按插件名 dsh-rtk-filter 在社區目錄中檢索。
羽毛球分组比赛记分
小程序二维码

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

小夜