前言¶
在 DSH(DeepSeek Harness)里跑智能体时,对话往往停在「用户发一句、模型回一句」。若希望助手在合适时机自己开口——而不是固定 cron 推同一句文案——需要在宿主进程里做定时检查、安静判断、投递会话或降级通知,还要避免把池子里的句子原样复读出去。社区维护者 S3K926 发布的 dsh-selfwake 就是面向这一需求的 DSH 插件:每隔一段时间检查「五道闸」,全部通过后再开口,优先投进当前活跃会话,投不进则发系统通知并写日志。插件在 GitHub 开源(MIT),SkillHub 分类为工作流。
这是什么¶
dsh-selfwake 是 DSH 插件,核心能力是到点主动开口。维护者为 S3K926,当前 package.json 版本为 0.1.1,要求 Node.js ≥ 22、DSH ≥ 0.1.7-rc.2。
默认自 2026-09-30 起使用生成模式(generateText: true):到点后不把开口池里的句子直接发出,而是向会话注入一段「状态 + 约束」,由模型当场生成一两句话。若设为 generateText: false,则退回从池子抽一条原文发送的老行为。
五道闸与加权间隔¶
插件按 tickSeconds(默认 60)周期性检查。只有下面五道闸全部通过才会触发开口;任一不通过只记日志说明原因。
| 闸 | 配置键 | 默认 | 判据 |
|---|---|---|---|
| 间隔 | intervalMinutes ± jitterMinutes,并可按未回话加权 |
20 ± 8 | 距上次开口 ≥ 本次摇出的间隔(可复现随机) |
| 安静 | minIdleMinutes |
20 | 使用者安静达到设定分钟数(依据最后一条真实 user/message 事件时间,而非会话文件 mtime) |
| 未回上限 | maxUnanswered |
3 | 连续没回话次数低于上限(2026-10-21 起默认由 7 调整为 3) |
| 静默时段 | quietStartHour / quietEndHour |
0 / 7 | 当前不在静默时段内 |
| 每日上限 | dailyMax |
12 | 当日开口次数未达上限(0 表示不限) |
沉默越久,开口节奏会放慢。加权公式为:
加权间隔 = intervalMinutes × (1 + 连续没被回的次数 × backoffPerUnanswered)(封顶 6 倍)
backoffPerUnanswered 默认为 0.5;设为 0 则退回固定间隔。
生成模式与「一个回合」¶
生成模式下,注入文本会带上当前时间、上次开口间隔、用户沉默情况、上次主动说的方向是否被接等信息,并附带五条硬约束(例如不许编造未见事件、不提自唤醒/插件、不要连环追问等)。开口池文件(poolFile)在生成模式下主要提供角度参考,随机挑一条塞进注入文本,而不是照抄发出。
自 2026-09-30 起,一次开口可以拆成一个回合:2~4 条独立短注入,每条各生成一句,段间间隔 3~15 秒随机;回合结束后冷却时间 ×2。实现上采用分条注入,不依赖从会话回读 assistant 全文再切段(README 中记录了回读不全的实测问题)。
投递顺序是:优先直接投进当前活跃会话;若窗口未开、无法投递,则在 notify: true 时走 notifyScript 发系统通知,并始终写一行日志。
开口池与前端¶
poolFile 指向纯文本文件,一行一条,# 开头为注释;缺失或读失败时使用内置默认池。抽条时会尽量避开上一次抽到的内容。
插件包含 client.js(dsh.client.platform: web),用于按文本前缀识别自唤醒注入的展示方式;README 提醒改宿主侧前缀时需与 MARKERS 保持一致。
安装与启用¶
将插件目录放入 DSH 插件源目录后执行(路径换成你本机实际位置):
dsh plugin --profile web add /path/to/dsh-selfwake
修改配置后需要重启 DSH 才会重新装载。
配置要点¶
除上文五道闸相关键外,常用项包括:
| 键 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
generateText |
true |
生成模式开关 |
replyWindowMinutes |
10 |
开口后多久内有用户动静算「接了」 |
notify |
true |
投不进会话时是否通知 |
notifyScript |
'' |
通知脚本路径;调用约定见 README(示例为 PowerShell,其他平台需自写等价脚本) |
stateDir |
$DSH_HOME/selfwake 或 ~/.dsh/selfwake |
状态与日志 |
sessionsRoot |
如 $DSH_HOME/sessions |
查找最近活跃会话 |
device |
【PC】 |
日志与通知中的设备标注 |
家目录解析顺序为 $DSH_HOME → ~/.dsh,便于便携或多实例部署。
自检与限制¶
本地可运行:
node index.js --selftest
README 如实列出的限制包括:电脑需开机且 DSH 进程在跑;活跃窗口关闭时无法投进会话,只能通知;插件以当前 DSH 进程权限运行,安装前宜自行审阅源码与 MIT 许可证。
设计参考了社区内 proactive-nudge、ProjectKaren、revive-companion 等实现与 yuralume 的复盘文章(README 中仅说明设计借鉴,未声称代码拷贝)。
链接¶
- SkillHub 目录页:https://www.skillhub.cn/plugins/S3K926/dsh-selfwake
- GitHub 仓库:https://github.com/S3K926/dsh-selfwake
DSH 生态强调「一切皆插件」;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系。若你需要在 Harness 里让助手在合适沉默窗口内主动说话、又希望内容由模型当场生成而非固定文案复读,可按上述步骤安装 dsh-selfwake 并按五道闸与 generateText 调参。