前言¶
在 DeepSeek Harness(DSH)里跑长对话或跨多个工作区时,模型默认不会记住你上一轮整理过的偏好、项目约定或临时结论。常见做法是手动粘贴上下文、靠外部笔记,或在每个 Session 里重复说明。DSH 生态里插件可以扩展宿主能力;下面介绍维护者 snaiheihei 发布的 dsh-snail-memory(npm 包名 dsh-snail-memory),它为单用户提供 global / workspace 两级记忆,并通过 Web 面板查看条目、调整蒸馏与整合策略,且每个对话可手动选择要加载的记忆层。
这是什么¶
dsh-snail-memory 是 Cordis 插件:单用户、全局与工作区分层的记忆存储;启用后把记忆索引常驻上下文、详情按需加载;在 Web UI 里浏览与控制条目。源码与说明见 GitHub,社区目录页见 SkillHub。协议 MIT;兼容 dsh >=0.2.1-rc.3 <0.3.0-0,Node >=22.19.0(以 README 与 package 声明为准)。
核心功能¶
两级记忆与显式开关¶
- global:跨工作区;workspace:绑定单个工作区。两层相互独立,各自有 revision。
- 记忆不会自动进入上下文。每个 Session 在输入框左侧记忆按钮里手动启用某一层;可用
refresh生成新快照,disable关闭。
注入与会话安全¶
- 快照通过
agent.inject()作为一条user消息追加(source.kind = "snail-memory"),插件不改写、不替换、不删除既有会话消息。 - 每次注入带稳定
injectionId,区分desired → queued → committed;只有会话里真正落盘的user/message才算 committed,重启后按会话日志对账,避免重复注入。
生命周期与模型工具¶
- 统计完成的用户轮次,按空闲时间蒸馏记忆;分别调度 workspace 与 global 的 consolidation,并按分类做 retention 清理。
- 工具:
snail_memory_read(按 id 读取,大对象先返回分片清单)、snail_memory_feedback(对已 committed 快照里的记忆打 helpful / unhelpful / incorrect)。 - 斜杠命令:
/memory status、/memory remember workspace <text>、/memory correct workspace <id> <text>、/memory forget workspace <id>。
Web UI 与单写者¶
- 侧栏 Memory 面板(全局 / 工作区 / 设置),可查看条目、引用、最近一次已提交快照与 token 估算(用于上下文预算,非 provider 精确 usage)。
- 同一数据根下可多 Host 启动,但仅一个持有写锁,其余只读;锁有心跳与 stale 回收,写操作带 fencing 校验。
安装与启用¶
任选一种安装方式,然后重启 Host 并刷新页面。安装前建议查看源码与 MIT 许可证;插件以当前 dsh 进程权限运行,记忆数据落在本地 $DSH_HOME。
# 1) 从 npm 安装
dsh plugin --profile web add dsh-snail-memory
# 2) 从 tarball 安装
dsh plugin --profile web add .\dsh-snail-memory-0.1.0.tgz
# 3) 从解压后的目录安装
dsh plugin --profile web add .\dsh-snail-memory
# 4) 从 Git 安装(需要该 tag/commit 带上构建产物)
dsh plugin --profile web add github:snaiheihei/dsh-snail-memory#v0.1.0
装完确认组合层生效:
dsh --profile web --dump-config # 应出现 "# == dsh-snail-memory"
卸载:
dsh plugin --profile web remove dsh-snail-memory
典型用法¶
- 打开 Session,点击输入框左侧记忆按钮,选择 global 或 workspace 启用。
- 启用后当前记忆索引作为快照注入;对话中可随时
refresh更新快照。 - 侧栏 Memory 浏览条目、查看详情、删除、promote 到 global,并调整全局设置。
- 需要写入时用
/memory remember workspace <text>,或由模型在对话中写入;读取与反馈由snail_memory_read、snail_memory_feedback完成。
配置¶
在 profile 的 cordis.patch.yml 中,按行 id snail-memory 覆盖。patch 会整体替换该行的 config,需把要保留的键一并写全:
- id: snail-memory
config:
provider: deepseek
model: deepseek-chat
reviewEveryUserTurns: 15
idleDelayMinutes: 60
consolidationCooldownHours: 20
globalConsolidationCooldownDays: 7
retentionSweepHours: 24
| 键 | 默认值 | 说明 |
|---|---|---|
dshHome |
宿主解析值 | 数据根;默认跟随 DSH_HOME |
provider / model |
未设置 | 辅助模型路由;留空时从当前 agent 列表选可用模型 |
reviewEveryUserTurns |
15 |
每累计多少完成的用户轮次触发记忆蒸馏 |
idleDelayMinutes |
60 |
会话空闲多久后触发蒸馏 |
consolidationCooldownHours |
20 |
workspace consolidation 冷却 |
globalConsolidationCooldownDays |
7 |
global consolidation 冷却 |
retentionSweepHours |
24 |
retention 清理间隔 |
默认数据目录:$DSH_HOME/snail_memory/(config.dshHome 可改)。权威状态在 state.v2.json;审计日志 audit.v1.jsonl 只记 operation / revision / 时间,不记提示词与记忆正文。
适用场景与注意¶
适合:希望在 DSH Web 里长期沉淀偏好与项目知识、又希望按 Session 控制「哪一层记忆进上下文」的单用户开发者。
注意:
- 记忆仅本地存储,不采集遥测;蒸馏/合并走宿主
ctx.llm,凭据由你自己的 provider 配置决定。 - RPC 挂在宿主
webServer同源路由/snail-memory/rpc/*。勿将 dsh Web 绑定到不受信任网络(--host默认本机)。 - 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;安装插件前请自行审阅仓库代码。
结尾¶
dsh-snail-memory 把 global / workspace 分层记忆、显式注入、Web 管理与蒸馏整合收进一个 DSH 插件;需要细节时直接对照 README 与仓库。