dsh-persona-panel
给 DeepSeek Harness 的记忆面板:人设卡、用户画像、事件各存一份,按工作区分开,每条都能看来历、能撤回。
它不让模型「扮演一个角色」,而是让它在某个工作区里,慢慢长成一个有脾气的东西——并且这件事你随时能看、能改、能停。

三条原则
- 不向你索取人设。 没有「请先设定你的角色」表单。特征是相处里长出来的,同一件事出现两次以上才会落一条。
- 不按会话记,按工作区记。 工作区默认是空的,也不问你「从哪来」。想让记忆跟过去,手动「复制…」:复制一份带走,或共生(两个工作区共用一份,可随时切断)。共生时名字、称呼、三个开关、词库、事件上限跟着那份数据走,两边改一处两边都变;切断后各自独立。
- 你能看见每一条是怎么来的。 每条记忆都带原话与改动史;删人设是分阶段的(先记一次不满、再降、才删),面板可以替你直接删。
它长在哪
| 位置 | 是什么 |
|---|---|
| 侧栏「记忆」 | 全宽主面板:工作区列表 / 三块内容 / 右侧来历抽屉 |
| 设置 → 记忆 | 同一个面板,在设置里也开一份 |
| 工作区的会话菜单 | 会话「⋯」菜单里多一项,点了直接跳到这个工作区的记忆 |
| 会话内浮卡 | 全手动挡有待你决定的条目时,右下角浮出来问一句 |
工作区列表那一行自己的「⋯」里没有插件插槽(那是内置包硬编码的),所以入口挂在会话菜单上。
四个抽屉 + 一个称呼
| 抽屉 | 装什么 | 谁写 |
|---|---|---|
| 人设卡(self) | 大类(带强度)+ 人格补充(可标「硬」) | 模型从对话里归纳,或你手动加 |
| 画像(user) | 对你的印象,一条一句 | 模型,多聊几次才总结 |
| 事件(event) | 承诺、约定、值得记住的事,以及工程事件(项目推进、定下的方案、做完并验收的一段工作) | 模型,到期它自己提一句 |
| 日记(diary) | 它自己写的一句话,第一人称 | 模型,写完不能改、不能删 |
| 称呼(setting) | 我叫什么、我怎么称呼你 | 模型,你说出口的当下就改 |
日记是它自己的那一列。 不是摘要、不是日志接口,是「今天这件事我记下了」这种自述。面板里是只读的——没有改、没有删,宿主侧也拒绝任何 updateEntry / delEntry / persona_forget 碰它。它跟着工作区走:共生时共享,复制和归档也一起带。不设条数上限,注入时取最近 6 条,标着「我自己写的,只读;不必向用户复述」。
「硬」标记的人格补充会排在最前面注入——适合放「绝不替我做主」这类不能改写的规则。
工程事件(eventKind=work)记的是过程:项目推进到哪、定了什么方案、哪段工作验收了。坑和教训不写在这里——踩过的坑、发现的漏洞、以后要避免的做法,提示词会要求模型写进项目的 AGENTS.md 或仓库文档。这里可以替你想起「上周定了什么」,但不该成为工程经验唯一的存放处。
事件有容量,默认 20 条,可改,0 = 不限。 满了之后模型写不进新的,那条会挂成一张卡问你:扩容量,还是就到这里。它觉得某件对你特别重要时会标 ★——星标不占容量、注入时排最前;你在事件详情里也能手动标。
四挡记录
| 挡位 | 模型能不能自己写 |
|---|---|
| 全手动(默认) | 不能。写之前先进「待你决定」,你在会话里点「留着」才落 |
| 半自动 | 能,但改人设要你点头 |
| 自动 | 能,直接写 |
| 只读 | 谁都不写,只注入 |
「启用」和「记录」是两个开关:关掉「启用」= 不注入也不显示;关掉「记录」= 不新增,但已有的还在。只关记录 ≠ 忘。
改名与称呼(setting)不受全手动拦——那是状态,不是记忆。
别人也在(多用户画像,默认关)
给把 DSH 接进 QQ / 群聊的人准备:主画像之外再开一列「别人」,一个人一个分支,可以按名字或别名搜到。
| 开关 | 关着 | 开着 |
|---|---|---|
| 启用 | 他们的画像不注入、面板里折叠成一行 | 提示段多出一节「同一屋檐下的其他人」,每人最多三句印象、三件事 |
| 记录 | 不新增关于别人的印象与事件 | 模型可以用 who 把印象/事件记到具体某个人名下 |
- 默认两个都关。不打开时,群友说过的话不落任何盘。
- 事件会带
who字段,写进那个人的分支,模型提到时会带上名字(「小缘约的下周三」)。 - 关掉「启用」只是折叠,已有记录还在;再打开就回来。只关 ≠ 忘,跟主画像一样。
- 名字可以改,旧名自动进别名,搜旧名还找得到。
四个工具
| 工具 | 干什么 |
|---|---|
persona_recall |
读当前工作区的记忆 |
persona_remember |
记一条:self 脾气、user 印象、event 约定、diary 日记、setting 称呼;带 who 就记到那个群友名下 |
persona_forget |
改一条或删一条(人设是分阶段删) |
persona_ask_keep |
拿不准就先问你,写进「待你决定」 |
模型侧的提示不要求它「汇报记忆」,只要求它带着底色说话:不许提「人设卡/记忆/面板」,不许念清单,不许说「我记得你说过」。
存储
~/.dsh/persona-panel/
├── db.json 所有工作区、条目、设置(原子写,坏了会隔离成 db.json.broken-<时间>)
├── audit.log 谁在什么时候改了哪条(超 2 MB 轮转)
└── imports/ "导入会话"生成的转写,交给模型自己拆
纯本地,不联网。卸载插件不会删这些文件——留着,装上还能接着用。
装
| 方式 | 怎么做 | 升级 |
|---|---|---|
| 插件市场 | DSH 里打开市场,搜 persona panel |
市场里重装(或等更新提示) |
| 源码 | dsh plugin add https://github.com/mihomooo/dsh-persona-panel |
卸载后重装 |
| npm(可选) | dsh plugin add dsh-persona-panel |
卸载后重装 |
零依赖,没有构建脚本,装上去就是一个目录,不需要编译。
发布到 npm 只影响市场卡片上显示的下载量,不改变市场从 GitHub 安装这一点。想跳过源码安装那一步,也可以从 Releases 下载 .tgz 直接装。
升级不丢记忆:数据在 ~/.dsh/persona-panel/,卸载只撤程序。
要求 Harness 0.2.x(用到 webServer.register、slots.inject、systemPrompt.section)。
已知边界
- 「导入会话」的转写交给模型拆,拆得准不准取决于当时的模型;面板里的本地粗拆只做兜底,会误判。
- 会话转写会写在
~/.dsh/persona-panel/imports/下,目前没有自动清理。 - 全手动挡的待决卡片需要你点一下;不点就一直等着,不会自动通过。
MIT
No comments yet. Be the first to write one.