用 dsh-context-doctor 看清 DeepSeek Harness 每次請求注入了多少上下文

前言

在 DeepSeek Harness(dsh)裏跑編碼智能體時,模型每個請求都會自動帶上一批註入物:從 git 根到當前目錄層層疊加的 AGENTS.md / CLAUDE.md、技能目錄裏每一條 name + description、當前可見的工具 schema,以及 MCP 服務器展開出來的工具面。這些內容常駐在輸入裏,計量條只能給出一個總數。重複段落、描述完全相同的技能、同名技能互相遮蔽,通常要等上下文告警才被注意到。

DeepSeek Harness 的設計原則是「一切皆插件」:界面、工具、壓縮都可以替換。社區目錄 deepseek-harness-plugin.com 是獨立收錄站,和 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。其中有一款界面增強插件專門做這件事:把常駐注入拆開,逐項估算 token,標出重複和衝突。

本文按插件目錄詳情頁、GitHub README / package.json / agent-setup.md 與倉庫源碼交叉覈對後整理:dsh-context-doctor 是什麼、審計哪些對象、怎麼安裝、怎麼用。

這是什麼

dsh-context-doctor 是面向 DeepSeek Harness 的上下文注入審計插件。目錄頁歸在「界面增強」,由 Zhenyu98 維護,倉庫爲 Zhenyu98/dsh-context-doctor。GitHub API 在 2026-08-17 顯示 12 星;package.json 當前版本 0.5.0,許可證爲 BSD-3-Clause(LICENSE、目錄頁與 GitHub 元數據一致)。主要語言是 JavaScript / TypeScript。

它解決的問題很具體:不要只看計量條上的一個數字,而是回答「指令鏈、技能目錄、工具 schema、MCP 工具各自佔多少」「哪些段落或技能描述完全重複」「同名技能誰勝出、誰被靜默遮蔽」。審計路徑只讀,不改被檢查的文件。

插件有兩種入口,可以一起用:

  1. Web UI 裏的 Context Doctor 圓環面板,替代發送按鈕左側的上下文計量控件。
  2. 模型可調用的 context_audit 工具,輸出分節報告和按嚴重度排序的裁剪建議。沒有 Web 界面時,工具仍然可用。

核心功能

圓環面板:常駐成本一眼能看

裝好並重啓 dsh web 之後,已有會話的發送按鈕左側會出現 Context Doctor 控件。圓環顯示常駐上下文的估算 token(指令鏈 + 技能目錄 + 工具 schema),顏色按倉庫 README 給出的閾值分級:綠小於 10k、黃小於 30k、紅大於等於 30k。

面板本身是英文等寬界面,指標和建議卡片用低飽和語義色;外層 DSH 外殼仍跟隨淺色、深色或系統主題。點擊後展開四組明細:Instruction chainSkills catalogTool schemasMCP tools,並提供手動刷新。數據走 GET /api/context-doctor/audit,host 側默認緩存 60 秒。

新會話還沒分配 sessionId 時,不會出現會話級控件。原生替代還要求當前 DSH 提供 conversation.input.context 插槽;沒有該插槽的版本仍可調用 context_audit,只是看不到這塊 UI。

四類常駐注入,外加可選的技能正文

README 把審計對象分成五類,前四類是每請求常駐成本:

注入物 統計什麼
指令鏈 從 git 根到當前工作目錄每一層的 AGENTS.md / CLAUDE.md:文件數、token 估算、跨文件完全相同的重複段落
技能目錄 ctx.skills 裏全部技能的 name + description(模型每請求看到的 <available_skills>),按來源分組,並找出描述完全相同的冗餘技能
工具 schema ctx.tools.schemas 中當前 agent 可見的全部工具:數量、schema token,以及原生工具與 MCP 工具分組
MCP 工具面 按服務器彙總 MCP 工具數與 schema token,用來識別工具面膨脹
技能正文(可選) 前 N 個技能正文的總 token;按需加載,不計入常駐請求,用來對比「目錄摘要」和「真正讀正文」的成本差

衝突檢測針對同名技能多來源並存:例如項目技能把 bundled 技能 shadow 掉時,報告勝出者與被遮蔽者(rank shadow)。

token 不是模型 tokenizer 的精確值。README 寫明啓發式規則:ASCII 約 4 字符/token,中文約 1.5 字符/token,用來做相對比較和排序;和計量條對不上時,以模型側實際計數爲準。MCP 工具 schema 目前只按 name + description 估算,不計入 JSON Schema 參數細節。指令鏈重複檢測只認完全相同的段落塊,換一種表述寫同一條規則不會被標出來。

context_audit:報告可以直接拿去裁

模型調用 context_audit 後,得到一份 canonical JSON(AuditReport),原生渲染成五段可讀報告:指令鏈、技能、工具、衝突、建議。建議按嚴重度排序,模型可以按條目去改文件、關技能或收工具面。

默認是摘要:成本、衝突、修復建議。加上 detail=developer 會多一張 context-audit receipt:已加載指令文件的路徑、字節、token、加載順序和重複塊短預覽;catalog 裏每條技能的名稱、來源、provider、描述字節;每個 tool schema 的序列化字節與簽名;重複 MCP 簽名;shadowed skill 關係。回執不含完整 prompt 或技能正文。

報告裏的 trimmed 字段,當前版本固定爲 unavailable。README 的說明是:只有 DSH 暴露上下文裝配軌跡之後纔會填條目,避免把看不到的狀態寫成「已經裁過」。

安裝與啓用

