dph-emotion-arc:把文本情绪做成可审计的状态与策略闭环

前言

在 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):

  1. 修改 Host 侧 engine.js 后需重启 Harness 才生效。
  2. 修改 Client 侧 client.js 后刷新页面即可。
  3. 禁用 / 启用插件请间隔 ≥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 中复用。

务必知晓:

  1. 插件以当前 dsh 进程权限运行,安装前请自行审阅 GitHub 源码 与 MIT 许可证。
  2. LLM 精判为 BYOK,走 Harness 默认或配置的 llmProvider / llmModel;超时回词典兜底。
  3. README 合规声明:仅限研究与创作辅助,不构成医疗 / 心理服务;不提供拟人化人格的持续情感互动。

结尾

dph-emotion-arc 把「情绪识别 → 状态 → 策略」做成文件化、可审计的 Harness 工作流,并用账本与角色卡扩展叙事弧光。若要浏览简介与安装入口,见 SkillHub 目录页;架构、配置与工具清单以 GitHub 仓库 README 为准。

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

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

Xiaoye