使用 dsh-advisor 爲 DeepSeek Harness 配置每輪被動審查的副模型

前言

DeepSeek Harness(dsh)是 DeepSeek AI 開源的 agent harness,目前仍處於開發者預覽階段。它的核心設計是「一切皆插件」:模型、工具、會話、沙箱、UI 都可以在不改框架源碼的前提下掛載或替換。官方倉庫在 deepseek-ai/deepseek-harness

社區裏已經有獨立站點在收錄這類插件,例如 DeepSeek Harness 插件目錄。需要先說清楚:該目錄是社區站點,與 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。安裝任何第三方插件前,都應該自己覈對源碼和許可證。

用 dsh 跑長任務時,主模型一邊執行一邊自檢,很容易漏掉「和用戶指令矛盾」「原地打轉」「方向已經偏了」這類問題。dsh-advisor 做的事情比較剋制:再掛一個獨立的評審模型,只看主會話記錄,按嚴重度往會話裏塞一條建議。它不批准動作,也不代替主 agent 發命令。

這是什麼

dsh-advisor 是社區維護的「模型與提供方」類插件,維護者是 omdsh-dev,許可證 MIT,主要語言 TypeScript。GitHub 倉庫當前版本爲 0.2.1package.json,2026-08-17),Node 要求爲 ^22.19 || >=24。目錄頁於 2026-08-09 收錄該插件。

倉庫 README 寫明:它把 omp(oh-my-pi)裏的 advisor 子系統,移植成獨立的 dsh 插件組合包。每個會話有一個獨立評審模型,觀察主 transcript,用顯式配置的 providermodel 評審每個已完成的 stepped turn,再把按嚴重度排序的建議(nit / concern / blocker)注入回去。advisor 自己的消息會被排除在後續 delta 之外,因此它不會遞歸評審自己。

插件以純掛載方式安裝:bundle 插入、Web 設置頁的 Advisor 卡片、自有 gateway 通道,以及 /advisor 指令。不打 dsh 補丁,也沒有 postinstall 改宿主。兩個前端都可以用:

  • web profile:設置 → 插件配置 → Advisor 卡片
  • dsh-tui 終端 profile:/advisor/advisor config;TUI 的 /settings 裏編輯 Advisor 分節需要 dsh-tui ≥ v0.8.0

README 也強調了能力邊界:僅作建議。advisor 從不批准或否決主 agent 的動作,也絕不會像主 agent 那樣發出命令。行爲異常的評審者會受到 emission guard、immuneTurns 冷卻和 failure policy 約束,避免卡住或污染主循環。當前 MVP 有意沒有做到與 omp advisor 完全對等,下文會單獨列出已公開的差距。

核心功能

根據倉庫 README 與 docs/configuration.md,已經覈實的能力如下。

1、每個會話一個獨立評審者

評審走獨立的模型調用,只觀察主 transcript,並在每個 stepped 主 turn 結束後評審增量。advisor 消息不會被渲染進後續 advisor delta,因此它讀不到自己剛寫的建議。

2、三級嚴重度,每次評審最多一條 note

送達的消息帶 [advisor:{severity}] 前綴,內容是自我描述的 advisory 文本,例如:

[advisor:concern] extract the helper into a module and unit-test it

三個等級的含義和送達方式不同:

  • nit:輕微的樣式、清晰度或質量建議。經非喚醒的 agent.inject 送達,在下一個 pre-step 邊界消費。
  • concern:繼續之前值得權衡的重大風險,或明顯更優的方向。經喚醒的 agent.steer 送達,並受 immuneTurns 冷卻約束。
  • blocker:繼續下去明顯是在浪費工作,例如與顯式用戶指令矛盾、原地打轉、根本性不可行。同樣經 agent.steer 送達。

immuneTurns 默認是 3:一條 concern / blocker 真正 steer 過之後,接下來若干個已完成的主 turn 必須走完,另一條打斷性 note 才能再次 steer;窗口內的打斷性 note 會降級爲 inject。

