前言¶
在 DeepSeek Harness(DSH)里给助手定人格,常见做法是改一次配置、重启生效:官方 @deepseek-ai/dsh-persona 的 config 主要是静态字符串(prefix / suffix / complete / includeRuntimeContext),动人格往往要改 profile patch 并重启。若希望人格像「自我」一样随对话积累、又能用 git 回滚,就需要另一套存储与注入机制。
dsh-plugin-soul(维护者 CC19990113,社区分类「趣味换装」)面向 DSH,在 ~/.dsh/soul/ 维护 Markdown 人格文件,每轮通过 system prompt 注入;支持受闸门约束的自改、日笔记与升格、journal→dream 反思,以及设置页 人格 tab。当前 npm 版本为 0.4.0,许可证 MIT。插件以 DSH 进程权限读写本机文件,安装前建议通读仓库源码与许可证。
这是什么¶
一句话:给 DSH 一个可写、git 版本化、每轮重新读取的「自我」,而不是设定一次就冻结的静态 persona。
与官方 persona 的差异在于:本插件依赖 dsh-system-prompt 的 section.text 支持函数——assembly 时每轮读 ~/.dsh/soul/*.md,改 Markdown 后不必重启 DSH 即可在下一轮生效(插件自我升级改 lib/** 等仍须重启,见下文)。
记忆层:只管性格与对话¶
人格记忆与项目记忆 deliberately 分离,避免把 MEMORY.md 的注入预算(约 3000 字符)吃光。
MEMORY.md 长期人格记忆(每轮注入)
memory/YYYY-MM-DD.md 日笔记(不注入,由 soul_recall 检索)
适合记:关于我、关于你、对话里的事、教训、偏好变化。不适合记:项目代码、技术决策、环境配置、踩坑——这些应走项目记忆或其他通道。
升格规则:日笔记默认不注入;条目被 soul_recall 命中 ≥3 次 才够格,经 soul_memory 的 action:"promote" 写入 MEMORY.md 对应小节(CHANGELOG 会记录来源与命中次数)。当人类评分权重 ≥0.75 时,升格门槛可从 3 次降到 2 次。
人类评分与写入闸门¶
每条 assistant 回复操作栏增加三档:👎 / 😑 / 👍(挂在 conversation.chat.assistant-actions,与官方 👍👎 并列)。
权重由最近 20 条样本、半衰期约 7 天的加权平均映射到 [0,1];样本少于 3 条时不设闸门(冷启动)。大致效果如下:
| 权重 | 效果 |
|---|---|
| 无样本 / 不足 | 不设闸门 |
| <0.35 | 拒绝写人格(仅允许 journal / 日笔记) |
| 0.35 ~ 0.6 | 单次小修 ≤300 字符 |
| ≥0.6 | 正常写入 ≤800 字符 |
| ≥0.75 | 日笔记升格门槛 3→2 次 |
每次人格写入会把当时的 rating= 记入 CHANGELOG.md,便于事后核对「这条是在什么评价下写进去的」。
核心能力概览¶
| 层 | 做什么 |
|---|---|
| 注入 | 每轮读 ~/.dsh/soul/*.md 进 system prompt(README 称约 2.1k 字符 ≈ 535 tok) |
| 自改 | soul_update:RULES.md 只读;单次 ≤800 字符、每日 ≤3 次;why 必填;落 git + CHANGELOG |
| 反思 | soul_journal → soul_candidates(≥3 次且跨 ≥2 天)→ soul_dream 合并升格并写 DREAMS.md |
| 升级 | soul_propose_upgrade / soul_apply_upgrade(须 confirm:"APPLY");白名单 + node --check,失败整体还原 |
| 评分 | 三档评价驱动写入闸门与升格门槛 |
首次加载会在 ~/.dsh/soul/ 播种并 git init,典型布局:
~/.dsh/soul/
IDENTITY.md 名字 / 化身 / 口癖(可写,1200 字符预算)
SOUL.md 声音 / 立场 / 边界(可写,4000)
USER.md 对用户的模型(可写,2500)
MEMORY.md 长期人格记忆(可写,3000)
RULES.md 硬规则(只读,2000)
journal/ 日间观察
memory/ 日笔记
DREAMS.md 反思记录
CHANGELOG.md 每次自改的 why
安装与启用¶
推荐:DSH 内置安装器
设置 → 插件 → 添加插件,填写:
CC19990113/dsh-plugin-soul
也可填完整仓库地址 https://github.com/CC19990113/dsh-plugin-soul,或 npm 包名 dsh-plugin-soul。装完重启 DSH。
手动(开发用)
在本地克隆仓库后执行(资料原文,非日常用户必选路径):
cd ~/www/dsh-plugin-soul
node install.mjs # 预演:symlink + patch(自动备份)
node install.mjs --apply
然后重启 DSH。卸载:删除 symlink 与 patch 中 id: soul 段。
要求 Node.js ≥20(见 package.json engines)。
典型用法¶
安装并重启后,可直接用自然语言驱动,README 示例包括:
- 「把
IDENTITY.md里的名字定成 XX」 - 「以后都用中文,记到 USER.md」
- 「跑一次 soul_dream 看看有什么值得沉淀的」
常用工具(完整列表见仓库 README):
| 工具 | 用途 |
|---|---|
soul_status |
预算、今日额度、候选、最近反思 |
soul_read / soul_history |
读文件、提交与 diff |
soul_update / soul_rollback |
改写与回滚 |
soul_journal / soul_candidates / soul_dream |
观察 → 候选 → 反思 |
soul_remember / soul_recall / soul_memory |
日笔记、检索、升格 |
soul_ratings |
评分样本与闸门 |
soul_propose_upgrade / soul_apply_upgrade |
插件自身升级提案与应用 |
设置页注册 人格 tab(settings.section,id: soul),通过同源 HTTP 读写状态与文件,例如 GET /dsh-plugin-soul/api/state、POST /dsh-plugin-soul/api/file 等(详见 README)。
若希望每晚自动反思,插件本身不带定时器;可用 DSH 的 schedule_create 建 daily 任务,prompt 中依次调用 soul_candidates、撰写短自省、soul_dream({apply:true, narrative:"..."})(README 有完整示例句)。
设计取舍与适用注意¶
- 确定性管资格,模型管措辞:升格看次数、跨天与证据,不靠模型自觉。
- 写入是安全边界:
RULES.md只读;自我升级仅允许lib/**.js、templates/**.md;package.json、patch、README 不可通过升级改。 - 攒着改:频繁自改会让 system prompt 前缀 KV cache 失效,成本略涨;宜按天/按次收敛。
- 自我升级须重启 DSH 才生效。
适合:希望在 DSH 里长期维护「性格 + 对用户认识 + 对话记忆」、并用人 thumbs 约束写人格的开发者。不适合:把技术台账塞进人格层——请用项目记忆。
已知边界(仓库 README):真实浏览器 UI 未逐像素验收;GitHub 安装路径作者未在本仓库实测;对 DSH 0.2.1-rc.2 标 unknown;Windows 未测;/diff 为 git diff HEAD~1 -- <file>,非任意历史提交对比。
社区目录页:skillhub.cn 插件页(独立站点,与 DeepSeek / 幻方无官方从属)。源码与 issue:GitHub CC19990113/dsh-plugin-soul。