前言¶
Coding agents often forget what they just did, or vector-based “auto-memory” products remember too much—drafts, wrong turns, and guesses. dsh-memory-ga takes a different path. It follows the discipline “No Execution, No Memory”: it only stores long-term facts after tools (or the user) have confirmed reality. It provides a small, trustworthy index of facts and rules, a session notepad, and a “settlement ritual” to turn lessons into Skills without silently poisoning memory.
核心功能¶
根据已核实的事实,该插件具备以下能力:
- Verified only:只有在工具(或用户)确认现实后,才会进行长期写入。
- Hard-injected L1:每轮对话都会硬注入一个 ≤~30 行的索引 + RULES,而非一个可能永远不会被打开的指针。
- Working notepad:当会话记事本
key_info非空时,会重新注入到上下文中。 - Gated settlement:
start_long_term_update会开启一个协议,但不会自动编辑你的文件。 - Skills stay Skills:可复用的流程 → DSH Skills。记忆不是第二个 SOP 仓库。
- Local & auditable:所有数据均为
$DSH_HOME/memory下的纯 UTF-8 文本,可 diff、备份、手动编辑。
目录结构¶
插件在 $DSH_HOME/memory 下维护以下结构:
$DSH_HOME/memory/
L0_memory_management.md # 宪章(如何记忆)
global_mem_insight.txt # L1:导航 + RULES → 硬注入
global_mem.txt # L2:已验证的事实 → 按需读取(≤9 行的章节 + 指针)
l3/<topic>.md # L3:长篇事实档案(L2 章节指向此处)
.working/<session>.txt # 可选的会话记事本转储
插件不包含笔记式的杂物抽屉,也没有记忆树 L4。l3/ 仅存放事实档案,流程属于 Skills(Skill = 怎么做,L3 = 是什么)。
提供的工具¶
| 工具名 | 功能 |
|---|---|
update_working_checkpoint |
替换会话记事本 (key_info) |
start_long_term_update |
返回 L0 + 结算协议(不自动写入) |
memory_status |
显示路径、L1/L2 大小、L3 档案数、记事本是否为空、nudge 计数器 |
插件提供可选的软提醒(默认开启):在经过足够步骤后,温和地提醒进行 checkpoint 或 settlement。绝不强制工具调用,绝不自动写入 L1/L2。
安装与启用¶
在 DSH 的 profile 目录下(例如 $DSH_HOME/profiles/web),使用 pnpm 安装:
pnpm add dsh-memory-ga@github:DiligenceLai/dsh-memory-ga
确保 profile 加载了该包(通常在 dsh.profile.bundles 中列出,或依赖包内的 cordis.patch.yml 自动插入)。
配置¶
在 Cordis 配置中添加 memory-ga 插件 ID:
- id: memory-ga
config:
# root: null # 默认:$DSH_HOME/memory
bootstrap: true
injectL1: true
injectWorking: true
l1MaxChars: 1200
workingMaxChars: 1200
persistWorkingFile: true
nudge:
enabled: true
workingEvery: 12
settleAfterSteps: 15
maxWorkingNudges: 3
maxSettleNudges: 2
硬依赖:插件声明了 inject: ["tools", "systemPrompt", "llm"]。运行内存记事本和 nudge 注入需要 @deepseek-ai/dsh-llm(需具备 createUserMessage 能力)存在于宿主组合中。如果缺失,插件仍会加载,但 memory_status 会警告记事本/nudge 未注入。
注意:workingMaxChars 是存储和注入会话记事本的单一上限,因此 memory_status.workingChars 始终反映模型实际看到的内容。
典型用法¶
- 检查状态:重启 DSH 或重新加载 profile 后,在会话中运行
memory_status,应能看到$DSH_HOME/memory路径及相关计数。 - 更新记事本:运行
update_working_checkpoint并附带简短备注,下一轮模型步骤应包含### [WORKING MEMORY]。 - 长期更新:运行
start_long_term_update查看协议及完整的 L0 内容。此时磁盘文件不会改变,直到你手动编辑。- 首次启动会根据模板创建缺失的 L0/L1/L2,且不会覆盖现有文件。
适用场景与注意¶
- 适用场景:你需要可控的结晶化过程和 Git 友好的真相存储,而不是自动的向量检索或自动保留。
- 注意 1:这不是一个向量数据库、TEMPR 或自动 git 保留产品。
- 注意 2:这不是 DSH Skills 的替代品。
- 注意 3:这不是自动生成 Skills 的工具。
- 隐私:仓库仅包含通用模板。你真实的 L1/L2 文件位于你机器上的
$DSH_HOME/memory中,永远不会包含在此包中。不要将个人记忆文件或绝对路径提交到 fork 中。
总结¶
dsh-memory-ga 为 DeepSeek Harness 提供了一种基于文件系统的、有门控的层叠记忆方案。它通过硬注入索引、会话记事板和有门控的结算协议,帮助 Agent 在保留必要事实的同时,避免记忆污染。