3、顯式模型門禁

enabled 默認是 false。打開之後,providermodel 都是必填。只寫 enabled: true、卻缺其中一個時,插件不會發起任何模型調用,狀態會報告帶原因的禁用(disabled-with-reason)。未知配置鍵會被拒絕。

4、零工具、失敗不卡主循環

評審者只是一次獨立的模型調用,沒有 advisor tools,除了 advisory 消息之外不能對會話做別的事。失敗或額度耗盡時,它只丟棄自己有界的 backlog,不會把主循環停住。額度耗盡(quota_exhausted)沒有自動恢復定時器,需要 /advisor on 手動恢復;永久性模型錯誤(例如憑據無效)會把該會話的 advisor 標爲 halted,再用 /advisor on 重建。

5、會話級開關不改持久化配置

/advisor on|off|toggle 只翻轉當前會話的 override,不會改磁盤上的配置。持久化配置走 Settings 卡片、TUI /settings$DSH_HOME/settings.yaml

安裝與啓用

目錄詳情頁給出的安裝命令如下,在 DeepSeek Harness 終端中運行即可:

dsh plugin add github:omdsh-dev/dsh-advisor

如需可復現安裝,目錄頁建議固定 commit 哈希:

dsh plugin add github:omdsh-dev/dsh-advisor#2ee9844dd1920d024dbcc85c2fa4dc96a45ce698

上面的哈希對應倉庫 main 在 2026-08-17 的提交(發佈說明爲 v0.2.1)。使用前請再到 GitHub 覈對是否仍是你想鎖定的版本。

倉庫 README 另外給出了按 profile 安裝的寫法,適合已經分好 web / 終端前端的環境:

dsh plugin --profile web add dsh-advisor      # web profile(設置 → Advisor 卡片)
dsh plugin --profile dsh-tui add dsh-advisor  # dsh-tui 終端 profile

registry 安裝可以釘版本,例如 dsh-advisor@0.2.1。安裝文檔說明:registry 拉取的是已發佈 tarball,自帶 lib/cordis.patch.yml,目標機不必再構建;運行時依賴聲明爲 peerDependencies,由當前 dsh 安裝解析。

安裝完成後,可用下面的命令確認插件層已經出現:

dsh --profile web --dump-config

輸出裏應能看到帶 advisor 配置行的 # == dsh-advisor 層。web profile 安裝後需要重啓 dsh 會話;啓動後,Web 設置頁的「插件配置」會渲染 Advisor 卡片。

卸載對應爲:

dsh plugin --profile web remove dsh-advisor
dsh --profile web --dump-config

dsh-tui profile 把上面的 --profile web 換成 --profile dsh-tui 即可。卸載後同樣需要重啓會話。

配置與典型用法

advisor 默認關閉。要真正跑起來,需要在全局設置文檔(默認 $DSH_HOME/settings.yaml,跨 profile 共享)裏寫 advisor: 分節,並顯式打開開關。README 中的示例如下:

advisor:
  enabled: true                # 總開關(默認 false)——需顯式打開後生效
  provider: deepseek-official  # enabled: true 時必填
  model: deepseek-v4-flash     # enabled: true 時必填
  systemPrompt: ""             # 可選;空字符串表示使用內置評審 prompt
  immuneTurns: 3               # 整數 ≥ 0,默認 3
  maxDeltaMessages: 60         # 整數 ≥ 0,默認 60;0 表示不截斷

providermodel 必須改成你當前 dsh 環境裏已經配置好的供應商和模型。Web 卡片的下拉框只會列出系統內已配置的 provider 及其模型;上面 YAML 裏的 deepseek-official / deepseek-v4-flash 只是文檔示例,不是所有環境都自帶。

