前言¶
DeepSeek Harness(簡稱 dsh)是 DeepSeek 開源的 Agent 運行時,官方倉庫的口號是 Everything is a Plugin(一切皆插件):模型、工具、會話、界面都可以在配置層替換,而不必改 Harness 核心源碼。日常用它寫代碼、改配置、排查問題時,主模型往往直接給出可執行結果。結果能落地,但過程裏用到的概念、取捨和常見誤區,並不會自動留下來。過幾天再開一個新會話,上一輪到底爲什麼那樣改,通常已經散在各自的 transcript 裏。
社區維護者 yuezengwu 做了一款工具與能力插件 dsh-explain,專門處理這件事。它不往主 Agent 裏塞講解,也不把學習記錄綁死在某一個工作會話上,而是在本地維護一條跨會話的學習線程:工作還是原來的工作,值得學的內容另開一條私有通道。本文按社區目錄頁、GitHub 倉庫 README / package.json,以及 DeepSeek Harness 官方倉庫交叉覈實後整理。
需要先說明兩點背景。第一,DeepSeek Harness 目前仍是開發者預覽版,插件明確適配 0.1.0-rc.6,更早的私有預覽包版本線不在支持範圍。第二,DeepSeek Harness 插件庫 是獨立的社區目錄,用來檢索和對照安裝命令,與 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。
這是什麼¶
dsh-explain 是一款面向 DSH 的學習模式插件,由 yuezengwu 維護,倉庫爲 yuezengwu/dsh-explain。社區目錄把它歸在「工具與能力」,許可證爲 MIT,主要語言是 TypeScript。package.json 裏的版本號是 0.1.0,並聲明瞭 dsh.bundle 補丁;客戶端注入目標是 Web 端的會話與設置界面。GitHub 倉庫當前 11 星,目錄頁顯示 10 星。
一句話定位來自倉庫中文 README:把多個 DSH 工作會話中值得學習的內容,匯入用戶唯一的全局學習線程;每個來源會話最多保留一個等待反饋的講解;再用全局 ExplainContext 適配知識水平和講解偏好。
它要解決的不是「讓主模型講得更囉嗦」,而是把講解從主回合裏拆出去:
- 主模型繼續幹活,不知道 Explain 的存在。
- 講解由輔助模型完成,只進入學習線程。
- 學習狀態存在本機
$DSH_HOME裏,工作會話、恢復和 fork 都不會複製這份狀態。
倉庫 README 也寫明:產品目標在社區裏沒有直接重複的插件。dsh-advisor、dsh-memory-evolve 等項目提供過局部實現參考,但那些方案會把內容注入主 Agent,或依賴外部 UI;Explain 明確不走那條路。
核心功能¶
下面這些能力來自倉庫 README / README.zh-CN.md,以及目錄頁上的功能摘要,不是演示環境裏的主觀體驗。
一條本地學習線程¶
一個 $DSH_HOME 只有一條學習線程。不同工作會話打開的「學習」Tab,讀的是同一份全局數據。線程存在本地,不隨某個 Session 複製。
每個頂層來源會話可以有一個等待反饋的講解,也可以沒有。同一來源還沒反饋時,不會再生成第二條;其他來源不受影響,可以繼續各自講解。來源 Session 如果還在當前 inventory 裏,可以從講解直接打開;來源被刪掉後,歷史仍可讀,但會標成不可用。
主動講解和快捷入口¶
用戶可以從工作會話的 composer 主動發起學習,不必先知道該問什麼。倉庫文檔給出的命令如下:
/explain <學習請求>:在已建立或空白 Session 裏,要求 explain agent 生成一條講解。/explain on、/explain off、/explain status:開關和學習狀態查詢。
另外兩條入口不自動提交,只往 composer 寫一份可編輯草稿:
- 選中可見文字後,使用 composer 工具行裏的 Explain 快捷入口。
- 在任意已完成的 assistant 回答上,選擇「學習這個回答」。
這兩條入口由 Explain 自己註冊在 DSH 第一方槽位上:選區動作在 conversation.input.left,精確回答動作在 conversation.chat.assistant-actions。README 寫明它們不修改、不依賴 dsh-selection-chat、dsh-suggested-replies 或 dsh-advisor。
輔助模型調度和額度¶
主動講解、自主講解、重講和壓縮共用一個全局調度器,任意時刻最多一個輔助模型請求。主動請求優先於後臺工作,但不會打斷已經在途的主動請求或重講。
自主判斷默認最多發送 50 次 / 滾動 24 小時。佔額跨進程重啓保留;失敗和重試會計數;用戶觸發的主動講解、重講與壓縮不佔這筆額度。
ExplainContext 與壓縮¶
Explain 維護一份私有的全局 ExplainContext,彙總對話偏好、知識概況和學習進展。這份上下文只送給輔助模型,不注入主 Agent。主模型不知道插件存在:Explain 不寫主 Session 日誌、不改主模型上下文、不阻塞主 turn。
輔助歷史會在兩類條件下壓縮:
- 有新的結構化觀察或已關閉講解,且用戶連續 30 分鐘沒有操作 Explain。
- 預計下一次輔助請求會佔所選模型上下文窗口的 50% 以上。
壓縮只針對輔助模型歷史。用戶在學習視圖裏能看到的原始記錄不會被刪掉。首個講解條目還會保存最多 2,000 字符的受限來源摘要,供後續重講;來源 Session 刪掉後重講仍然可用,這份摘要不會通過學習視圖 API 暴露。
界面:學習 Tab 和設置頁¶
學習線程註冊在 DSH 第一方 conversation.view 槽位,界面上是一個「學習」Tab。配置和診斷走第一方 settings.section,不引入外部 UI 宿主,也不要求安裝 better-sidebar。
「學習」入口是 Session 範圍的,但業務數據來自同一個全局 client store。空白 Session 的 Hero 階段不顯示視圖 Tab;進入學習視圖後,當前工作 Session 的 composer 仍然保留。插件也不會自動把你切到學習視圖。
設置頁可以選擇輔助模型、啓用學習模式、調整滾動 24 小時自主額度,並查看路由、額度恢復、上下文壓力和最近一次壓縮。普通配置不必手改 YAML。
本地持久化¶
學習歷史、來源活躍狀態、壓縮檢查點和 ExplainContext 寫在:
$DSH_HOME/dsh-explain/v1/thread.sqlite
開關與模型設置走 $DSH_HOME/settings.yaml。數據留在本機,這就是目錄頁所說的「本地優先」。
安裝與啓用¶
社區目錄頁給出的安裝命令原文是:
dsh plugin add github:yuezengwu/dsh-explain
如需可復現安裝,目錄頁建議固定 commit 哈希:
dsh plugin add github:yuezengwu/dsh-explain#commit
把 #commit 換成實際提交哈希即可。插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前應檢查源代碼倉庫和許可證。
倉庫 README 寫得更具體:當前適配 DSH 0.1.0-rc.6,並推薦裝進 web profile。package.json 的 dsh.client.platform 也是 web,peerDependencies 對齊 0.1.0-rc.6 這一組公開 API 包。README 中的安裝命令如下:
npx @deepseek-ai/dsh@0.1.0-rc.6 plugin --profile web add github:yuezengwu/dsh-explain
npx @deepseek-ai/dsh@0.1.0-rc.6 web
Git 倉庫插件會在安裝時構建。如果 pnpm 要求批准構建腳本,按報錯信息把 dsh-explain 加入該 profile 的 pnpm-workspace.yaml,再重新跑安裝命令。裝完後需要重新啓動 profile,新的 bundle 層纔會組合進當前插件棧。
package.json 還聲明瞭 Node 引擎爲 ^22.19 || >=24,包管理器爲 pnpm@11.7.0。本機 Node 版本過舊時,構建步驟可能直接失敗。
典型用法¶
下面這些步驟都來自倉庫文檔,不是虛構的操作演示。
- 按上一節把插件裝進
0.1.0-rc.6的 web profile,並啓動 Web 界面。 - 打開設置中的 Explain 分區,選擇輔助模型,打開學習模式。需要的話再改滾動 24 小時自主額度。
- 回到工作會話繼續幹活。Explain 不會改主模型上下文,主回合仍按原來的方式進行。
- 想主動學某件事時,在 composer 輸入:
/explain 解釋剛纔這次重構爲什麼把狀態機拆成兩層
- 也可以選中對話裏的一段文字,點 Explain 快捷入口;或在一條已完成的 assistant 回答上點「學習這個回答」。這兩步只會生成可編輯草稿,確認內容後再提交。
- 切到會話頭部的「學習」Tab 查看全局學習線程。不同工作會話看到的是同一條線程。
- 需要確認插件是否在跑時,使用
/explain status;臨時關掉用/explain off,再打開用/explain on。 - 設置頁可以查看路由、額度恢復、上下文壓力和最近壓縮。出現異常時先看這裏,不必先去翻 SQLite。
本地開發或驗收時,倉庫還提供直接安裝 checkout 的寫法,不經過 npm:
dsh plugin --profile web add /absolute/path/to/dsh-explain
dsh --profile web --dump-config
dsh --profile web
日常使用不必走這條路徑。assembled Web 驗收需要一份已構建的 DSH 源碼 checkout,那是給插件開發者準備的。
適用場景與注意事項¶
適合誰:已經在用 DSH Web 界面做開發或排查,希望把「做完」和「學會」分開的人。尤其是同一 $DSH_HOME 下會開很多工作會話,又不想讓講解污染主 Agent 上下文的情況。
不適合什麼:它不是課程、測驗、卡片或間隔複習系統。倉庫在查重結論裏寫明,P0 不做這些;那是 dsh-edu 一類方向,Explain 目前只提供講解閉環。它也不是通用記憶插件,不會把學習摘要寫回主模型。
使用時需要注意:
- 當前只聲明瞭 Web 客戶端注入,不要默認它能在非 Web 界面裏出現同樣的「學習」Tab。
- 明確適配 DSH
0.1.0-rc.6。開發者預覽期 API 仍會變,升到其他 rc 之前應先看倉庫是否跟進。 - 自主講解會消耗輔助模型額度,默認 50 次 / 24 小時。失敗和重試也計數。
- 學習數據在
$DSH_HOME/dsh-explain/v1/thread.sqlite。備份或遷移 home 目錄時,要把這份文件一起帶走,否則學習線程不會跟着走。 - 快捷入口只寫草稿、不自動提交,是有意設計,避免誤把選區送進學習閉環。
- 插件以當前 dsh 進程權限運行。社區目錄和官方文檔都提醒:安裝前檢查源碼與許可證;需要可復現環境時固定 commit。
小結¶
dsh-explain 把 DSH 的工作會話變成學習素材來源,但不改主 Agent 的行爲。一條本地全局線程、按來源最多一條活躍講解、只送給輔助模型的 ExplainContext,再加上第一方「學習」Tab 和可診斷設置頁,構成它目前已經落地的 P0。倉庫 README 記錄到 M6:選區與精確回答入口都由 Explain 自己實現,並且通過了 DSH 0.1.0-rc.6 的驗收門禁。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-explain/
GitHub:https://github.com/yuezengwu/dsh-explain