DeepSeek Harness (DSH) 采用插件化架构。在多轮对话或长时间运行中,智能体面临上下文丢失、记忆碎片化的问题。dsh-memory 是一个为 DSH 设计的持久化原子事实记忆插件,旨在让智能体能够跨会话记住用户偏好、项目知识,并提供可控的检索路径。
插件定位¶
该插件基于 Cordis 开发,实现了记忆系统的 P0-P2 设计规范。它不依赖外部向量库或图数据库,通过本地 JSON 文档实现数据的持久化与存储。
核心功能¶
原子事实模型¶
所有记忆最终被解析为 主体 - 谓语 - 宾语 - 限定词 的最小化自包含断言。语义记忆、情节记忆和程序记忆均统一为这一契约,并通过稳定的 semantic_key 进行去重。
memory 服务与显式工具¶
插件提供了一个 memory 服务(ctx.memory),并提供了一系列显式工具供模型调用:
* recall:检索记忆。
* remember:存储记忆。支持可选的 procedure 参数,用于存储程序记忆(结构化步骤)。
* forget / forget_all:删除特定或全部记忆。
* link:建立记忆之间的关联。
* consolidate:后台合并,处理 TTL 过期和相同键的去重。
* extractAndRemember:后台提取并存储记忆。
* read_user_profile:返回聚合的实体卡片,包含核心摘要和分主题分组。
user.md 往返¶
支持 user.md 视图的渲染与同步。插件可从实体卡片生成 user.md 文件,并监听外部编辑,将其作为 user_edit 事件写入原子事实(信誉度 1.0,优先级最高)。
快速通道捕获¶
通过 session/event 监听器,利用零 LLM 规则捕获信号。仅当配置的触发短语(如“记住…”、“我的偏好是…”)或包含事实性信号(数字、日期、专有名词)的消息触发时,才会将内容放入后台队列。
隐私卫士¶
内置 PII 检测与分级机制:
* PII 标记内容在存储时被脱敏(如 <<phone>>),不进入原始内存。
* confidential 内容在召回时被遮罩并标记 [confidential]。
* secret 内容仅在满足特定配置(secretRequiresExplicitAuth: false 且在检索过滤列表中)时才返回。
动态上下文注入¶
召回的事实通过 DSH 的 system-prompt/assemble 上下文通道注入,作为数据而非指令展示,确保会话日志可重建。
后台合并¶
定时器触发 TTL 过期清理和相同键的去重合并。
典型用法¶
模型通过调用上述工具与系统交互。
-
检索记忆
模型调用memory_recall获取相关上下文。 -
存储偏好
模型调用memory_remember保存用户偏好。若需存储操作步骤(程序记忆),可传入procedure参数。
{
"subject": "用户",
"predicate": "偏好编程语言",
"object": "Rust",
"qualifiers": ["最近的项目"]
}
- 获取实体卡片
模型调用read_user_profile获取聚合后的用户信息概览。
配置说明¶
所有设置在 src/config.ts 中定义(使用 Schemastery 的 z.object)。
默认配置(profile: personal)¶
| 配置项 | 默认值 | 说明 |
|---|---|---|
dataFile |
'' |
默认为内存存储。需设置为具体路径以持久化数据。 |
userMdFile |
'' |
默认禁用。需设置为具体路径以启用 user.md 渲染与同步。 |
profile |
personal |
配置文件名。 |
injectContext |
true |
是否动态注入上下文。 |
captureEnabled |
true |
是否启用捕获。 |
llmExtractionEnabled |
false |
LLM 提取功能默认关闭,依赖规则驱动。 |
提取配置¶
extraction.triggers 配置触发列表,用于快速通道捕获。
注意事项¶
- 存储形式:数据以明文 JSON/Markdown 存储在文件中,无加密集成,无操作系统钥匙串集成。请确保存储目录的文件系统权限安全。
- 检索能力:无外部向量库、SQLite 或图数据库。语义检索目前是基于 BM25 的近似实现。
- LLM 提取:LLM 提取默认关闭。若需更丰富的提取能力,需在配置中启用
llmExtractionEnabled并配置 Provider/Model。 - 依赖:需满足 Node.js 版本要求(
^22.19.0 || >=24.0.0)及对应的 DSH 生态依赖。
总结¶
dsh-memory 为 DSH 智能体提供了一个轻量级、可审计的记忆层。它通过原子事实模型保证了记忆的稳定性,并通过 user.md 往返机制提供了人工介入的可能性。对于需要长期记忆的项目,建议配置 dataFile 路径以启用持久化。