五层持久记忆系统:相关性注入、LLM 自动提取、画像轮替与六个 agent 工具。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:NattoCB/dsh-plugin-memory
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
English | 中文
一个为 DeepSeek Harness(DSH)打造的持久五层记忆系统:用户画像(L1)、项目级语义索引与主题文件(L2)、按天追加的日志(L3),分别落在
~/.dsh/memory/与<cwd>/.dsh/memory/。每个请求前自动注入相关记忆,会话空闲时由 LLM 自动把沉淀的事实写成新主题文件。以 DSH 插件形式接入两条 cordis 接口——agent/pre-step负责注入,ctx.tools.register注册六个memory_*工具。不配置llm也能用:入口注入、关键词相关性、画像轮替照常工作,仅 LLM 排序与自动提取被关闭。
✨ 功能一览
- 🧠 五层模型:L0 用户自有身份(
~/.dsh/AGENTS.md,本插件不接管)→ L1 画像 → L2 项目索引 + 主题文件 → L3 按天追加日志 → L4 skills(既有)。每层都有独立的写入路径、截断预算与注入规则。 - 📇 索引 + 主题文件分离(L2):
MEMORY.md永远是指针表,每行 ≤150 字符;详细内容落在<topic>.md。单文件保持小巧、可检索、可截断。 - ✂️ 截断预算:启动注入的索引硬截断为 200 行 / 40 000 字符,保证冷启动上下文开销很低。
- 🎯 相关性注入:每一步根据最新用户 query 选取相关主题文件(配置了
llm时走 LLM 排序,否则走关键词打分),以<system-reminder data-role="memory">块追加;同一会话内已注入的文件会去重。两个通道在 GUI 上下文行中分别标注为memory-entry(每会话一次)与memory-relevance(按需注入)。 - 🤖 LLM 自动提取:会话进入空闲时,经防抖(60 s)、尽力而为地扫描最近 40 条事件,让 LLM 产出新主题文件与索引行并写入。绝不覆盖既有记忆;模型不可用时静默降级。
- 🔄 画像轮替(L1):
memory_profile把新事实合并进四个固定小节(工作背景 / 个人背景 / 当前关注 / 近期动态)并递增版本号,旧版保留在profile.md.bak。 - 🔒 读回的是数据,不是指令:记忆用
fs/promises直接写入记忆根目录——预期中的持久化,而非自我修改——且路径被约束在存储根内。记忆文件是 agent 读回的上下文,绝不是授权指令。 - 🧩 纯 harness 插件:无 HTTP API / GUI 面板——只有注入与工具。DSH 服务于单一用户,路径不含
<uid>层。 - 🛠️ 六个 agent 工具,通过
ctx.tools.register(@deepseek-ai/dsh-tools的defineTool)注册:
| 工具 | 范围 | 效果 |
|---|---|---|
memory_write |
global/project | 写入/覆盖主题文件;可选追加一条索引。 |
memory_read |
global/project | 读取主题文件或 MEMORY 索引。 |
memory_search |
global/project/both | 关键词检索主题文件。 |
memory_daily |
cwd | 向 <cwd>/.dsh/memory/YYYY-MM-DD.md 追加一行当日记录。 |
memory_forget |
global/project | 删除主题文件及其索引指针。 |
memory_profile |
global | 读取,或合并轮替单一用户画像。 |
快速开始
前置要求
- 已安装 DeepSeek Harness(DSH),且 profile 支持插件(如
web)。 - 无需配置
llm——插件会降级为纯关键词相关性。
安装
dsh plugin --profile web add github:NattoCB/dsh-plugin-memory
运行
重启 dsh web。插件在首次使用时自动初始化两个记忆根目录:
~/.dsh/memory/
MEMORY.md # 全局索引(≤200 行 / 40K 字符)
profile.md # L1 画像(Version N)
profile.md.bak # 上一版本画像
<topic>.md # 全局主题文件
<cwd>/.dsh/memory/
MEMORY.md # 项目索引
YYYY-MM-DD.md # 每日记忆(只追加)
<topic>.md # 项目主题文件
告诉 agent 一句值得记住的话,或交给空闲自动提取——隔一个会话再查记忆根目录。
配置
通过 DSH bundle 条目部署(见 cordis.patch.yml 与 package.json 的 exports):
| 键 | 默认值 | 含义 |
|---|---|---|
enableEntryInjection |
true |
每会话前置注入一次「如何保存 + 索引」指令块。 |
enableRelevance |
true |
每步按 query 追加相关主题文件(data-role=memory)。 |
enableExtraction |
true |
空闲时 LLM 自动提取。 |
maxRelevant |
5 |
每步最多注入的文件数(1–20)。 |
relevanceTopK |
8 |
LLM 选择器最多从多少个候选里挑选(1–40)。 |
relevanceBudgetChars |
2000 |
喂给相关性/选择器的单主题字符上限(≥200)。 |
extractionDebounceMs |
60000 |
空闲防抖时长后再执行一次提取。 |
extractionLookback |
40 |
单次提取扫描的最近事件数(5–200)。 |
llm.provider |
"" |
提取/相关性排序的 provider(留空 → 纯关键词)。 |
llm.model |
"" |
提取/相关性排序的 model。 |
llm.maxTokens |
1024 |
LLM 调用的补全 token 上限。 |
示例条目:
- id: memory
name: '@deepseek-ai/dsh-plugin-memory'
config:
enableEntryInjection: true
enableRelevance: true
enableExtraction: true
maxRelevant: 5
relevanceTopK: 8
relevanceBudgetChars: 2000
extractionDebounceMs: 60000
extractionLookback: 40
llm:
provider: deepseek # 示例:填你的路由
model: deepseek-chat
maxTokens: 1024
许可证
MIT —— 见 LICENSE。
链接
同类插件
vectorize-io/hindsight#coding-agents★ 45535
Hindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
volcengine/OpenViking#examples/dsh-memory-plugin★ 39213
面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`viking://` URI 防护,以及对接 OpenViking 服务端的 recall/write 记忆工具。
agentscope-ai/ReMe#dsh★ 3551
将 DeepSeek Harness 接入 ReMe 本地优先、自进化的个人知识库:自动把已完成的主 Agent 对话沉淀为用户掌控的 Markdown 记忆,通过 reme_search 结合 BM25、可选向量检索和 wikilink 展开搜索对话与资料,并按日整理长期记忆。
zilliztech/memsearch#MemSearch★ 2714
供 DSH 与其他编程 Agent 共享的 Markdown 记忆,支持自动捕获、步骤前上下文注入、搜索召回,以及通过审阅面板实现 memory-to-skill 自进化。
vshulcz/deja-vu#extensions/dsh★ 1131
读取本机上其他三十三个编程智能体已经写下的会话文件——Claude Code、Codex、Cursor、VS Code Copilot Chat、opencode、OpenClaw、Hermes、Kimi、Cline、Zed 等,包括安装之前的历史:提供 deja_recall、deja_session、deja_blame、deja_fix、deja_how、deja_remember 六个工具与 /deja 命令,并可选地把召回结果加入运行时上下文。本地 BM25 索引,不用大模型,不用向量嵌入,不联网(dsh plugin --profile web add dsh-deja)。
adoresever/graph-memory★ 636
DeepSeek Harness 的可追溯、可检索跨会话记忆:把对话知识沉淀为带类型的图节点(任务/技能/事件)与关系边。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。