dsh-long-term-memory:DeepSeek Harness 的确定性分层长期记忆

前言

DeepSeek Harness (DSH) 的核心哲学是「一切皆插件」。在开发基于 DSH 的智能体时,跨会话的持久化记忆是一个常见痛点。传统的向量检索方案通常依赖外部数据库,或者需要额外的模型调用,这增加了系统的复杂度和延迟。

dsh-long-term-memory 插件旨在解决这个问题。它为 DSH 提供了分层的、确定性的长期记忆能力。它使用 JSONL 文件存储数据,采用 CJK 感知的 BM25 算法进行确定性召回,并在每次请求组装前自动注入记忆摘要。该插件不依赖向量库、不需要额外的模型调用、也不需要自建 SQLite 或外部服务器,完全基于 DSH 已有的接缝进行组合。

核心功能

本插件提供以下核心能力:

  1. 三库分层存储:将记忆分为三个作用域,各占一个 JSONL 文件。
    • user:用户画像(姓名、角色、偏好)。
    • global:跨项目的事实与决策。
    • workspace:项目专属的记忆。
  2. 确定性召回:使用 BM25 算法检索。中文按汉字 bigram 匹配,日文韩文同理,英文按单词匹配。结果可解释、可重放。
  3. 自动注入与校准:每次组装请求前,通过 systemPrompt.context() 注入记忆摘要。注入块被 <long_term_memory> 标签包裹,明确声明来源与不确定性,指引模型判断相关性并忽略无关内容。
  4. 安全机制:
    • 威胁扫描:对写入内容和注入快照进行轻量模式检测,命中则拒绝写入或替换为占位符。
    • 写入护栏:采用写临时文件 + rename 的原子方式,配合跨进程文件锁,防止数据损坏。
  5. 纠正回路:提供 memory_correct 工具,用于更正旧事实,将旧记录标记为 superseded,并在后续召回与注入中自动排除。

安装与启用

在插件目录下执行以下命令:

cd dsh-long-term-memory
dsh plugin --profile web add .

安装完成后需要重启 dsh web。

⚠️ 注意:dsh plugin add 命令曾破坏过 link: 的相对路径(导致相关插件被移出 bundles)。本插件已使用绝对路径 link:/Users/... 固化。请勿再对新插件依赖相对路径。

使用方式

插件提供两类使用入口:模型工具和斜杠命令。

模型工具

模型可以通过注册的工具读写记忆:

  • memory_write(content, scope?, tags?):写入一条记忆。scope 可选 user/global/workspace,默认 workspace。
  • memory_recall(query, scope?, limit?):BM25 检索,返回带分数的命中记录。
  • memory_list(scope?, limit?):按更新时间列出近期记忆。
  • memory_get(id):查看单条记忆。
  • memory_forget(id, scope?):按 ID 删除记忆。
  • memory_correct(claim, truth, evidence?):记录更正事实。

斜杠命令

用户可以直接在输入框使用斜杠命令(不经模型):

  • /memory list [user|global|workspace|all]:列出近期记忆。
  • /memory search <query>:BM25 检索。
  • /memory get <id>:查看单条记忆。
  • /memory forget <id>:删除单条记忆。
  • /memory export [|markdown]:导出记忆 bundle。

配置说明

通过覆盖 cordis.patch.yml 或 settings.yaml 来控制行为。以下是关键配置项:

  • 注入策略 (injectContext):
    • recent(默认):每轮注入每库最近的几条记忆。
    • full:注入全部记忆(受字符预算限制)。
    • off:关闭自动注入。
  • 标签过滤 (injectTags):在 recent 模式下,只注入带有指定标签(如 decision, constraint)的记忆,过滤琐碎条目。
  • 写入审批 (requireApprovalForWrite):可选开启,在写入前通过 DSH 的审批接缝进行人工确认。
  • 威胁扫描 (scanThreatsOnWrite):默认开启,对写入内容进行轻量威胁模式检测。
  • 字符预算 (charLimit):每个作用域的字符上限,超限时先自动压缩再拒绝。

技术细节与注意事项

  1. 同步注入:DSH 的 prompt 组装器同步调用相关函数。如果注入渲染走异步路径(返回 Promise),会导致崩溃。插件已将注入渲染全部改为同步路径(首个 assembly 前异步预热 store)。
  2. 零外部依赖:插件内部实现了 BM25 分词器和 JSONL 读写逻辑,不依赖外部向量库。
  3. 威胁扫描保守:扫描模式刻意收窄(仅检测指令覆盖/系统提示泄露/角色劫持/标记注入),避免误伤正常笔记。注入快照使用占位符而非直接删除原文,保留供用户处理。
  4. 存储路径:
    • user: $DSH_HOME/dsh-memory/user.jsonl
    • global: $DSH_HOME/dsh-memory/global.jsonl
    • workspace: <workspaceRoot>/.dsh/memory.jsonl

适用场景

适合需要在 DSH 智能体中实现跨会话记忆、用户偏好管理、历史决策追溯以及需要严格数据安全控制的场景。

  • 记忆沉淀:模型在对话中通过 memory_write 将关键信息沉淀下来。
  • 确定性召回:当模型需要查询历史约束或事实时,使用 memory_recall 获取高相关性结果。
  • 知识库管理:通过 /memory list 和标签过滤,整理项目文档或用户画像。

相关链接

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