前言¶
在 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 }。
mood_now:查询当前情绪;action可为now或diag(排障信息);可选person、limit(默认 6 条记忆)。mood_feel:申请制记录情绪变化;参数含emotion、intensity(1–100,默认 45)、why、person、warmth(−20–20)、show(为false时隐藏情绪,感受与表现分离)。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 语气与回复长度随情绪、作息、关系暖度变化,又需要可查询、可限额的「主动感受」与日记能力时。
注意:
- 插件以当前 DSH 进程权限运行,状态与关系数据落在本机
~/.dsh/fish-mood;安装前请阅读仓库源码与 MIT 许可证,确认渠道开关与危机旁路策略符合你的场景。 - 宿主未注入
tools时插件不生效;需 DSH>= 0.1.7-rc.1与 Node>= 22.13.0。 - 社区目录 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