前言¶
在 DSH 里做角色向对话时,常见做法是每次新开会话都把一大段人设粘进系统提示;人设一旦变长,维护成本和漏贴概率都会上去。若还希望角色记住闲聊、情绪和偏好,单靠单次会话上下文又撑不住——关掉窗口就断档。
下面介绍社区插件 dsh-companion(维护者 suis077,分类:记忆)。它通过 DSH 官方的 systemPrompt 服务注册提示段,不改 DSH 本体;新会话自动带上选定的人设卡,并可在多轮、跨会话里沉淀摘要式长期记忆与好感度、心情等状态。
这是什么¶
dsh-companion(包名 dsh-companion,显示名 Persona Card,当前版本 0.2.0,MIT)是 DeepSeek Harness 的扩展插件:一张「人设卡」包含名字、人设正文、解除设定的触发词,以及可选的角色图 / 音效 / 泡泡图绑定;配合 persona_card 工具与 Web 右下角浮层面板,完成选卡、按会话开关、同步鲸鱼挂件资源,并展示白饭消耗统计(含按人设卡归因)。
- 目录页:https://www.skillhub.cn/plugins/suis077/dsh-companion
- 源码:https://github.com/suis077/dsh-companion
SkillHub 上的简介概括为:人设卡 + 跨会话记忆 + 好感度,让 AI 角色在多轮对话里逐渐成长。
核心能力¶
人设卡与系统提示注入¶
- 人设卡以 JSON 文件存放在
$DSH_HOME/persona-cards/(默认~/.dsh),全局当前选中记录在persona-cards/index.json,各会话覆盖写在persona-cards/sessions.json。 - 全局:浮窗下拉选一张卡,未单独设置的会话都跟它。
- 本会话:可设为「跟随全局 / 已开启 / 已关闭」——写代码时关掉,人设不会插进当前会话。
- 新会话默认生效;每会话可独立关闭或换卡,互不影响。
跨会话长期记忆¶
记忆文件路径:$DSH_HOME/persona-cards/memories/<cardId>.json。结构示例(字段含义见 README):
{
"affinity": 34,
"mood": "刚被装上了记性…",
"traits": ["嘴硬心软"],
"chapters": [
{ "at": "…", "kind": "emotion", "summary": "…", "feeling": "…" }
]
}
记什么:工作之外的闲聊、玩笑、情绪、反复提到的偏好、有分量的节点。
不记什么:任务执行过程(读哪个文件、跑什么测试)、换个说法重说的旧事。
只存摘要,不存原话——每条 summary 60 字以内,feeling 写当时的感受。
上限 200 条;超出时把最旧条目折成一条摘要,而不是直接丢弃。另有 .bak、工作区 persona-memory-backups/ 时间戳快照(最多 30 份)等保护;记忆有变化即备份,启动时还会补一次。
记忆行为由独立提示段 persona-card:memory-rules(order 160)约束,避免把读文件等流水账写进记忆。
对话侧常用说法与工具动作(persona_card):
| 想干什么 | 说法 / 动作 |
|---|---|
| 让角色记住点什么 | 「记一下:…」→ remember |
| 看看记得什么 | 「你还记得什么」→ recall |
| 调心情 | 「你现在什么心情」→ mood |
| 调好感(需明确要求) | 「把好感调高/调低」→ affinity |
好感度 0–100 是角色内部连贯用的刻度,文档明确说明不是对真实关系的度量,也不应当作权限或承诺。
鲸鱼挂件资源桥¶
绑定资源可一键同步进 dsh-whale-widget 对应目录(whale-roles/、whale-audio/、whale-bubble-imgs/ 及各自 *.json 索引)。插件只合并自己生成的 dshp_ 前缀条目,不覆盖挂件原有配置;索引读失败时拒绝写入。
白饭账本与按卡归因¶
面板展示今日 / 近 7 天 / 累计消耗,并尝试按当前生效的人设卡归因。插件区分两本账:
- 积分账:
source.provider为workbuddy/workbuddy-global时,按tokens ÷ 1,000,000 × 模型倍率计积分;倍率优先读插件config.creditMultipliers,否则查本机dsh-connect-workbuddy的/plugins/dsh-connect-workbuddy/usage(60 秒缓存)。 - 金额账:
provider为deepseek时按官方价目表计人民币。
两本账不相加。自本次 DSH 启动起在内存中累计,跨对话汇总,重启归零。按卡归因依赖插件观测的人设生效时间线;未运行期间的消耗记为「未归因」。挂件侧的 .dshw-usage.json 只读不写,且挂件按 DeepSeek 价估逐轮人民币——与 workbuddy 积分轮次口径不同,README 中有对照说明。
安装与启用¶
安装方式以 README 为准:不要手工改 profile 的 package.json 或 cordis.patch.yml。
- 打开 DSH 的 Plugins 页。
- 点击 Add plugin。
- 填入本仓库的绝对路径,或 git 仓库地址(例如
https://github.com/suis077/dsh-companion)。
安装前会备份 profile 配置。回滚时把 package.json 与 cordis.patch.yml 覆盖回 $DSH_HOME/profiles/desktop/(Windows 路径写法见 README)。更完整的交付与回滚说明见仓库内 DELIVERY.md。
注意:修改 Host 侧 index.js 等代码后需重启 DSH 才会重新加载;卡片数据与面板状态一般不需重启。
插件在 DSH 进程权限下运行,安装前请自行审阅源码与 MIT 许可证。
典型用法¶
浮层面板¶
DSH Web 界面右下角打开「人设卡」浮窗:选全局卡、设置本会话跟随或关闭、查看状态与白饭统计。
对话中的 persona_card 工具¶
| 说法 | 动作 |
|---|---|
| 「把这个会话的人设关掉」 | off |
| 「列出我的人设卡」 | list |
| 「把这段人设存成一张卡」 | create |
| 「把人设卡绑的角色图同步进鲸鱼」 | sync |
| 「这个角色吃了多少白饭」 | usage |
新建卡:在对话里把人设正文交给模型存成卡,或直接编辑 persona-cards/<id>.json。
自检脚本¶
仓库 tools/ 下提供离线/在线自检,例如:
node tools/check-all.mjs # 全部套件(含需运行中 DSH 的实时核对)
node tools/check-all.mjs --no-live # 仅离线套件
可按 README 表格单独运行 check-memory.mjs、check-billing.mjs、check-live-tools.mjs 等。
适用场景与限制¶
适合:需要固定角色人设、又不想每会话重贴提示;希望闲聊与情绪在多会话间延续;已用鲸鱼挂件并想从人设卡同步角色图与音效;要在面板里区分 workbuddy 积分与 DeepSeek 人民币两本账的使用者。
限制(摘自 README):
- 面板目前以选卡和开关为主,新建卡需在对话里由模型创建(或直接改 JSON)。
- 前端仅有结构与非崩渲染测试,无浏览器视觉验证。
- 积分统计为本次启动以来内存累计;历史某次会话需用
verify-billing.mjs等对会话日志。 - 会话中途上游倍率变化时,已累计积分不会回溯重算。
DSH 生态主张「一切皆插件」;SkillHub(skillhub.cn)是社区插件目录,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-companion 把人设卡、系统提示注入、跨会话摘要记忆和可选好感度 / 心情收进一套不改动 DSH 本体的插件里,并接上鲸鱼资源与白饭观测。若你在 Harness 里做长期角色陪伴或带人设的辅助对话,可从目录页或 GitHub 安装后,用浮窗管全局、用会话开关隔离写代码场景。