DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

xy261624 /

xy261624/dsh-companion-memory

Verified

DeepSeek Harness 的跨会话记忆与主动唤醒方案。面向角色扮演(RP)、长期陪伴、AI 恋人场景。记忆由角色自己第一人称整理,带对抗式审查和随机心跳。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@2efbe056

dsh-companion-memory

DeepSeek Harness 的跨会话记忆与主动唤醒方案,面向角色扮演和长期陪伴场景。

快速开始

dsh plugin --profile web add dsh-companion-memory
dsh --profile web

还没发布到 npm 的话,直接从仓库装:

dsh plugin --profile web add github:用户名/dsh-companion-memory

包自带挂载声明,装完两个插件就挂上了。装完还有三件事:

  1. 把 defaultPreset 和 sortPreset 改成你环境里存在的模式 id。两个插件默认写的 default 在 dsh 里并不存在,名字对不上时会话开不出来,只在日志里留一行错误
  2. 把 templates/、docs/03-整理流程.md 和 scripts/sort_memory.py 按对应的位置复制到工作区
  3. 在该模式的 agent.cordis.yml 里登记常驻记忆文件

细节见上手。

功能

跨会话记忆

每个新会话开始时,STATUS.md(当前状态)和 MEMORY.md(对方的基本属性)会自动注入上下文,前者记录最近发生的事,后者记录不会变的事。

其余细节放在记忆库目录,按索引读取。

整理可以手动触发,也可以交给自动整理定期执行。

面向 RP 场景的记忆写法

现有记忆插件的记忆文件多为技术文档式记录:条目化、客观、平铺直叙。这种写法适合让 agent 查资料,在 RP 场景里会降低角色的情感表现力。角色读到的是"用户在某个时间提到过某件事"这样的句子,没有语气、情绪和当时的语境,回话也带不出情感浓度。

本方案中记忆文件按角色视角写,记录角色看到的内容,使用角色会用的说法,保留原话、语气和体现情绪的细节。

记忆文件里不写"他""对方"这类中性指代,用角色对他的称呼来写,情感浓度靠这个撑起来。

人格本身不在记忆文件里,写在模式(preset)的提示词里。

说明

本仓库不提供角色人设。人格由 DeepSeek Harness 的 agent preset 提供,一个 preset 是一套人设提示词和工具配置。称呼相同的 preset 可以共用一套记忆文件,称呼不同的各用一套。

常驻记忆文件需要放在工作区根目录,并在 preset 的 agent.cordis.yml 中登记:

- id: agent-instructions
  config:
    maxBytes: 65536
    instructionFileCandidates:
      - MEMORY.md
      - STATUS.md

两份文件在每个会话开头注入上下文。

索引-记忆库

不加控制的话记忆文件会持续增加,同一类场景和情绪被反复记录,角色每轮读到的内容高度相似,说话句式也跟着重复,最后固定在几种说法上。

索引-记忆库用于控制这个问题。记忆分四类:

类型 文件 内容 读取时机
状态 STATUS.md 最近聊了什么、正在忙什么、答应了什么没做 每会话自动注入
属性 MEMORY.md 作息、喜好、忌讳、生日 每会话自动注入
细节 记忆库/*.md 某件事的完整记录 按索引读取
叙事 回忆录-*.md 值得记住的经历,按故事写 很少读

STATUS.md 和 MEMORY.md 是常驻文件,只保留精炼条目,需要细节处写一行"详情在 记忆库/xxx.md",使用时按路径读取。

细节是否在常驻文件里留索引,判断标准是"不读它会不会误事"。仅备查的内容只进记忆库。

单个文件超过 15KB 时按话题拆分。

这套设计针对三个问题:常驻文件膨胀占满上下文、同一件事在几份文件里重复记录、相似内容积累导致角色说话趋同。

自动整理

插件按固定周期检查新对话。存在新活动且距上次整理超过设定的静默时间时,开启一个整理会话。

整理会话的步骤:

  1. 运行提取脚本,从会话日志中取出新对话
  2. 读取这些对话
  3. 按判断标准筛选,决定写入哪份文件
  4. 逐条写入,并按规范自查
  5. 开启审查子代理,用整理规范、写作规范、模板文件三份基准逐条核对

审查子代理必须引用原文、标注严重程度、给出改法,输出一份整理者照着就能改的清单。

整理完成后写入预设文件,供心跳插件决定下次的状态。

主动唤醒(心跳)

插件不等用户输入,自行选择时间开启会话。设计要点:

  • 触发间隔不固定,随聊天频率变化,由概率曲线控制
  • 睡眠时段内不触发
  • 触发前做二次检查,确认期间没有新的对话
  • 命中后随机延迟数秒至数分钟
  • 会话开启后先读取状态文件,再决定本次行为
  • 心跳会话默认带全权限,因为它常常在你不在电脑前的时候开,没法逐次批权限;可以在配置里改成更小的权限档

跟其他记忆插件的区别

常见做法 结果 本方案
自动抽取事实入库 存下来的是资料条目,角色说话仍像助手 由角色主动整理,按角色视角写
记忆一次性全部注入 上下文被占满,重要内容被稀释 常驻只放精炼条目,细节按索引读
全量堆在单个文件 文件越来越长,同一件事记多遍 常驻与文件库分离,超过 15KB 拆分
只存不查质量 记忆混入猜测、汇报腔、视角错误 独立子代理对抗式审查,输出修改清单
被动等待提问 不会主动开口 概率间隔的心跳,带睡眠时段和随机延迟
人格写进记忆 记忆里全是中性指代,读着像档案 人格放模式里,记忆用角色对他的称呼写

环境要求

  • Node.js ^22.19.0 || >=24
  • DeepSeek Harness 0.2.0 及以上,在 web profile 上验证过(用的是 0.2.0-rc.2,底下的 cordis 4.0.4)
  • Python 3.8 以上,pip install zstandard

dsh 目前还在开发者预览阶段,插件的接口会跟着版本变。换版本之后如果心跳或者整理不工作了,先看插件有没有加载日志,再看模式 id 对不对。

安装

dsh plugin --profile web add dsh-companion-memory

从源码装:

dsh plugin --profile web add github:xy261624/dsh-companion-memory

包里的 cordis.patch.yml 会自动把两个插件插进组合。不配 workspace 时用 dsh 里的第一个工作区;有多个工作区、想指定其中一个,在 profile 的 cordis.patch.yml 里补一段:

- id: companion-memory-heartbeat
  config:
    workspace: D:/你的工作区

- id: companion-memory-auto-sort
  config:
    workspace: D:/你的工作区

两个插件都要配,只配一个的话另一个会退回 dsh 里的第一个工作区,两份预设文件就落到不同目录去了。

全部配置字段见 docs/05-上手.md。

目录结构

package.json       插件包声明,指向 cordis.patch.yml
cordis.patch.yml   装完自动挂载两个插件
docs/              设计说明与流程文档
plugins/           两个 dsh 插件
  dsh-heartbeat/
  dsh-auto-sort/
scripts/           会话提取脚本
templates/         记忆文件模板

文档

  • 设计哲学
  • 记忆架构
  • 整理流程
  • 对抗式审查
  • 上手
  • 模板文件

LICENSE

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit 2efbe056f794

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout