前言¶
DeepSeek Harness(DSH)的生态理念是「一切皆插件」,这让开发者可以按需组合功能。但在角色扮演(RP)、长期陪伴、AI 恋人这类场景里,通用记忆插件存在几个明显问题:记录方式偏技术文档,角色读起来像助手;常驻文件膨胀,上下文被占满;只存不查质量,容易混入猜测、汇报腔或视角错误。
下面介绍 dsh-companion-memory,这是一个面向 RP 场景的跨会话记忆与主动唤醒方案。记忆由角色自己以第一人称整理,内置对抗式审查和随机心跳机制。
是什么¶
这是由 xy261624 维护的 DSH 插件,分类为「记忆」。它解决的是:角色记忆文件写法不对、上下文被占满、同一件事重复记录、说话句式趋同、不会主动开口这些问题。
安装与启用¶
安装命令如下:
dsh plugin --profile web add github:xy261624/dsh-companion-memory
dsh --profile web
包自带挂载声明,装完两个插件就挂上了。装完还有三件事:
- 把
defaultPreset和sortPreset改成你环境里存在的模式 id。两个插件默认写的default在 dsh 里并不存在,名字对不上时会话开不出来,只在日志里留一行错误 - 把
templates/、docs/03-整理流程.md和scripts/sort_memory.py按对应的位置复制到工作区 - 在该模式的
agent.cordis.yml里登记常驻记忆文件
细节见上手。
跨会话记忆¶
每个新会话开始时,STATUS.md(当前状态)和 MEMORY.md(对方的基本属性)会自动注入上下文,前者记录最近发生的事,后者记录不会变的事。
其余细节放在记忆库目录,按索引读取。
整理可以手动触发,也可以交给自动整理定期执行。
面向 RP 场景的记忆写法¶
现有记忆插件的记忆文件多为技术文档式记录:条目化、客观、平铺直叙。这种写法适合让 agent 查资料,在 RP 场景里会降低角色的情感表现力。角色读到的是”用户在某个时间提到过某件事”这样的句子,没有语气、情绪和当时的语境,回话也带不出情感浓度。
本方案中记忆文件按角色视角写,记录角色看到的内容,使用角色会用的说法,保留原话、语气和体现情绪的细节。
记忆文件里不写”他”“对方”这类中性指代,用角色对他的称呼来写,情感浓度靠这个撑起来。
人格本身不在记忆文件里,写在模式(preset)的提示词里。
索引-记忆库¶
不加控制的话记忆文件会持续增加,同一类场景和情绪被反复记录,角色每轮读到的内容高度相似,说话句式也跟着重复,最后固定在几种说法上。
索引-记忆库用于控制这个问题。记忆分四类:
| 类型 | 文件 | 内容 | 读取时机 |
|---|---|---|---|
| 状态 | STATUS.md |
最近聊了什么、正在忙什么、答应了什么没做 | 每会话自动注入 |
| 属性 | MEMORY.md |
作息、喜好、忌讳、生日 | 每会话自动注入 |
| 细节 | 记忆库/*.md |
某件事的完整记录 | 按索引读取 |
| 叙事 | 回忆录-*.md |
值得记住的经历,按故事写 | 很少读 |
STATUS.md 和 MEMORY.md 是常驻文件,只保留精炼条目,需要细节处写一行”详情在 记忆库/xxx.md“,使用时按路径读取。
细节是否在常驻文件里留索引,判断标准是”不读它会不会误事”。仅备查的内容只进记忆库。
单个文件超过 15KB 时按话题拆分。
这套设计针对三个问题:常驻文件膨胀占满上下文、同一件事在几份文件里重复记录、相似内容积累导致角色说话趋同。
自动整理¶
插件按固定周期检查新对话。存在新活动且距上次整理超过设定的静默时间时,开启一个整理会话。
整理会话的步骤:
- 运行提取脚本,从会话日志中取出新对话
- 读取这些对话
- 按判断标准筛选,决定写入哪份文件
- 逐条写入,并按规范自查
- 开启审查子代理,用整理规范、写作规范、模板文件三份基准逐条核对
审查子代理必须引用原文、标注严重程度、给出改法,输出一份整理者照着就能改的清单。
整理完成后写入预设文件,供心跳插件决定下次的状态。
主动唤醒(心跳)¶
插件不等用户输入,自行选择时间开启会话。设计要点:
- 触发间隔不固定,随聊天频率变化,由概率曲线控制
- 睡眠时段内不触发
- 触发前做二次检查,确认期间没有新的对话
- 命中后随机延迟数秒至数分钟
- 会话开启后先读取状态文件,再决定本次行为
- 心跳会话默认带全权限,因为它常常在你不在电脑前的时候开,没法逐次批权限;可以在配置里改成更小的权限档
跟其他记忆插件的区别¶
| 常见做法 | 结果 | 本方案 |
|---|---|---|
| 自动抽取事实入库 | 存下来的是资料条目,角色说话仍像助手 | 由角色主动整理,按角色视角写 |
| 记忆一次性全部注入 | 上下文被占满,重要内容被稀释 | 常驻只放精炼条目,细节按索引读 |
| 全量堆在单个文件 | 文件越来越长,同一件事记多遍 | 常驻与文件库分离,超过 15KB 拆分 |
| 只存不查质量 | 记忆混入猜测、汇报腔、视角错误 | 独立子代理对抗式审查,输出修改清单 |
| 被动等待提问 | 不会主动开口 | 概率间隔的心跳,带睡眠时段和随机延迟 |
| 人格写进记忆 | 记忆里全是中性指代,读着像档案 | 人格放模式里,记忆用角色对他的称呼写 |
环境要求¶
- Node.js
^22.19.0 || >=24 - DeepSeek Harness
0.2.0及以上,在 web profile 上验证过(用的是0.2.0-rc.2,底下的 cordis4.0.4) - Python 3.8 以上,
pip install zstandard
dsh 目前还在开发者预览阶段,插件的接口会跟着版本变。换版本之后如果心跳或者整理不工作了,先看插件有没有加载日志,再看模式 id 对不对。
目录结构¶
package.json 插件包声明,指向 cordis.patch.yml
cordis.patch.yml 装完自动挂载两个插件
docs/ 设计说明与流程文档
plugins/ 两个 dsh 插件
dsh-heartbeat/
dsh-auto-sort/
scripts/ 会话提取脚本
templates/ 记忆文件模板
适用场景与注意¶
适合 RP、长期陪伴、AI 恋人这类需要角色化记忆和主动交互的场景。
插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
短结尾¶
dsh-companion-memory 通过角色视角整理、索引-记忆库、对抗式审查和随机心跳,让角色记忆更贴合人设,不会被动等待输入。更多细节见目录页与 GitHub 仓库。