前言¶
在 DeepSeek Harness(DSH)里做带叙事弧光的对话 Agent,常见做法是直接把「用户情绪」写进 system prompt,或让模型每轮自行推断。前者难以随对话更新,后者缺少可迁移、可审计的显式状态,也不方便把「识别结果」稳定映射到倾听、共情、降不确定等策略。社区插件 dph-emotion-arc(仓库 liuxinxing123/dph-emotion-arc)按管线式架构补齐:文本情绪识别 → 显式状态文件 → 策略注入,并附带关系型记忆账本与 SillyTavern 角色卡导入。维护者为 liuxinxing123,许可证 MIT,当前 package 版本 0.2.0;在 SkillHub 插件目录 中分类为工作流,页面标注「可安装」。SkillHub 为社区独立目录,与 DeepSeek / 幻方无官方从属关系。
插件 README 明确其定位为编剧向情绪叙事工具(合规白名单方向),不是持续情感陪伴;DSH 生态理念是「一切皆插件」,本文仅介绍该插件在 Harness 中的能力与用法。
这是什么¶
一句话概括:文本情绪识别 → 显式 emotion-state 文件 → 对话策略映射,并叠加情绪记忆账本与角色卡人格感知。
识别采用双引擎,由配置项 detectorMode 组合:
- lexicon:词典 + 否定短语 + emoji + 感叹号加权,零成本、可审计,作兜底。
- llm:LLM 精判(BYOK,4s 超时、温度 0、JSON 容错解析);
auto模式下 LLM 优先,失败或超时走词典。
状态跨会话写入数据目录下的 JSON,策略通过 agent.inject() 与 systemPrompt.context() 注入 Agent,而不是端到端黑盒。
核心功能¶
情绪识别 → 状态机 → 策略¶
用户消息经 scoped 事件 agent/inbox/claimed 进入管线。识别结果进入情绪状态机(强度、指数衰减,默认半衰期 30 分钟、换标签迟滞防抖)。README 列出三道感知错误防护:低置信度回落中性;标签切换需超过强度迟滞;推断写入审计日志供追溯。
显著变化时可触发策略提示(共情 / 倾听 / 降不确定等,notifyMode 可关);每步在 system prompt 中注入当前状态与角色卡人格,实现稳态感知。持久化路径为 state/<sid>.json。
记忆账本与角色卡¶
| 能力 | 实现 |
|---|---|
| 关系型情绪记忆 | ledger/<sid>.jsonl,类型含 conflict / reconciliation / soothe / breakthrough / preference / milestone,跨会话保留 |
| SillyTavern 角色卡 | V2 PNG、V3 JSON、V2 JSON 导入为 persona/<id>.json,反哺人格感知策略(V1.1) |
Agent 可通过工具读写:emotion_ledger_append 追加账本;emotion_card_import 导入并绑定当前会话。
Agent 工具¶
emotion_state:读取当前标签、强度、置信、触发语、历史、账本尾、角色卡等。emotion_state_set:手动校准(审计日志rule=manual)。emotion_ledger_append:追加关系型记忆。emotion_card_import:导入 SillyTavern 角色卡并绑定会话。
客户端 UI¶
Composer 下方有「情绪弧线」芯片:当前情绪(颜色点、emoji、名称、强度条、相对时间)。点击展开状态面板(触发语、变化历史、账本尾)。数据经只读 HTTP 端点获取;写操作仅经 Agent 工具。
数据文件¶
默认数据根目录为 dshHomePath('emotion-arc'),可在配置中覆写 dataDir:
<dataDir>/state/<sessionId>.json # 情绪状态(含 version、历史、persona 绑定)
<dataDir>/ledger/<sessionId>.jsonl # 情绪记忆账本
<dataDir>/audit/<sessionId>.jsonl # 推断审计(rule: llm / lexicon / lexicon-fallback / manual)
<dataDir>/persona/<personaId>.json # 角色卡 persona 档案
文件带 version 字段,便于导出与迁移。
安装与启用¶
已抓取 README 与 SkillHub 目录页未给出形如 dsh plugin add … 的独立安装命令。目录页标注插件「可安装」,安装方式以你当前 DSH 版本对应的插件管理流程及 SkillHub 页面说明为准。
安装并加载 bundle 后,在插件自带的 cordis.patch.yml 中启用与调参。下面为 README 中的完整配置示例(路径与字段以仓库为准):
config:
enabled: true
dataDir: !!js dshHomePath('emotion-arc')
decayHalfLifeMs: 1800000 # 情绪半衰期 30min
neutralFloor: 0.15 # 低于此强度回落中性
minConfidence: 0.5 # 防护①阈值
hysteresis: 0.15 # 防护②换标签迟滞
injectThreshold: 0.25 # 触发策略注入的强度变化阈值
injectCooldownMs: 5000 # 注入冷却
notifyOnShift: true # 情绪显著变化时注入通知
notifyMode: inject # inject=注入+上下文;context-only=仅稳态上下文
detectorMode: auto # lexicon / llm / auto
llmTimeoutMs: 4000
llmMaxTokens: 120
# llmProvider / llmModel # 可选;缺省用 Harness 默认模型(BYOK)
historyLimit: 20
开发与运维注意(来自 README):
- 修改 Host 侧
engine.js后需重启 Harness 才生效。 - 修改 Client 侧
client.js后刷新页面即可。 - 禁用 / 启用插件请间隔 ≥10 秒,避免 cordis 纤维未释放导致路由异常。
典型用法¶
1、对话中自动跑闭环¶
启用插件并保持 enabled: true。用户发消息后,插件监听 agent/inbox/claimed,按 detectorMode 识别情绪、更新 state/<sid>.json,必要时 agent.inject() 策略提示,并在每步通过 systemPrompt.context() 带上当前状态。界面芯片可只读查看结果。
若希望减少打扰,可将 notifyMode 设为 context-only,仅保留稳态上下文注入。
2、Agent 主动读状态与写账本¶
在 Agent 工具列表中使用 emotion_state 查看当前弧光;在关键剧情节点调用 emotion_ledger_append 记录冲突、和解等条目,供后续轮次与跨会话引用。
3、导入角色卡并绑定人格¶
对 SillyTavern 导出的 V2 PNG 或 V3 / V2 JSON 调用 emotion_card_import,生成 persona 档案后,策略与人格感知会对齐该角色设定。
4、手动校准与审计¶
识别偏差时用 emotion_state_set 修正;对应写入 audit/<sid>.jsonl 且 rule=manual,便于与 llm / lexicon 推断对照。
本地单测(维护者提供):node test-emotion.mjs(24 用例)、node test-fork-repro.mjs(回归)。
适配与维护纪律¶
README 给出的适配矩阵要点:
| 组件 | 版本 / 要求 | 状态 |
|---|---|---|
| DeepSeek Harness | 0.1.7 – 0.2.x(Developer Preview) | 基于 0.2.x API 面编写 |
| 宿主 API | agent/inbox/claimed、agent.inject、agent/created / agent/disposed、systemPrompt.context、tools.register、webServer.register 等 |
防御式调用,缺失则跳过 |
| 客户端 | window.__ModuleLoader__、ctx.slots、conversation.composer.dock(sessionId)等 |
README 标注可用 |
| 浏览器 | 现代 Chromium / WebView(fetch + React 18) | README 标注可用 |
插件不 import @deepseek-ai/* 包(bundle 自包含);宿主 API 变更时优先跳过功能而非抛错,避免影响会话。每次 dsh 发布后 README 建议对 emotion_state 与芯片刷新做冒烟测试。
Roadmap 中 V2 规划语音情绪与 TTS,属后续方向;当前 README 标注 V1.0 闭环 + 账本 + 适配矩阵、V1.1 LLM 精判与角色卡导入为已交付范围。
适用场景与注意¶
适合:需要在 DSH 里做可审计、可迁移的情绪叙事;编剧 / 语 C 向 Agent,希望显式状态驱动策略而非纯 prompt 猜测;已有 SillyTavern 角色资产,希望一份 persona 在 Harness 中复用。
务必知晓:
- 插件以当前 dsh 进程权限运行,安装前请自行审阅 GitHub 源码 与 MIT 许可证。
- LLM 精判为 BYOK,走 Harness 默认或配置的
llmProvider/llmModel;超时回词典兜底。 - README 合规声明:仅限研究与创作辅助,不构成医疗 / 心理服务;不提供拟人化人格的持续情感互动。
结尾¶
dph-emotion-arc 把「情绪识别 → 状态 → 策略」做成文件化、可审计的 Harness 工作流,并用账本与角色卡扩展叙事弧光。若要浏览简介与安装入口,见 SkillHub 目录页;架构、配置与工具清单以 GitHub 仓库 README 为准。