前言¶
在 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 爲準。