前言¶
DSH(DeepSeek Harness)的理念是「一切皆插件」,开发者可以通过插件扩展宿主的能力。很多插件关注的是「记住了什么」,比如对话历史、知识库检索,但智能体的行为不仅取决于它「说了什么」,还取决于它「状态如何」——今天累不累、情绪好不好、刚被用户回应过没有。状态是活的,却往往没人记。
迭代记忆插件解决的是这个问题:给智能体一份自己的状态账本,让状态能自己变化,也能反过来决定它要不要开口。它不是记事情,而是记「它自己」。
插件定位¶
- 名称:dsh-iter-memory
- 维护者:MingHuanYue
- 分类:记忆
- 星标:1
这是一个 DSH 插件,负责管理智能体的「状态曲线」和「主动开口」行为。它不联网、不发遥测,所有数据存在本地 $DSH_HOME/iter-memory/。
核心功能¶
插件维护两条核心线:
- 潮位:一条会自己退回基线的状态曲线(0 很沉 · 0.5 平常 · 1 很舒展)。你跟它说话时潮位抬一点,它开了口你半天没应它掉一点,没人管它也会按半衰期慢慢退回基线。
- 开口:不定时地由它自己说一句。到点先看潮位——状态低就更容易忍住不说;真说了,话里也带着此刻的状态。
合起来才叫迭代:「我说不说由状态决定,状态又被「说了有没有人应」改」。分开做,这两半都是死的。
插件每 15 秒 tick 一次,只在有活着的会话时工作;默认只在最近用的那一个对话里开口(onlyActiveSession),别的会话不会同时冒出来。
安装与启用¶
GitHub 安装(推荐):
dsh plugin --profile desktop add github:MingHuanYue/dsh-iter-memory
本地开发安装:
dsh plugin --profile desktop add "link:D:/DSH插件/projects/dsh-iter-memory"
安装完需要重启一次宿主(link 安装不会热重载已缓存的模块)。之后在「设置 → 迭代记忆」里打开开关。
从 dsh-tide-whisper(潮声)升上来的不用担心:第一次启动会自动把 $DSH_HOME/tide-whisper/ 的 config.json 和 state.json 搬过来,你原来设的间隔、上限、活跃时段都还在。旧的目录不会删。
典型用法¶
状态曲线¶
在设置页可以看到「此刻」面板:
- 当前潮位
- 最近一条原因
- 一张 24 小时曲线(实线是潮位,虚线是基线)
主动开口¶
到点后,插件会先做裁决:不在活跃时段、今天次数满了、刚说过、你刚说过话 → 直接推后,一声不响,零 token。剩下的才掷骰子,而骰子会被潮位改:状态低就更可能忍住。
真开口时,注入的不是一句写死的话,而是「处境 + 此刻的状态 + 一个方向 + 几条约束」,具体说什么由当下的模型自己决定。一个回合有概率拆成两段(像真人连发两条),段间隔几秒到几十秒,之后冷却拉长。
工具¶
iter_status
看状态:开没开、下次大概什么时候、今天第几次、此刻潮位。
iter_feel
记一笔此刻的状态(level 0~1 + why)。这是唯一「我自己改自己」的入口。
iter_set
改参数(只改传了的字段)。
iter_now
不等骰子,立刻开口一次(测试用)。
参数¶
| 键 | 默认 | 说明 |
|---|---|---|
enabled |
false |
总开关。关着的时候工具也会卸掉,不占任何东西。 |
minMinutes / maxMinutes |
40 / 200 | 两次开口之间的随机区间。 |
speakProb |
0.4 | 到点后开口的基准概率。 |
activeStart / activeEnd |
9 / 25 | 活跃时段,允许 >24 表示跨到次日。 |
maxPerDay |
5 | 一天最多主动开口几次。 |
cooldownMinutes |
25 | 开口后的最小冷却。 |
userCooldownMinutes |
20 | 你刚说过话之后,我先安静这么久。 |
multiSegmentProb |
0.35 | 一次开口拆成两段的概率。 |
gapMinSeconds / gapMaxSeconds |
8 / 40 | 两段之间的间隔。 |
roundCooldownMult |
1.6 | 多段回合之后冷却乘多少。 |
moodBaseline |
0.5 | 潮位的基线,最终都会退回这里。 |
moodHalfLifeMinutes |
90 | 偏离基线后多久衰减一半。 |
moodReplyBoost |
0.07 | 你跟我说话时潮位抬多少。 |
moodIgnoredDrop |
0.06 | 我开了口你一直没应时掉多少(只掉一次)。 |
moodSpeakInfluence |
0.5 | 潮位对开口概率的影响强度,0 = 完全不影响。 |
moodInWhisper |
true |
开口时是否把当前状态注入进去。 |
style |
空 | 语气要求,拼进注入文本。 |
onlyActiveSession |
true |
只在最近用过的那个对话里开口。别的会话不吭声,只把各自的下一次往后挪;你换到哪个对话,哪个接手。 |
数据与隐私¶
- 全部存在
$DSH_HOME/iter-memory/:config.json、state.json、log.jsonl。 - 不联网、不发遥测、不调用任何模型接口。
- 轨迹(
log.jsonl)你能直接打开看:每次忍住的原因、每次开口的方向、每次潮位变动都在里面。 - 卸载插件不会删这些数据。
兼容性与限制¶
- DSH
>= 0.1.7-rc.1,Node>= 22。 - 状态按会话分桶;切换会话、重启宿主都不丢。只保留最近 30 个会话的记账。
- 依赖宿主内置的
schedule服务投递唤醒(和内置定时提醒同一套),所以窗口关着也叫得醒。宿主没有这个服务时会在日志里记一条deliver-failed,不会崩。 - 只在有活着的会话时工作:会话全关了就排不上,因为你不在,说了也没人看。
- 潮位是按会话记的,不是全局的:不同会话各有各的曲线。
- 曲线只留最近 24 小时、最多 72 个点(画图够用)。
适用场景与注意¶
这个插件适合需要「有状态」的智能体,比如伴侣型、陪伴型、长期对话场景。它让智能体不只是被动回应,还能根据自身状态决定要不要主动说话,以及说什么。
插件以当前 DSH 进程权限运行,安装前建议查看源码与许可证(MIT)。所有数据存储在本地,不涉及联网与遥测,适合注重隐私的部署方式。
短结尾¶
迭代记忆插件通过「潮位」和「开口」两条线,让智能体有了自己的状态账本,并能根据状态决定是否主动说话。它不联网、不发遥测,所有数据存在本地,适合长期对话与隐私敏感场景。
- 目录页:https://www.skillhub.cn/plugins/MingHuanYue/dsh-iter-memory
- GitHub:https://github.com/MingHuanYue/dsh-iter-memory