前言¶
在 DeepSeek Harness(DSH)里跑智能体,上下文窗口迟早会满:要么靠宿主粗暴截断,要么把整段对话或超长工具输出反复塞进 prompt,既费 token 也容易把模型带偏。社区里常见的做法是外挂向量库或手工摘抄笔记,但检索边界、遗忘策略和「死记忆复活」往往各管各的,和宿主会话状态也脱节。
下面介绍维护者 382quaii 发布的记忆类插件 dsh-layers-hippocampus(npm 包名 dsh-layers-hippocampus,仓库名 dsh-Layers-Hippocampus,Hippocampus 双 p)。它在 DSH 侧提供分层长期记忆:追加式事件日志、可重建索引、按天日记、独立语义层、L2.5 趋势隔离、离线知识图谱,以及完整 Web 面板;运行时 Host 半边零 npm 依赖(仅用 Node 内置模块,React 由 Harness 提供)。当前资料版本 1.5.6,许可证 MIT,要求 Node >= 22。
这是什么¶
一句话定位:给 DSH 智能体的「赛博海马体」——以唯一真相源(追加式 JSONL 事件日志)为中心,索引、日记、活跃标签、知识图谱都是可丢弃、可重建的投影;写入走事件溯源,检索带衰减与图谱联想,删除走两阶段倒计时并带墓碑防复活。
插件在 SkillHub 目录分类为「记忆」,GitHub 仓库:https://github.com/382quaii/dsh-Layers-Hippocampus。详细设计见仓库内 docs/ARCHITECTURE.zh.md。
核心功能¶
分层与数据流¶
- L1 事件日志:追加式 JSONL 代际 +
CURRENT指针。 - L2 索引:标签表、活跃集合、日记、墓碑;A/B 双缓冲,读者看不到半成品。
- L1.5 标签层级树:按
/解析为 root / mid / leaf;root 受保护,leaf 引用归零可修剪,mid 失去叶子后进入宽限期(幽灵节点),召回时对仅经宽限 mid 的命中只回元数据,引导deep_raw。 - L2.5 趋势隔离:短命观察,经晋升窗口与突发检测才升级为长期记忆。
- L3 语义层:摘要与原始日志生命周期独立。
- 图谱:标签共现网络的离线投影;
recall命中 Tag 时可读取state/graph.json,取最强 3 个邻居并以 0.5 惩罚系数进入候选池。
上下文被 evict 时,引擎可将最近一批折成 folded_summary 写回 L1(标签 status:folded);自然月结束后 maintain() 可压成 status:monthly 月记,不参与日常衰减,模糊时间查询会优先召回。
工具面(memory_*)¶
宿主暴露一组以 memory_ 为前缀的工具,README 摘要如下:
| 工具 | 用途 |
|---|---|
remember |
追加长期记忆(内容哈希幂等);可选 media_url + media_type;pinned: true 须带 tags |
checkpoint |
记录唯一进行中的重任务(task_id、progress 0–100) |
space_transfer / transfer_to_global |
跨空间迁移,须 user_approved: true |
recall |
关键词 + 标签检索,含图谱联想;宽限 mid 仅元数据;mode: "deep_raw" 受限 raw 扫描 |
capture |
一轮原始对话进取证层(门控与预算,不进索引) |
reinforce |
确认记忆并推进复习档位(间隔 1,2,4,7,15,30 天) |
forget / restore |
两阶段删除与取消 |
admin |
status、maintain、active_tags、semantic 等 |
系统提示会注入静态段 memory:policy,引导模型在需要历史、文件或系统信息时优先 memory_recall,避免盲目读超长外部文件。本插件工具返回超长 JSON 时由 slimToolPayload 写入 raw 并返回瘦身版,可用 memory_recall(mode="deep_raw", hash="…") 按 sha256 恢复。
原始回合(raw)与确定性遗忘¶
- 独立日分片
raw/YYYY-MM-DD.jsonl,不进主日志与索引;deep_raw读出前对 snippet 脱敏(Bearer、sk-、长 base64 →[redacted]),本地磁盘仍为明文。 forget默认挂起delete.graceHours(资料示例 24h),到期由maintain()推进 tombstone → archive → consolidation → purge;content_hash幂等与event_id身份纪律避免重复写与遗忘后复活。- v1.5.0 起对「超级大标签」有索引截断(默认每标签最多 500 postings)与检索降级,强制
deep_raw带时间窗等治理,防止上下文与内存洪峰。
Web 面板与多空间¶
插件含 Web UI(dsh.client.platform: web),设置页可迁移 dataDir(后台拷贝与校验,并发由 .migration.lock 阻断)。v1.5.0 文档还涉及多空间路由与会话交接能力,与 space_transfer 系列工具配合使用。
安装与启用¶
DSH 生态主张「一切皆插件」;SkillHub(https://www.skillhub.cn/plugins/382quaii/dsh-Layers-Hippocampus)是社区目录站点,与 DeepSeek / 幻方无官方从属关系。安装方式以 README 为准。
从 GitHub 指定版本:
pnpm add "github:382quaii/dsh-Layers-Hippocampus#v1.5.6"
从 npm:
pnpm add dsh-layers-hippocampus
通过插件管理器(README 推荐示例):
plugin_manager action=install_bundle target="C:\Users\86135\Documents\deepseek-harness\default-workspace\dsh-memory"
安装后 profile 会插入类似配置:
- insert:
- id: hippocampus
name: "dsh-layers-hippocampus"
config:
briefing: true
Host 半边随下一次宿主启动生效;UI 在页面加载时从 boot graph 取得。冷启动后可用仓库脚本确认路由:
node scripts/wait-for-routes.mjs
典型用法¶
经过上面的步骤启用插件后,智能体在对话中通过工具调用操作记忆,而不是直接改磁盘文件。常见路径如下。
- 写入可检索记忆:调用
memory_remember,为条目打标签(层级标签如tech/frontend/vue3);需要「永置顶」的经验须pinned: true且带 tags,否则返回MEM_E_PINNED_TAG_REQUIRED。 - 日常回忆:调用
memory_recall,用关键词与tags检索;需要原话时用mode: "deep_raw",并按要求提供start_time/end_time(大标签场景可能强制时间窗,错误码如MEM_E_TIME_RANGE_REQUIRED)。 - 长任务进度:调用
memory_checkpoint更新唯一活跃任务的progress;7 天未刷新可由maintain()自动降级。 - 确认与遗忘:调用
memory_reinforce推进复习;误删前用memory_restore,否则memory_forget进入挂起倒计时。 - 运维:调用
memory_admin action="status"或action="maintain"查看状态、触发维护(raw TTL、月记、待删队列、标签树修剪等)。
跨空间迁移必须人类批准:space_transfer / transfer_to_global 须 user_approved: true,否则引擎拦截。
适用场景与注意¶
适合谁:需要在本机 DSH 工作区内长期沉淀决策、标签化知识、任务 checkpoint,并希望在上下文 eviction 后仍能通过 recall / 图谱联想 / 月记召回的开发者;也适合需要 Web 面板查看存储、图谱与维护状态的场景。
务必知晓:
- 插件以当前 dsh 进程权限读写数据目录;安装前应阅读源码与 MIT 许可证,确认数据路径与隐私策略(含 raw 明文、跨空间迁移的隐私词拦截规则)。
media_url仅接受 http(s) 或绝对路径;内联超长 base64 会被拒绝写入。deep_raw有raw.maxScanTurns、raw.maxResultTokens等预算,超大日分片存在「尾扫偏置」:一次扫描可能只看到该分片最新 N 条,需调参或分页时间窗;返回体中的truncated与notes会说明未扫完,不会静默假装无数据。- 超级大标签检索会被降级为元数据或最近少量摘要,避免把数千条记忆一次性打进 prompt。
结尾¶
dsh-layers-hippocampus 把长期记忆做成可重建的分层投影:追加日志、确定性遗忘、图谱联想与 raw 黑匣子分工明确,并自带 Web 面板与多空间迁移门禁。若要在 DSH 里替换「无限堆上下文」或松散笔记,可从目录页与仓库 README 的安装命令起步,再按 memory_* 工具链接入智能体工作流。