dsh-fish-mood:为 DSH Agent 提供会随时间演化的情绪状态

前言

在 DeepSeek Harness(DSH)里给 agent 加「人设」,常见做法是在系统提示里写死性格与说话方式。对话一多,语气容易千篇一律;同一句用户话,在陌生群和熟人私聊里也很难自然区分。若还要体现「刚才被怼了所以现在短一点」「半夜会累、空闲时会走神」,纯静态 prompt 很难维护,也缺少和真实时间、关系绑定的状态。

下面介绍社区插件 dsh-fish-mood(维护者 ChencLi819,分类:趣味换装)。它在 DSH 侧用评价引擎与状态机维护情绪与关系账本,以提示词段注入当前行为约束,并注册 mood_now、mood_feel、mood_diary 三个工具;插件只改变表达方式,不改变事实与结论,状态不依赖模型自述。

这是什么

dsh-fish-mood 是 MIT 许可的 DSH 插件(npm 包名 dsh-fish-mood,当前版本 0.1.0)。核心能力包括:36 种情绪(各带半衰期与掩饰能力)、18 维评价推导、心情底色随作息回归、按群与人单独记账关系暖度、心跳周期内的空闲小事与反刍等;检测到严重负面表达时会走危机旁路,优先注入干预提示。

仓库与目录:

  • GitHub:https://github.com/ChencLi819/dsh-fish-mood
  • SkillHub 目录页:https://www.skillhub.cn/plugins/ChencLi819/dsh-fish-mood

核心功能

情绪与评价

能力 说明
情绪目录 36 种情绪分 10 个家族;每种含半衰期、掩饰能力、评价签名、语气规则与行为倾向
评价引擎 18 个评价维度与情绪签名比对;同一句在陌生人与熟人处可得到不同结果
时间演化 双指数衰减;强情绪可「续命」至多 3 次;底色按作息回归基线
关系记账 按会话与个人累计暖度、次数与备注,影响后续情绪判定
空闲行为 心跳周期内产生 18 类小事、反刍、心情修复与深夜复盘
状态注入 静态规则段与实时状态段分别注入系统提示词,静态段字节不变以利于提示缓存
主动记录 模型可通过 mood_feel 记录情绪,受配额、冷却与饱和限制

注册工具

插件声明 inject: ['tools'],在宿主提供 tools 时注册三个工具,输出均为 { text: string }。

  1. mood_now:查询当前情绪;action 可为 now 或 diag(排障信息);可选 person、limit(默认 6 条记忆)。
  2. mood_feel:申请制记录情绪变化;参数含 emotion、intensity(1–100,默认 45)、why、person、warmth(−20–20)、show(为 false 时隐藏情绪,感受与表现分离)。
  3. mood_diary:read / write / reflect;写入可触发宣泄效应,当前强度会实际下降。

兼容性与依赖

项目 要求
DSH >= 0.1.7-rc.1(系统提示词分段接口与工具注册表)
Node.js >= 22.13.0
第三方 npm 依赖 无,仅 Node 内置模块

安装与启用

推荐通过 DSH CLI 安装;安装后重启 DSH,或在 profile 的 cordis.patch.yml 中修改任一配置值以触发重载。

Web profile:

# 从 npm 安装
dsh plugin --profile web add dsh-fish-mood

# 或从源码安装
dsh plugin --profile web add github:ChencLi819/dsh-fish-mood

Desktop profile:

dsh plugin --profile desktop add dsh-fish-mood

手动安装时,在 profile 中安装包,并在 cordis.patch.yml 中注册:

- insert:
    - id: fish-mood
      name: dsh-fish-mood

卸载时从 profile 的 dsh.profile.bundles 中移除 dsh-fish-mood,并卸载依赖。

配置要点

在 cordis.patch.yml 中对 id: fish-mood 的 config 做深合并覆盖。状态默认目录为 ~/.dsh/fish-mood(state.json 等为 v2 账本)。

示例(摘自 README):

- id: fish-mood
  config:
    identity: 你是这个角色本人;情绪是真的,不是演出来的。
    channels:
      qq: true
      web: false
    heartbeat:
      everyMinutes: 15
      lifeChance: 0.05
    feel:
      maxPerHour: 2
    traits:
      neuroticism: 70

常用项简述:

  • promptEnabled(默认 true):是否注入提示词;为 false 时工具仍可用。
  • channels.qq / channels.web / channels.unknown:按会话来源决定是否注入;QQ 入站无 rpcId,Web/桌面含 rpcId。
  • react.*:是否从消息推导情绪、单轮条数、冷却与消息时间窗。
  • heartbeat.*:心跳周期(默认 10 分钟)、小事概率与间隔、反刍/修复/复盘开关。
  • feel.*:mood_feel 的小时/日配额、单次强度增量上限与冷却。
  • traits:覆盖性格基线(如 openness、neuroticism 等 0–100)。

典型用法

查当前状态(排障)

Agent 或运维在对话中调用工具时,可使用 action: diag 查看版本、账本路径与统计:

mood_now(action="diag")

日常回复前,插件会在每个模型步骤渲染 fish-mood:now 状态块(order 9800),输出的是长度、是否主动、语气等行为约束,而非让模型复述情绪形容词。

主动记一笔感受

在配额与冷却允许时,模型可调用:

mood_feel(emotion="委屈", intensity=55, why="被误会了", person="某昵称", warmth=-5)

返回会说明实际生效幅度;show: false 仅入账不体现在对外表达参数中。

写日记与复盘

mood_diary(action="write", text="今天群聊有点累", mood="累")
mood_diary(action="read", days=3, limit=20)
mood_diary(action="reflect")

工作原理(简述)

入站消息经评价引擎(18 维 → 情绪匹配)进入状态机(强度、习惯化、惯性、底色、关系、记忆),再渲染为提示词状态块。心跳(默认每 10 分钟)负责衰减、随机小事、反刍、心情修复与深夜复盘;随机性仅出现在心跳,不在提示词渲染中引入。

提示词分为两段:fish-mood:rules(order 100,规则与危机指引,字节不变)与 fish-mood:now(实时状态)。渲染失败时返回空片段,不阻断整体组装。

适用场景与注意

适合:希望在 QQ / Web / 桌面等多渠道 DSH 部署中,让 agent 语气与回复长度随情绪、作息、关系暖度变化,又需要可查询、可限额的「主动感受」与日记能力时。

注意:

  1. 插件以当前 DSH 进程权限运行,状态与关系数据落在本机 ~/.dsh/fish-mood;安装前请阅读仓库源码与 MIT 许可证,确认渠道开关与危机旁路策略符合你的场景。
  2. 宿主未注入 tools 时插件不生效;需 DSH >= 0.1.7-rc.1 与 Node >= 22.13.0。
  3. 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库为准(README 与 npm 元数据当前为 0.1.0)。

结尾

dsh-fish-mood 把「会变化的心情」做成 DSH 可运维的状态机:36 种情绪带半衰期与掩饰、关系按人记账、空闲有心跳小事,并通过分段提示词影响表达而不篡改结论。若要安装或贡献,可从目录页与 GitHub 进入:

  • https://www.skillhub.cn/plugins/ChencLi819/dsh-fish-mood
  • https://github.com/ChencLi819/dsh-fish-mood
羽毛球分组比赛记分
小程序二维码

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

小夜