dsh-soul:独立记忆、图压缩与受控 Harness 演化

前言

在 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 后端

典型用法

  1. 只用记忆:安装插件并保持 evolution.enabled: false。长任务中依赖每轮 600 字节投影保留约束;细节用 soul_recall 或 /mem recall <关键词> 按需拉取。
  2. 长会话减摘要成本:在已有 @deepseek-ai/dsh-compaction-basic 的宿主上切换为 dsh-soul/compaction,手动 /compact 与自动压缩均走图选点;压缩块中会提示未展开片段数量,可配合 recall。
  3. 受控改 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
羽毛球分组比赛记分
小程序二维码

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

小夜