前言¶
在 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