dsh-hormone: Driving 'Hormone State' via Session Events — Write System Prompt Only When Boundaries Are Crossed

前言

在 DSH(DeepSeek Harness)里,助手的行为通常只靠静态 system prompt 和当轮上下文。会话里工具连续失败、长时间没人说话、跨天又接着干活——这些事实不会自动变成模型能感知的内部状态,除非你每次手工改提示或另写一层编排。

dsh-hormone 走另一条路:维护四个随时间衰减、会互相影响的连续数值(压力、精力、爽度、无聊),由真实会话事件更新;只在某个指标越界时,才往系统提示里追加一条带 [hormone] 前缀的短句。正常范围内不注入,避免把 prompt 当成情绪弹幕。维护者为 y258dd,社区目录分类为工作流;当前 package 版本为 0.4.0,MIT 许可证。

下面介绍它是什么、怎么装、怎么观察与调参,以及使用时该注意什么。

这是什么

一句话:给 DSH 助手装一套会变的「激素」——不是给模型贴固定情绪标签,而是四个 [0, 1] 上的内部状态,按事件涨跌、按半衰期衰减,并在指标耦合下互相拉扯;注入层已跑通,门控层未做(不硬压输出长度)。插件只用 DSH 公开插件 API,不修改其他插件数据,不联网。

四个状态及主要规则(细节以仓库 README 为准):

状态 含义 典型涨跌 半衰期
cortisol 压力 工具报错、连续失败、被批评/纠正上涨;顺利收尾下降 3 小时(开心时可缩短)
energy 精力 跨天恢复;干活按 token 扣减,闲聊不扣 不走半衰期
dopamine 爽度 任务顺利收尾、被夸/被谢上涨 40 分钟
boredom 无聊 约 25 分钟无人说话开始涨 上涨半衰期 5 小时

更新公式:新值 = clamp(旧值 × 0.5^(Δt / 半衰期) + Σ增量, 0, 1)。没有衰减时状态会积到上限并「卡死」,因此衰减是设计的一部分。

核心功能

事件驱动与耦合

状态只能被事件改——插件不提供写入工具,模型不能自己调「心情」,避免退化成随意表演。

lib/events.js 里用增量与正则(如 BLAME_RE / PRAISE_RE)映射事件;判断被夸/被批评是关键词匹配,会漏判也会误判,设计上批评优先于夸奖。只处理真人用户消息(user/message 且 source.kind === 'user'),插件自身注入的内容忽略。

四个数还会互相影响,例如爽度越高同样工作量精力扣得越少(COUPLING.joyCost),压力越高扣得越多(COUPLING.stressCost);参数可在 lib/state.js 的 COUPLING 中调整,全部设为 0 则退回各算各的。

熬夜与睡眠债

00:00–07:00 仍在干活时,精力扣减会计睡眠债(默认 DEBT.ratio 为 1.3 倍),债会压低精力上限(欠满时上限约 0.6);债从记债时刻起 24 小时线性衰减。与深夜精力基线(约 0.45)配合,用来表达「熬一次夜,第二天确实虚」。

注入:越界才写、边沿触发

只有一层注入逻辑,全部正常时系统提示里一个字都不加。越界示例(阈值在 lib/render.js 的 THRESHOLD):

  • cortisol > 0.75 → 回答收短,不主动揽活
  • energy < 0.2 → 能一句说完就别铺垫
  • dopamine > 0.6 → 可以多说两句
  • boredom > 0.55 → 有点闷,可以主动扯两句

注入文本硬上限 110 字,每轮最多一条。边沿触发:越界第一轮说一次,持续越界则不再重复,直到恢复正常再次越界;若长期不恢复,静默 40 分钟(EMIT.rementionAfterSec)后才重提。

README 明确说明:未做门控(例如硬限制输出长度),也未做 memory-lite 的 emotion 字段权重。

安装与启用

插件以当前 DSH 进程权限运行,安装前建议自行查看 GitHub 仓库 源码与 MIT 许可证。

常用安装方式:

dsh plugin --profile desktop add dsh-hormone

不从 npm 安装时:

dsh plugin --profile desktop add github:y258dd/dsh-hormone

本地改代码并热重载时,可克隆后 link 安装(开发用):

git clone https://github.com/y258dd/dsh-hormone.git
cd dsh-hormone
dsh plugin --profile desktop add link:$PWD   # Windows: link:D:/path/to/dsh-hormone

或手改 ~/.dsh/profiles/desktop/package.json,将 dsh-hormone 设为 link:/path/to/dsh-hormone 并加入 bundles。装完需重启 DSH 生效。

卸载:

dsh plugin --profile desktop remove dsh-hormone

典型用法:观察、调试与调参

看状态文件

状态落在 DSH 配置目录下,默认路径为 ~/.dsh/hormone/state.json(Windows 为 C:\Users\<你>\.dsh\hormone\state.json)。纯 JSON,history 保留最近 400 次变化及 why(如 tool-error、turn-done、praised 等)。删除该文件即回到初始状态,无副作用。

环境变量

先观察、暂不影响回答:

export DSH_HORMONE_MODE=observe

核对事件结构时:

export DSH_HORMONE_DEBUG=1

调试输出追加到 %DSH_HOME%\hormone\events.jsonl。

调参入口

改 lib/state.js、lib/events.js、lib/render.js 顶部常量后重启。例如 ENERGY.dailyBudget 默认约 1300 万 token/日预算(作者按 12 天用量标定);觉得掉精力太快可调大。设计取舍与事件字段见仓库内 docs/DESIGN.md。

仓库内测试(Node 20+,无第三方依赖):

npm test
npm run test:smoke

适用场景与注意

适合希望在不改编排主流程的前提下,让助手对「失败、夸奖、闲置、熬夜干活」等会话事实有连续内部状态,并仅在异常时用一句 system 提示微调语气的 DSH 开发者。

务必注意:注入只是告知状态,不是替模型决定能说多少;关键词误判需自行改正则。turn 边界依赖 assistant/message 的 turn 号变化,最后一轮在插件卸载时兜底结算。DSH 社区插件目录(skillhub 条目)为独立站点,与 DeepSeek / 幻方无官方从属关系;生态理念是「一切皆插件」,本插件是工作流类社区贡献之一。

结尾

dsh-hormone 用可衰减、可耦合的四维数值把会话事件翻译成「只在越界时出现」的 system 提示补充,并支持 observe 模式与 JSON 状态验收。目录页:https://www.skillhub.cn/plugins/y258dd/dsh-hormone;源码与完整参数表:https://github.com/y258dd/dsh-hormone。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye