前言¶
在 DSH 裏跑長會話時,上下文壓縮往往會丟掉約束、決策理由和已寫入的產物;單靠模型摘要把歷史壓成一段話,約束類信息保留率往往很低。經驗若直接塞進主代理上下文,還會抬高 token 成本。DeepSeek Harness 社區插件 dsh-soul(維護者 icyaaaww,GitHub 倉庫 icyaaaww/dsh-soul)把「會話狀態」和「行爲模式改進」拆開:記憶骨架與圖壓縮默認路徑不依賴編輯模型;經驗編譯與 C1–C8 演化需顯式開啓,並走成對驗證、影子試用與回滾。下文按安裝、記憶、壓縮、演化四塊說明可覈對的事實與配置。
這是什麼¶
dsh-soul 2.0.0 是 DSH 工作流類插件:在八個 Harness 組件(C1–C8)上支持經驗編譯與受控演化,同時提供獨立記憶(圖骨架、每輪投影、soul_recall 回撈)以及可選的圖壓縮後端。核心約束寫在 README 裏:經驗寫入本地 SQLite 不自動進主上下文;進版本需因果門控與驗收;不修改模型權重,也不運行按關鍵詞觸發的後臺付費演化。記憶與演化各有開關。社區目錄頁:skillhub.cn/plugins/icyaaaww/dsh-soul。
核心功能¶
記憶骨架(默認開啓)¶
每輪結束,藉助已有鉤子(tools/post-execute、agent/pre-step、turn/end)把本輪編譯成圖節點寫入本地 SQLite,不調用模型。節點類型包括 constraint、decision、artifact、progress;邊類型爲 derived、supersedes、depends、supports、contradicts。
- 投影:每輪約 600 字節卡片經
ctx.systemPrompt.context(order 940)注入,從圖重算、不寫進歷史,壓縮在結構上擦不到它。 - 回撈:工具
soul_recall先查圖及一跳鄰居,不足時翻會話原文;返回用source區分node與span。 - 整理:
memory.maintenance默認開啓,按輪次合併相同節點、邊衰減;1.17 起對替換式表述寫valid_to與supersedes,舊約束退出卡片但仍可被查並標註已被取代。
可選 memory.dynamics(默認關)把卡片排序改爲複習排期;本地命令 /mem show | stats | recall | prune 等均零 LLM 調用。
圖壓縮後端(1.6)¶
將宿主 compaction 從 @deepseek-ai/dsh-compaction-basic 換成 dsh-soul/compaction 後,被壓掉的歷史由「骨架 + 錨點原文片段」替代模型摘要:llmStreamCall: false,壓縮變爲本地選點。卡片預算約爲跨度的 20%,下限 600、上限 3000 字節;跨度小於 1200 bytes 時宿主會拒絕「變大的 checkpoint」。需要 peer 依賴 @deepseek-ai/dsh-compaction-basic,掛載時由 DSH 包解析表加載。
經驗編譯與八個組件(演化,默認關閉)¶
開啓演化後,每輪免費記錄重複糾正、工具錯誤、未完成與恢復模式;支持度達閾值後,經編輯會話編譯爲 C1–C8 的普通文件改動,再走成對驗證、影子試用與回滾:
| 組件 | 存儲 | 作用概要 |
|---|---|---|
| C1 | system.md | 主會話與探測子會話提示 |
| C2 | guardrails.md | 護欄,不改宿主權限與審批 |
| C3 | memory.md | 項目事實與記憶策略 |
| C4 | tools.md | 工具指引 |
| C5 | subagents.md | evolve_catalog / evolve_delegate 委派 |
| C6 | skills/*/SKILL.md | 註冊到宿主 skills |
| C7 | scripts/*.mjs | evolve_script 純 JSON 轉換 |
| C8 | hooks/*.mjs | 工具 post-execute 建議反饋 |
探測使用 Git worktree,驗收通過配置項 checks(須覆蓋真實產物;文件型檢查需 protectedPaths)。
安裝與啓用¶
環境要求:Node.js 24+、DSH 0.2.1-rc.2 起(兼容 0.2.x;README 寫明 0.2.0-rc.2 不在支持範圍)。只開記憶時不需要爲 Soul 配置 provider/model,也不要求 llm 或 skills 服務。開啓演化還需要 Git、可用模型路由,以及支持相關組件的 llm、skills 與本地 spawn。
官方 README 給出的安裝示例(路徑換成你本地的 .tgz):
dsh plugin --profile tui add "C:\path\dsh-soul-2.0.0.tgz"
記憶默認開啓,演化默認關閉。僅記憶:
- id: dsh-soul
config:
profile: tui
memory:
enabled: true
evolution:
enabled: false
memory.enabled 與 evolution.enabled 分別控制;舊頂層 enabled 仍可作爲演化別名,顯式 evolution.enabled 優先。若要完全停用,兩者都設爲 false。injectHarness: false 只關演化組件注入,不關記憶投影。
開啓演化時配置 provider/model 及閾值示例:
- id: dsh-soul
config:
evolution:
enabled: true
profile: tui
provider: your-provider
model: your-model
validationTrials: 2
repeatThreshold: 3
shadowWindow: 3
memory:
enabled: true
projectionBytes: 600
checks:
- name: project-tests
argv: [node, --test, tests/acceptance.test.mjs]
protectedPaths: [tests, package.json]
數據庫默認位於 DSH_HOME/dsh-soul/<profile>/evolve.sqlite(未設 DSH_HOME 時爲 ~/.dsh);不同 profile 不共享默認庫,舊 Soul 庫不自動遷移。
替換壓縮後端(profile 內 compaction 插件名):
- name: '@deepseek-ai/dsh-compaction-basic' # 刪除
- name: 'dsh-soul/compaction' # 換成 graph 後端
典型用法¶
- 只用記憶:安裝插件並保持
evolution.enabled: false。長任務中依賴每輪 600 字節投影保留約束;細節用soul_recall或/mem recall <關鍵詞>按需拉取。 - 長會話減摘要成本:在已有
@deepseek-ai/dsh-compaction-basic的宿主上切換爲dsh-soul/compaction,手動/compact與自動壓縮均走圖選點;壓縮塊中會提示未展開片段數量,可配合 recall。 - 受控改 Harness:在乾淨、已提交的 Git 倉庫中開啓演化,配置
checks與validationTrials等;候選版本在 worktree 探測通過後再上線,失敗可回滾。C5 委派先evolve_catalog再evolve_delegate;C7 腳本僅接受 JSON in/out,超時與體積限制見 README。
C6 技能示例路徑 skills/build-check/SKILL.md,宿主註冊名 soul-build-check;C8 hook 在工具失敗時可追加建議,不替換原工具結果。
適用場景與注意¶
適合需要在 DSH 長會話裏穩定保留約束與決策鏈、又希望壓縮少一次模型調用的開發者;需要在真實項目上迭代 C1–C8 工作流文件且能接受 Git worktree 驗收的團隊,可再開演化。
使用前請注意:插件以當前 DSH 進程權限運行,安裝前應閱讀 倉庫源碼 與 MIT 許可證;演化探測不會自動複製被忽略的 node_modules、虛擬環境或密鑰,驗收命令須在獨立 worktree 可運行。社區目錄 skillhub.cn 與 DeepSeek / 幻方無官方從屬關係,屬社區生態「一切皆插件」的一部分。
結尾¶
dsh-soul 把「免費存經驗、付費進上下文、進版本須門控」和「機械圖骨架 + 可選圖壓縮」放在同一插件裏,記憶與演化可獨立開關。詳情與基準方法見倉庫 README 與 docs/SKELETON-BENCH.md 等文檔。
- 目錄頁:https://www.skillhub.cn/plugins/icyaaaww/dsh-soul
- GitHub:https://github.com/icyaaaww/dsh-soul