潮声 · dsh-tide-whisper
让 DSH 里的 AI 不定期自己开口:不是每天 9 点准时问早安,而是掷骰子——40 分钟后、两小时后、或者这次干脆不说话。
它和「定时提醒」差在哪
内置的 schedule_create 是「我定一个点,到点必须唤醒」:cron 也好、after_seconds 也好,每次到点都真的叫醒模型一次,就算它什么都不想说,token 也已经花掉了。
潮声是反过来做的:
- 插件自己在本地掷骰子,决定下一次什么时候(默认 40~200 分钟里随便抽一个);
- 到点后先裁决要不要真的开口(活跃时段、一天上限、冷却、你刚说过话、以及 40% 的骰子);
- 只有决定开口时才去向宿主的
schedule 服务塞一条提醒,把会话唤醒一次。
所以「沉默」是零成本的:不唤醒、不推理、不花钱。骰子掷空了就当没发生过,重新排下一次。
v0.2 改了什么
v0.1 是到点往会话里塞一段写死的话——第一次还新鲜,第三次就是复读,谁听都是一股人机味。
v0.2 改成注入处境 + 方向 + 约束,让话由当下的模型自己说:
- 处境:现在几点、周几、上次自己开口是多久前、你多久没出声、上一条有没有被你接上;
- 方向:从一组「往哪儿说」里抽一个(说说手上正忙的事 / 报个自己的状态 / 对刚聊过的事表个态……),只给方向,不给成品句,并且避开最近用过的方向;
- 约束:只能拿真实存在的东西开口、不许编造具体事件和数字、别问「在干嘛」、别提定时和插件、一两句就停。
另外多了一件真人的习惯:一个回合有概率拆成两段(默认 35%),第一句说完隔 8~40 秒再补一句;这种回合结束后,下一次开口会被推得更远。连着两次没被你接上时,下次的注入里会提醒「可以更短、更无所谓一点」。
原来的「提示词」框换成了「语气要求」,只补语气,不再决定说什么。
装上
dsh plugin --profile desktop add github:MingHuanYue/dsh-tide-whisper
本地开发时用路径:
dsh plugin --profile desktop add link:D:/DSH插件/projects/dsh-tide-whisper
装完重启 DSH(模块是启动时加载的)。之后在「设置」里多出一页「潮声」。
设置页能改什么
| 项 | 默认 | 说明 |
|---|
| 启用 | 关 | 默认不打扰你,自己去打开 |
| 最短 / 最长间隔 | 40 / 200 分钟 | 均匀分布里抽一个,落在中间的概率最大 |
| 一天最多 | 5 次 | 到了就等明天 |
| 开口概率 | 0.4 | 到点后掷骰子,低于它就这次不说 |
| 活跃时段 | 9 → 25 | 25 表示次日凌晨 1 点,支持跨午夜;区间外一律安静 |
| 冷却 | 25 分钟 | 刚开口过就不再连着说 |
| 你刚说过话 | 20 分钟 | 你正在跟我说话时不让它插嘴 |
| 语气要求 | 空 | 只补语气(「别用感叹号」之类);说什么由注入的处境决定 |
| 拆两段的概率 | 35% | 像真人连发两条;段间 8~40 秒 |
| 多段后冷却倍率 | 1.6 | 一个两段的回合结束后,下次开口被推得更远 |
我(模型)能用的工具
| 工具 | 作用 |
|---|
whisper_status | 现在开没开、下次大概什么时候、今天已经开口几次 |
whisper_set | 改参数(开关、间隔、概率、时段、上限) |
whisper_now | 不等骰子,立刻叫醒一次(测试用) |
数据与隐私
- 配置、状态、日志都在
$DSH_HOME/tide-whisper/:config.json、state.json、log.jsonl。
- 不联网,不发遥测,不上传任何东西。
- 日志只记「几点、哪个会话、开口还是跳过、为什么」,可以随时删掉。
- 卸载插件不会删这些文件;想清干净就把整个
tide-whisper 目录删掉。
兼容性
- DSH >=
0.1.7-rc.1(依赖宿主的 schedule 服务与 agents / webServer / timer)。
- Node >= 22。
- 需要宿主提供
schedule 服务;没有的话 whisper_now 会返回「宿主没有 schedule 服务,叫不醒」,其余功能照常。
已知限制
- 只能唤醒还活着的会话(
ctx.agents.list() 里能看到的)。DSH 关掉以后它不会自己把程序拉起来。
- 记账只保留最近 30 个会话,老的会被清掉重排。
- 不是「每隔 N 分钟检查一次」那种轮询式的主动消息:沉默期完全不投递。
- 第二段是靠宿主进程里的定时器补发的,宿主中途退出就只剩第一句。
- 注入的是处境和约束,模型仍可能说空话——想更稳就往「语气要求」里加自己的规矩(比如「每次都要提一个具体的东西」)。
说明
「不定时自己开口」「多段连发」这类做法在同类插件里有公开讨论,本插件的代码与文案都是自己写的,没有引用别人的实现。
测试
node --test tests/core.test.mjs
纯逻辑(抽间隔、活跃时段、跨午夜、裁决、注入文本拼接、方向去重、拆段与间隔)都是可注入骰子的纯函数,19 条用例。
License
MIT © MingHuanYue