目錄詳情頁上的安裝命令是:

dsh plugin add github:Zhenyu98/dsh-context-doctor

dsh CLI 會從 GitHub 解析插件並裝進當前配置。目錄頁同時提醒:如需可復現安裝,應固定 commit 哈希,形式爲 dsh plugin add github:Zhenyu98/dsh-context-doctor#commit。本文覈對倉庫時,main 最新提交是 a15e68d68f511db5ae4057c96ae1c727e21bf1b1(2026-08-17):

dsh plugin add github:Zhenyu98/dsh-context-doctor#a15e68d68f511db5ae4057c96ae1c727e21bf1b1

倉庫 README / agent-setup.md 面向 Web UI 的寫法帶了 --profile web,並釘在 main 分支;git 源安裝已包含構建產物,不必本機構建:

dsh plugin --profile web add "github:Zhenyu98/dsh-context-doctor#main"
dsh --profile web --dump-config | grep context-doctor

合成樹裏應出現類似下面的 insert 條目:

- insert:
    - id: context-doctor
      name: 'dsh-context-doctor'

然後重啓 dsh web。成功信號有兩個:已有會話的 composer 旁出現圓環,或新會話裏模型調用 context_audit 返回分節報告。

agent-setup.md 列出的前置條件是:本機已安裝 DeepSeek Harness(dsh 在 PATH 中,版本 ≥ snapshot0811 / 0.0.1-rc.1)。Node.js ≥ 22.19 只在開發 / 構建時需要。若 dsh plugin 報找不到 pnpm,需要先把 pnpm 放進 PATH——安裝是顯式的包管理操作。

也可以把倉庫提供的安裝說明交給 Codex、Claude Code、Cursor 或 DSH 裏的 agent,讓它按 agent-setup.md 執行;改文件、用憑據或跑破壞性命令前,應先看計劃。

瀏覽器面板的默認審計目錄和緩存可以寫在配置裏:

context-doctor:
  defaultCwd: /path/to/project
  cacheTtlMs: 60000

defaultCwd 缺省爲進程啓動目錄;cacheTtlMs 缺省 60000 毫秒。

典型用法

模型直接調用工具即可。倉庫給出的調用形式如下:

context_audit
context_audit cwd=/path/to/project
context_audit includeSkillBodies=true maxSkillBodies=20
context_audit detail=developer

不傳參數時,審計當前會話工作目錄。includeSkillBodies 會逐個加載技能正文,默認關閉;maxSkillBodies 默認 20。

README 中的報告結構示例(字段名與嵌套來自倉庫,數值是文檔裏的示意,不是某次真實會話的測量結果):

{
  "tool": "context_audit",
  "version": 1,
  "cwd": "/path/to/project",
  "injected": {
    "instructions": {
      "files": [{ "path": "...", "bytes": 3421, "tokens": 812 }],
      "totalTokens": 812,
      "duplicateBlocks": []
    },
    "skills": {
      "catalogCount": 177,
      "catalogDescriptionTokens": 4150,
      "bySource": [],
      "duplicateDescriptions": []
    },
    "tools": {
      "visibleCount": 42,
      "schemaTokens": 9800,
      "nativeCount": 38,
      "nativeTokens": 6100,
      "mcp": {
        "servers": [{ "server": "github", "tools": 12, "schemaTokens": 2400 }],
        "totalTools": 12,
        "totalTokens": 2400
      }
    }
  },
  "conflicts": [],
  "suggestions": []
}

沒有 Web 時,把插件掛到 headless profile 後直接讓模型調用 context_audit 即可。源碼在沒有 webServer 服務時會跳過 HTTP 路由註冊,工具不受影響。

圓環不出現時,按 README 的順序排查:是否已重啓 dsh web、是否進入已有會話的 composer、dump-config 是否含 context-doctor。原生替代還依賴 conversation.input.context 插槽;改過插件源碼必須重新執行 ./scripts/build.sh

適用場景與注意事項

適合已經在 DSH 裏堆了多層 AGENTS.md、大量技能和 MCP 服務器,計量條發紅卻說不清預算花在哪的人。也適合維護共享項目指令、給智能體做環境體檢:先看常駐 catalog 有多貴,再決定要不要打開 includeSkillBodies 對比正文成本。只跑 CLI / headless 的用法同樣成立,只是沒有圓環。

使用前要接受這些邊界(均來自 README 的 v0.5 說明與安全章節):

  • 審計只讀:只用 ctx.fs 的 read / stat / list,不寫、不刪、不執行被審計對象。
  • 單文件超過 256 KB 會跳過,避免審計器被大文件拖垮。
  • 報告只含路徑、統計和重複段落片段,不含完整文件內容;技能正文默認只在顯式打開時統計總量,仍不輸出正文。
  • 重複檢測不做語義相似度;MCP schema 估算不含參數 JSON Schema。
  • token 是啓發式估算,用來排優先級,不能當計費依據。

目錄頁寫明:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前應檢查源代碼倉庫和許可證;需要可復現安裝時,固定 commit 哈希,不要長期釘在浮動的 main 上。

小結

dsh-context-doctor 把「上下文很滿」拆成可以逐項覈對的賬單:指令鏈、技能目錄、工具 schema、MCP 工具面各佔多少,哪些完全重複,同名技能誰被遮蔽。Web 圓環負責日常掃一眼,context_audit 負責給出能執行的裁剪建議;審計本身保持只讀。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-context-doctor/

GitHub:https://github.com/Zhenyu98/dsh-context-doctor

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

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

小夜