前言¶
在 DeepSeek Harness(DSH)里给模型定角色,常见做法是用 @deepseek-ai/dsh-persona:整个人设绑在一个 preset 上,该 preset 下所有会话共用同一套人设。若要在同一窗口里让「这个会话是猫、那个会话是律师」,或在对话进行中临时改人设,preset 级方案覆盖不到。
dsh-persona-slot(维护者 Zylog82568,社区分类「趣味换装」)针对的是会话级人设:每个会话恰好保留一个人设槽位,另有一条全局人设供未单独配置的会话继承;可通过 /persona 命令或在 Web GUI 的 Plugins → Installed 面板编辑。下文按安装、配置、用法与注意事项说明。
这是什么¶
一句话:dsh-persona-slot 是 DSH 的 per-session persona 插件——写入新人设会替换旧值而非叠加;全局人设覆盖所有没有会话专属记录的会话;变更在下一步模型调用时通过 agent 范围的 system-prompt/assemble 钩子生效,不同会话互不可见。
与官方 dsh-persona 的分工:preset 级统一角色仍用 dsh-persona;需要按会话区分或在运行中改人设时用本插件。
核心功能¶
每会话一人设¶
这是实现保证,不是约定:
- 会话存储是单值,
set即覆盖,不会拼接多条人设。 - 解析在第一个有记录的层级停止,同一会话不会同时带上「精确会话人设」和「全局人设」两段。
三层解析顺序¶
第一个有记录的层级生效:
| 顺序 | 层级 | 存放位置 |
|---|---|---|
| 1 | 精确 session id | config.sessions["<id>"] 或运行时 store |
| 2 | 通配符 "*" |
config.sessions["*"] 或运行时 store |
| 3 | global | config.global 或运行时 store |
记录可以是文本(作为人设),或显式空白。默认 blankOverrides: true 时,空白会终止查找,会话可「静音」而不删部署默认;blankOverrides: false 时空白会继续落到下一层。
/persona 命令¶
在会话里可直接读写人设,文本原样保留(含多行)。常用形式:
/persona 显示本会话解析后的人设
/persona show [this|global|all] 显示指定目标
/persona set <text> 设置本会话人设
/persona set global <text> 设置全局人设
/persona set all <text> 设置通配符层级人设
/persona set for <id> <text> 为指定 session id 设置人设
/persona clear [target] 删除记录,目标回退到下一层
/persona mute [target] 写入空白以阻止回退
/persona list 列出运行时覆盖
/persona mode append|replace|config 选择人设如何进入 prompt
/persona reset 清除所有运行时覆盖
for 之后的字符串才当作 session id;例如 /persona set 你是猫娘 会把人设设为「你是猫娘」,不会误解析为 id。
Installed 页面板¶
在 Web GUI 打开 Plugins → Installed,找到 dsh-persona-slot,展开 persona-slot 行可进入插件专属页:
- Global persona(总人设):多行编辑器,保存后对所有无会话专属人设的会话生效(下一步模型调用起)。
- Wildcard persona:无专属人设的会话使用的通配层级。
- Placement:在部署人设之后追加(append)、替换部署人设(replace),或跟随 profile 配置。
- Live sessions:各活跃会话当前解析结果、来源,以及对持有专属人设的会话提供 Clear。
面板约每 10 秒刷新,未保存的输入不会被覆盖。数据经 /persona-slot/state 与 /persona-slot/update 读写,与 /persona set 写入同一份文档。无 HTTP 界面的 headless / TUI 组合只能依赖 /persona。
运行时状态位置¶
用户通过命令或面板写入的内容落在:
$DSH_HOME/persona-slot/personas.json
Profile 里的 YAML 是部署默认值;上述文件是运行时覆盖,升级插件或重建 profile 不会清掉会话里写的人设。文件损坏会被挪为 personas.json.corrupt,插件以空状态启动而非直接失败。
对模型与 Token 的影响¶
append 模式下人设作为 persona-slot:session 段接在部署人设之后;replace 模式下改写部署人设段本身。人设文本 interpolate: false,字面量 {{anything}} 不会在组装时被当变量展开。人设不变时前缀稳定,有利于 provider 侧 prompt caching;中途 /persona set 会从该段起使 KV cache 失效,这是换身份的预期代价。
安装与启用¶
官方安装命令(将 <profile> 换为你的 profile 名):
dsh plugin --profile <profile> add dsh-persona-slot
本地开发可链接目录:
dsh plugin --profile <profile> add link:/absolute/path/to/dsh-persona-slot
bundle patch 会挂载一行 persona-slot。package.json 标明版本 1.2.0、MIT 许可证;引擎要求 Node ^22.19.0 || >=24.0.0,DSH 版本需在 README/package 声明的范围内。安装前建议阅读仓库源码与许可证——插件以当前 DSH 进程权限运行,人设本身是操作者编写的 prompt 文本,不是安全边界,不能替代工具限制、沙箱或审批策略。
Profile 配置示例(字段含义以 README 为准):
- id: persona-slot
config:
global: "You are a terse systems engineer. Answer in short commands."
sessions:
"<session-id>": "You are a cat. Every sentence ends with 喵."
"*": "Answer in Simplified Chinese."
enabled: true
mode: append
prefix: ""
suffix: ""
blankOverrides: true
includeSubagents: true
| 字段 | 默认 | 含义 |
|---|---|---|
global |
"" |
无会话专属记录时会话继承的人设 |
sessions |
{} |
按 session;"*" 为通配层级 |
enabled |
true |
总开关;false 时不注入但仍保留已存文本 |
mode |
append |
append 追加段,replace 替换部署人设 |
prefix / suffix |
"" |
人设上下包裹文本 |
blankOverrides |
true |
空白是否终止该层查找 |
includeSubagents |
true |
子 agent 会话是否也解析人设 |
运行时也可用 /persona mode 切换 mode。
典型用法¶
- 在 profile 里写好
global与sessions["*"],作为默认中文或角色基调。 - 某次对话需要临时角色:在会话中执行
/persona set …,下一步起模型按新身份回复。 - 多会话并行、人设不同:分别为各 session 用
/persona set for <id> …或在面板 Live sessions 中查看来源并清理。 - 某会话不想吃全局人设:对该会话
/persona mute或clear,配合blankOverrides控制是否继续继承下层。
人设长度无上限;过长的人设会在每次请求中占用上下文,需自行控制篇幅。
适用场景与注意¶
适合:同一 DSH 实例下多会话并行、人设要分开;对话中途换角色;希望通过 GUI 编辑长人设(角色设定表),而不只依赖单行 settings 表单。
局限(README 已说明):
- 人设不限制工具与策略,不能当权限机制用。
- 面板依赖
ctx.webServer的 HTTP 路由;纯 TUI/headless 仅命令行。 - 解析与覆盖按 session id,不是会话标题。
- 社区目录页与 GitHub 由维护者发布;DSH 生态是「一切皆插件」,SkillHub 等目录站点与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-persona-slot 把「全局一条 + 每会话一条 + 运行时可改」收进一个 persona 槽位和统一的 prompt 钩子,与 preset 级的 dsh-persona 互补。需要安装或源码时,可访问社区目录页与 GitHub 仓库:
- 目录页:https://www.skillhub.cn/plugins/Zylog82568/dsh-persona-slot
- GitHub:https://github.com/Zylog82568/dsh-persona-slot