dsh-memory-curve:DeepSeek Harness 四层记忆插件

前言

在 DeepSeek Harness(DSH)里跑对话智能体时,宿主会管历史与压缩,但「哪些话该长期带着、哪些只是跑腿上下文」往往仍要插件自己分层。若把整段聊天记录都塞进 system prompt,成本高且噪声大;若只留最近几轮,用户偏好和稳定事实又容易丢。社区插件 dsh-memory-curve 把 AstrBot 侧成熟的「记忆曲线」设计移植到 DSH:按重要度分层落盘,只在需要时往提示里注入短期、长期或存档片段,并保留工具与设置页做只读或受控写入。

这是什么

dsh-memory-curve 是分类为「记忆」的 DSH 插件,仓库维护者为 yutaosheng004-bit,npm 包名 dsh-memory-curve(当前资料中版本 1.1.1,MIT)。它从 AstrBot 插件 astrbot_plugin_memory_curve(作者宅家大肥鱼,v1.0.3)移植而来:核心思路不变——该记的留着,跑腿的事别留着;在 DSH 上改为通过 systemPrompt.section() 每轮注入记忆块,不覆盖宿主对话历史。

四层记忆怎么分工

下面介绍各层存什么、存在哪、何时进入模型提示(与 README 表格一致)。

层 是什么 存在哪 什么时候进提示
L1 原文窗口 l1.json,保留 l1MaxTurns × 4 条 不进提示(宿主自有历史),只给判分器当上下文
L2 短期摘要 l2.json,score ≥ 2 入,默认 24h 过期 【短期记忆】,最近 l2MaxItems 条
L3 长期事实 l3.json,score ≥ 4 且非一次性任务,每天提升一次,默认 30 天未提及过期 【长期记忆】,最多 l3MaxItems 条
L4 全量存档 archive/<YYYY-MM-DD>.jsonl 用户话里出现「之前 / 上次 / 还记得…」等召回词时按关键词回溯,最多 retrieveLimit 条

数据默认目录为 ~/.dsh/memory-curve,按 session.id 分子目录(本地会话原样;QQ 侧示例为 onebot-private-<qq> / onebot-group-<gid>)。词表与阈值(如 ONEOFF_MARKS、STABLE_MARKS、RECALL_WORDS 等)与原 AstrBot 插件一致。

与 AstrBot 版的主要差别

  1. 注入方式:原插件在 on_llm_request 里改 system_prompt 并用 L1 覆盖 contexts;DSH 版每轮用 systemPrompt.section() 现算一段注入,历史交给宿主与 compress。
  2. 判分:原插件判分失败一律 2 分;DSH 版走 ctx.get('llm').stream(),模型不可用或输出异常时退回本地启发式(可识别「记住 / 生日 / 不吃 / 习惯」等稳定事实并给 4–5 分)。可通过 enableJudge: false 关闭模型判分,仅用启发式。
  3. 管理入口:原插件为 admin 指令「记忆」;DSH 版提供五个工具:memory_curve_list、search、add、forget、prune。群聊默认只读;本地会话与私聊可改(allowGroupEdit 控制群聊是否允许改记忆)。

安装与启用

官方 README 给出的安装方式是在 npm 安装包,并写入 profile:

npm i dsh-memory-curve

装完后把包名加入 profile 的 dsh.profile.bundles,或使用仓库自带的脚本做 link 本地开发(改代码不必反复重装):

node scripts/patch-profile.mjs            # 幂等,可先加 --dry 看
node scripts/patch-profile.mjs --profile <profile 目录>

脚本会在 dependencies 增加 link: 条目,并在 dsh.profile.bundles 注册插件名;Windows 下需手工建立 junction 指向本地插件目录(README 中有 PowerShell 示例)。完成后重启一次 DeepSeek Harness。是否成功装配可看 <dataDir>\.boot.json(其中记录 apply 及 llm / systemPrompt / tools 等服务是否在场)。

