DeepSeek Harness (DSH) 的插件生态允许在对话流程中加入视觉反馈。dsh-character-emote-plugin 插件在对话右侧提供一个固定浮层,用于实时显示当前角色的表情立绘。它通过模型调用工具或流式文本判定来触发立绘切换,解决智能体对话缺乏视觉表现的问题。
安装与启用¶
安装插件需要指定 DSH 的执行方式。安装完成后应重启 DSH 进程以使配置生效。
# 安装
<dsh> plugin --profile <profile> add <本插件目录>
# 卸载
<dsh> plugin --profile <profile> remove dsh-character-emote-plugin
注意:插件代码采用 MIT 许可证,文档采用 CC BY 4.0 许可证。
目录结构与素材准备¶
插件通过目录结构识别角色和情绪。立绘素材需自行准备,仓库不包含图片文件。
目录结构¶
支持多角色管理,每个角色对应一个目录,目录名即角色名。
dsh-character-emote/
characters/
高奈利亚/ ← 角色名(目录名 = 角色 id)
joy.png ← 基础档(intensity 0)
anger.png ← 基础档
anger-1.png anger-2.png anger-3.png ← 强度递进档(intensity 1/2/3)
角色B/
...
命名规范¶
情绪命名与角色无关,每个角色目录内部遵循同一规范:
* joy.png:基础情绪图(intensity 0)。
* anger-1.png / anger-2.png / anger-3.png:情绪强度递进档(intensity 1/2/3)。
* 支持格式:png、jpg、jpeg、webp、gif。
放置好素材后,在设置页点击“刷新角色”按钮即可识别,无需重启。
核心功能¶
情绪模式¶
插件提供三种情绪模式,可在设置页切换:
- 自动(默认):模型调用
set_expression工具或流式判定直接触发切图。 - 手动:模型只记录“待定情绪”,设置页显示待定卡片,需手动选择情绪并点击“应用”才切图。
- 暂停:完全冻结,任何情绪变化不生效。
视觉交互¶
- 动画:立绘切换时支持淡入淡出和缩放过渡动画,可在设置页控制开关。
- 操作:浮层仅图片本体支持拖拽和滚轮缩放,浮层本身不阻挡 UI 交互。
- 样式:立绘大小、位置、透明度可调,配置持久化到 localStorage。
- 预加载:切换角色时会预加载该角色全部立绘,避免弱网环境下的闪屏。
复合情绪与心情¶
- 复合情绪:支持主情绪与副情绪组合(如
surprise+embarrassment),标签显示“主 + 副”。 - 心情基线:内置 28 种情绪的 valence(正负)和 arousal(唤醒度)轴。每次情绪调用会按比例混入当前心情,随时间指数衰减(半衰期 2 分钟)。心情为内存态,重启归零。
- 动态强度映射:情绪强度受心情影响,方向相反或差距过大时自动降档,避免表情硬切。
触发条件¶
除了模型调用工具,插件还支持基于文本的扩展触发条件:
- 标点符号:
!→ 兴奋,?→ 困惑,...→ 悲伤。 - 表情符号:
😊→ 开心,😠→ 生气,😢→ 难过,😲→ 惊讶。 - 语气词:
哇/啊→ 惊讶,哎/唉→ 失望,嘿/嘻嘻→ 好笑。
API 与设置¶
API 路由¶
插件提供以下 HTTP 接口:
POST /character-emote/mode:切换情绪模式。Body:{mode: "auto"|"manual"|"paused"}。POST /character-emote/apply:手动应用情绪。Body:{emotion, intensity?, secondary?}。
设置项¶
- 刷新角色:重新扫描
characters/目录并重注册工具枚举。 - 情绪强度可视化:在立绘下方显示强度指示条(最大支持 3 档)。
- 无档位强度缩放:当情绪只有基础图(无变体档)时,通过 scale 放大模拟视觉强度;有变体图时走档位图(向后兼容)。
注意事项¶
- 素材自备:仓库不包含任何立绘图片,需按规范自行准备。
- 内存状态:心情数据为内存态,重启 DSH 后归零。
- 全局共享:多会话共用同一份当前角色和情绪状态。
- 工具枚举刷新:角色或情绪切换后,
set_expression工具的枚举是刷新时的快照,需重注册(即刷新角色)后生效。 - 姊妹仓库:作者维护了多个同族插件,如
dsh-liya-skin(皮肤)、dsh-liya-ui(UI 润色)等。
作者:feverZHONG