同一組鍵有三條編輯路徑,後一層覆蓋前一層:

  1. 插件行 config:profile 補丁層(例如 $DSH_HOME/profiles/web/cordis.patch.yml)裏 id: advisor 那一行,這是合成的 base。
  2. Web「插件配置」頁的 Advisor 卡片,或 dsh-tui ≥ v0.8.0 的 /settings → Advisor 分節。這兩處都寫入同一個 user layer($DSH_HOME/settings.yaml),保存後對新會話立即生效,不必重啓。TUI 裏不能編輯 systemPrompt(單行控件會截斷多行文本),需要改 prompt 時走 Web 卡片或直接改 yaml。
  3. /advisor 指令:只改當前會話,不寫回磁盤。

Web 卡片在 enabled: true 且必填字段爲空時會阻止保存。TUI /settings 沒有這項跨字段校驗,有可能寫出「已啓用但 provider/model 爲空」的配置;運行時門禁仍會把它解析成 disabled-with-reason,不會發起模型調用。用 /advisor status/advisor config 可以看到原因。

安裝並啓用後,在已經組合 command registry 的會話裏可以用:

/advisor            切換當前會話的 advisor
/advisor on         爲當前會話啓用
/advisor off        爲當前會話關閉
/advisor status     查看狀態、模型、運行狀態、待處理數量、最近活動

在 dsh-tui 裏還有隻讀的 /advisor config,用來回讀合成後的配置,並提示真正的寫路徑。這些指令會出現在 TUI 的 / 菜單裏,並帶子命令補全(需要隨 dsh-tui 組合包提供的 dsh-tui-command-trees 行)。

適用場景與注意事項

比較適合這些情況:

  • 長會話編碼或重構,主 agent 容易偏離用戶原話,需要另一側模型在旁提醒。
  • 希望審查意見進入主 transcript,而不是另開一個互不通信的評審窗口。
  • 同時使用 Web UI 和 dsh-tui,希望同一套 advisor: 配置跨 profile 共享。

不適合、或目前做不到的事情,以倉庫「限制與路線圖」爲準,不要按完整 omp advisor 去預期:

  • 每個會話只有一個 advisor,沒有並行評審組,也沒有 WATCHDOG 式文件發現。
  • 評審者沒有工具,不能自己讀文件、跑測試來覈驗主張。
  • 沒有會話內 advisor 面板;建議只以帶標籤的注入消息出現。Web Advisor 卡片是配置面,不是會話視圖。
  • 沒有 transcript 持久化,也沒有成本統計。
  • maxDeltaMessages 會截斷長會話窗口,compaction 之後早期上下文可能丟失。
  • 落後很多的 advisor 不會追趕等待主循環,積壓有界且會被丟棄,note 有可能在下一輪主 turn 已經開始之後纔到達。

安全方面有兩點必須單獨說。

第一,插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前請檢查 源代碼倉庫 和 MIT 許可證;如需可復現安裝,請固定 commit 哈希或 registry 版本號。

第二,README 寫明:delta 內容目前沒有密鑰混淆,transcript 裏出現的 secrets 可能到達 advisor 模型;請只配置你信任的評審模型。另外,行爲異常的 note 可能攜帶指令性文本,插件不會隔離不安全輸出,JSON 幀校驗和 advisory-only 框架是目前僅有的緩解手段,note 會原樣送達主 transcript。

小結

dsh-advisor 給 DeepSeek Harness 加的不是第二個執行者,而是一個默認關閉、必須顯式指定模型的旁觀評審者。它按 nit / concern / blocker 往會話裏注入建議,失敗時丟掉自己的積壓,不打斷主循環。當前仍是 MVP:沒有工具、沒有會話內面板、也沒有和 omp 的完整對等。若你已經在用 dsh 跑長任務,又希望多一雙只說話、不下手的眼睛,可以按目錄頁命令安裝後再打開配置。

  • 目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-advisor/
  • GitHub:https://github.com/omdsh-dev/dsh-advisor
  • DeepSeek Harness 官方倉庫:https://github.com/deepseek-ai/deepseek-harness
羽毛球分组比赛记分
小程序二维码

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

小夜