运行环境要求 Node >= 22(见 package.json 的 engines)。

配置

在 profile 的 cordis.patch.yml 顶层用同 id 覆盖插件配置,例如:

- id: dsh-memory-curve
  config:
    l1MaxTurns: 10
    l2ExpireHours: 24
    l2MaxItems: 10
    l3ExpireDays: 30
    l3MaxItems: 20
    retrieveLimit: 3
    archiveDays: 7
    enableJudge: true          # 关掉则纯本地启发式,不调用模型
    judgeModel: ''             # 'provider/model',空则用当前默认模型
    maxInjectChars: 1800       # 注入块字符上限
    memoryBias: ''             # 额外备注,拼在记忆块末尾
    toolsEnabled: true
    allowGroupEdit: false      # 群聊是否允许改记忆
    dataDir: ''                # 默认 ~/.dsh/memory-curve

设置页与 HTTP 面板

浏览器端通过 client.js 注册 设置 → 记忆曲线:左侧会话列表(长期 / 短期 / 原文条数、最后更新时间),右侧条目列表(长期在前、短期在后,含序号、分数、类型、时间)。支持手动添加条目(直接进 L3,类型 manual,分数 5/4/3 可选)、按序号删除、一键清理一次性任务;搜索在「条目」页为本地筛选,「旧对话」页可翻 archive 原文。

宿主侧 API 前缀为 /api/memory-curve(含 /state、/memory、/search、/add、/forget、/prune、/ping),仅接受回环地址,外站请求返回 403;Origin: null(如 file:// 外壳)会放行以便页面 fetch。写入走同一套 MemoryCurve 逻辑,与工具调用一致。

若页面提示接口不通,可按 README 排查:~/.dsh/memory-curve/.boot-web.json 的 stage、~/.dsh/memory-curve/panel.log 是否有请求记录,以及 curl http://127.0.0.1:<GUI 端口>/api/memory-curve/ping 是否返回 JSON。配置项在面板中为只读,修改仍须编辑 profile 的 cordis.patch.yml。

典型用法与自测

日常对话中,插件会在每轮对用户消息判分(若开启 enableJudge),将合适内容写入 L2/L3,并在 system prompt 中注入【短期记忆】【长期记忆】;当用户话语触发召回词时,从 L4 存档检索补充。模型也可通过上述五个 memory 工具在允许的场景下列表、搜索、增删与 prune。

仓库提供的自测命令如下:

npm test                        # 逻辑 + 宿主仿真 + 设置页接口 + 真 HTTP 端到端
node test/smoke.mjs             # 词表 / 配置钳位 / 落盘 / 四层 / 判分降级
node test/host-sim.mjs          # 假 ctx 跑 apply,看注入 / 工具 / 路由
node test/panel.mjs             # 模拟 /api/memory-curve/*,含跨站与坏 JSON
node test/panel-live.mjs        # 真 HTTP:Origin: null / 预检 / 外站 403 / 日志
node scripts/verify-wiring.mjs  # patch 只 insert 一次、link 解析、client 与清单在位

适用场景与注意

适合需要在 DSH 中长期保留用户偏好、稳定事实,又不想用插件去抢宿主历史管理的场景。已知取舍包括:不改写宿主历史;开启判分时每轮额外一次 LLM 调用(maxTokens: 200、temperature: 0);从助手回复中抽取「我答应过:…」类承诺句存在精度限制。

插件以 当前 DSH 进程权限 读写 dataDir 与调用模型判分,安装前请自行审阅 GitHub 源码 与 MIT 许可证。DSH 社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

链接

  • 目录页:https://www.skillhub.cn/plugins/yutaosheng004-bit/dsh-memory-curve
  • GitHub:https://github.com/yutaosheng004-bit/dsh-memory-curve

经过上面的步骤,你可以在 Harness 里用分层记忆减轻 prompt 噪声,同时在需要时用存档与工具做可控回溯与管理。

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

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

小夜