dsh-env-profile:自動探測環境並注入系統提示

前言

在使用 DeepSeek Harness (DSH) 時,如果每次新會話都需要重新確認本地有哪些開發工具、哪些路徑是靠譜的、網絡延遲如何,會消耗大量 token 並拖慢對話節奏。dsh-env-profile 解決這個問題:它在後臺自動探測本地環境,將信息沉澱爲跨會話的全局檔案,並生成低開銷摘要注入每一輪的系統提示中。

插件簡介

dsh-env-profile 是一個 DSH 全局經驗插件。它負責自動探測本地環境(依賴工具、便捷路徑、網絡、磁盤),訂閱 session/event 摺疊每會話統計,沉澱爲跨會話的全局檔案,並把低開銷摘要注入每一輪系統提示。

  • 維護者:Yvesgao
  • 類別:記憶
  • 許可證:MIT
  • 當前狀態:骨架期 v0.1

核心功能

該插件提供以下核心能力:

  1. 自動探測本地環境:通過宿主探測(如 where.exe、TCP 建連、磁盤採樣)收集工具列表、路徑、網絡狀態和磁盤信息。
  2. 跨會話全局檔案沉澱:將探測結果和會話統計存儲在 $DSH_HOME/storages/env_profile.json 中,形成持久化的環境記憶。
  3. 低開銷摘要注入:將環境摘要以 systemPrompt.section(order 500)的形式注入每輪對話,默認預算硬上限 600 字符。
  4. 按需查詢工具:提供 env_profile 工具,支持通過 scope 參數(如 summary/env/sessions/facts/all)查詢全量檔案。
  5. LLM 自動抽取:自動從會話歷史中抽取知識條目(如用戶偏好、項目約定),補充到檔案中。
  6. 關鍵工具版本探測:探測 git/node/npm/pnpm/python 等常用工具的版本和首個 PATH 路徑。

安裝與啓用

官方安裝

直接使用插件倉庫安裝:

dsh plugin --profile web add dsh-env-profile

安裝後重啓 dsh web 生效。

本地開發注意事項

本地開發時,由於 pnpm 默認建立 junction(符號鏈接)可能導致 ESM 解析失敗,需要使用物理拷貝方式安裝:

# 1) 登記依賴
dsh plugin --profile web add "E:\YourPath\dsh-env-profile"

# 2) 物理拷貝替換 junction(關鍵步驟)
$dst = "$env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-env-profile"
cmd /c rmdir "$dst"
Copy-Item -Recurse "E:\YourPath\dsh-env-profile" "$dst"

# 3) 重啓 dsh web

驗證安裝

  1. 檢查存儲目錄:$DSH_HOME/storages/ 下出現 env_profile.json。
  2. 檢查系統提示:在任意會話的系統提示尾部查看是否出現 ## Environment profile 段落。
  3. 測試工具:詢問“這臺機器裝了哪些常用工具?”,模型應直接回答,無需現場探測。

工作原理

插件構建了一個完整的閉環架構:

  1. 探測:lib/probes.js 定時或手動觸發探測(工具、路徑、網絡、磁盤),結果存入領域模型。
  2. 存儲:lib/store.js 負責內存鏡像與持久化,同步寫入 JSON 文件,並進行會話鏡像剪枝。
  3. 注入:lib/injector.js 將生成的摘要插入系統提示(order 500),控制注入預算。
  4. 查詢:lib/tool.js 提供 env_profile 工具,供 LLM 按需查詢全量或特定範圍數據。

省 Token 機制

  1. 前綴緩存穩定:摘要由 summarize() 生成,排序和格式固定。當檔案狀態不變時,每輪注入的摘要逐字節相同,DeepSeek 的前綴緩存持續命中,只有尾部變化時才失效。
  2. 注入預算硬上限:默認 600 字符,超限會截斷並提示使用工具獲取全量,防止經驗注入成本反超收益。
  3. 探測零模型成本:所有探測操作(where.exe、文件存在性檢查、TCP 建連、磁盤讀寫)均爲宿主側確定性操作,不佔用任何 token。

配置項

通過覆蓋 cordis.patch.yml 中的配置,可以調整插件行爲:

- id: env-profile
  config:
    injectMaxChars: 400        # 注入預算調小
    probeIntervalHours: 24     # 探測更懶
    networkHost: api.deepseek.com
    trackSessions: true
    learnEnabled: false        # 關閉 LLM 自動抽取(有 token 成本)
    learnIntervalTurns: 5      # 每 5 輪抽取一次
    learnMaxInputChars: 4000   # 抽取輸入上限

典型用法

  • 查詢摘要:在會話中調用工具。
    env_profile scope=summary
  • 查詢全量:
    env_profile scope=env/sessions/facts/all
  • 刷新探測:強制重新執行探測。
    env_profile refresh

注意事項

  • 僅支持 Windows:當前探測依賴 where.exe 和 Windows 環境變量,POSIX 系統暫不支持。
  • 單進程寫約束:JSON 後端不支持多進程併發寫,勿在多個 DSH 進程同時寫同一個 DSH_HOME。
  • 骨架期狀態:目前爲 v0.1 骨架期,核心閉環可用,部分功能(如近義合併、Web 設置頁)在路線圖中。

結語

dsh-env-profile 通過“探測-沉澱-注入-查詢”的閉環,將環境信息從“每次解釋”變爲“開局即知”,有效減少了重複探測和重複解釋,降低了 token 消耗。對於需要頻繁切換環境或長時間運行會話的開發場景,這是一個實用的輔助工具。

插件目錄 | GitHub 倉庫

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

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

小夜