为每个会话单独设定人设,并支持随时修改
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/Zylog82568/dsh-persona-slot.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 7 处,展示前 7 条)
- 发起网络请求client/client.js:148
const response = await fetch(`${ROUTE}/state`, { signal, headers: { accept: "application/json" } }); - 发起网络请求client/client.js:159
const response = await fetch(`${ROUTE}/update`, { - 读取本地文件lib/store.js:105
text = await readFile(this.file, "utf8"); - 写入本地文件lib/store.js:124
await rename(this.file, `${this.file}.corrupt`); - 写入本地文件lib/store.js:289
await mkdir(dirname(this.file), { recursive: true }); - 写入本地文件lib/store.js:291
await writeFile(temporary, `${JSON.stringify(this.document, null, 2)}\n`, "utf8"); - 写入本地文件lib/store.js:292
await rename(temporary, this.file);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 的按会话人格槽位:每个会话一个人格,所有会话继承一个全局人格,外加 /persona 命令和已安装页面板。
README
由 DeepSeek 最新模型翻译生成dsh-persona-slot
DeepSeek Harness 的每会话独立人设插件。每个会话只保留一份人设——新输入直接覆盖旧的,不会叠加、不会出现一个会话同时扮演两个角色。另有一条总人设给所有会话继承,在 Web 的「插件 → 已安装」里点进去就能改。
人设字数不设上限,写多长的角色设定都行。
两个编辑入口写的是同一份数据:对话里的 /persona 命令,和已安装页的图形面板。
为什么需要它
@deepseek-ai/dsh-persona 是给整个预设配一个人设:当一个预设下所有会话都该是同一个人格时,它就是对的选择。但它回答不了另外两件事:
- 这个会话是猫娘,那个会话是律师,同一个窗口里同时存在两种人格。
- 对话已经跑起来了,还想随时改人设。
本插件解决这两件事。它按会话从三层里解析人设,再通过一条挂在 agent 作用域上的提示词钩子注入,因此两个会话互相看不见对方的人格,改动在下一步模型调用就生效。
一个会话一份人设
这是硬性保证,不是约定:
- 一个会话在存储里只有一条记录,set 是替换语义,第三次设置会覆盖第二次,绝不会拼成两段。
- 解析时第一个有记录的层就返回,不继续往下取,所以「会话人设 + 总人设」永远不会同时进入同一个提示词。
展开完整文档(README 剩余 1 节)
dsh-persona-slot
DeepSeek Harness 的每会话独立人设插件。每个会话只保留一份人设——新输入直接覆盖旧的,不会叠加、不会出现一个会话同时扮演两个角色。另有一条总人设给所有会话继承,在 Web 的「插件 → 已安装」里点进去就能改。
人设字数不设上限,写多长的角色设定都行。
两个编辑入口写的是同一份数据:对话里的 /persona 命令,和已安装页的图形面板。
为什么需要它
@deepseek-ai/dsh-persona 是给整个预设配一个人设:当一个预设下所有会话都该是同一个人格时,它就是对的选择。但它回答不了另外两件事:
- 这个会话是猫娘,那个会话是律师,同一个窗口里同时存在两种人格。
- 对话已经跑起来了,还想随时改人设。
本插件解决这两件事。它按会话从三层里解析人设,再通过一条挂在 agent 作用域上的提示词钩子注入,因此两个会话互相看不见对方的人格,改动在下一步模型调用就生效。
一个会话一份人设
这是硬性保证,不是约定:
- 一个会话在存储里只有一条记录,set 是替换语义,第三次设置会覆盖第二次,绝不会拼成两段。
- 解析时第一个有记录的层就返回,不继续往下取,所以「会话人设 + 总人设」永远不会同时进入同一个提示词。
- 单元测试 one persona per session 与 a session never resolves two personas at once 钉住这两条。
解析顺序
第一个有记录的层生效。
| 顺序 | 层 | 存放位置 |
| 1 | 精确会话 id | config.sessions["<id>"] 或运行时存储 |
| 2 | 通配 "" | config.sessions[""] 或运行时存储 |
| 3 | 全局 | config.global 或运行时存储 |
一层的记录要么是文本(当作人设使用),要么是显式空白(把这一层「静音」)。blankOverrides: true(默认)时空白到此为止,会话可以自己闭嘴而不必删掉部署默认值;false 时空白继续往下一层落。
安装
dsh plugin --profile <profile> add dsh-persona-slot
本地开发:
dsh plugin --profile <profile> add link:/本目录绝对路径
bundle patch 会挂上一行 persona-slot。
配置
- id: persona-slot
config:
所有会话继承的总人设 global: "你是一台只说重点的系统工程师,回答用短命令。"
每会话人设;"" 是通配层 sessions: "<session-id>": "你是一只猫,每句话结尾都要加 喵。"
"": "一律用简体中文回答。"
enabled: true
append:人设追加在部署人设之后 replace:人设顶替部署人设 mode: append 可选的人设外包装 prefix: "" suffix: "" blankOverrides: true includeSubagents: true
| 字段 | 默认 | 含义 |
| global | "" | 所有会话继承的总人设 |
| sessions | {} | 每会话人设;"" 是通配层 |
| enabled | true | 总开关;false 时不注入,但保留已存文本 |
| mode | append | append 追加段落,replace 改写部署人设 |
| prefix | "" | 写在人设上方的文字 |
| suffix | "" | 写在人设下方的文字 |
| blankOverrides | true | 空白记录是「静音本层」还是「落到下一层」 |
| includeSubagents | true | 子代理会话是否也解析人设 |
mode 也能在运行时用 /persona mode 改。
图形入口:插件 → 已安装
打开 Web 界面左侧边栏的插件(Plugins),切到已安装标签,找到 dsh-persona-slot。它下面那一行 persona-slot 现在带一个向右的箭头,点进去就是这个插件的设置页:
- 总人设:多行文本框,写多长都行;保存后所有没有独立人设的会话从下一步模型调用开始用它。
- 通配人设:给所有还没有自己人设的会话用。
- 注入位置:追加在部署人设之后 / 顶替部署人设 / 跟随 profile 配置。
- 当前会话:列出宿主里每个活动会话实际生效的人设和来源,有独立人设的会话可以直接点「清除」。
面板每 10 秒自动刷新一次;正在输入但还没保存的文字不会被刷新覆盖。
面板通过插件自己的 /persona-slot/state 和 /persona-slot/update 两条路由读写,不经过设置表单——因为官方设置表单的输入框是单行的,装不下角色设定。这也意味着面板保存和会话里 /persona set 写的是同一份文档,两者不会互相打架。
/persona 命令
/persona 看本会话最终生效的人设 /persona show [this|global|all] 看某一个目标 /persona set <文本> 设置本会话人设 /persona set global <文本> 设置所有会话继承的总人设 /persona set all <文本> 设置通配人设 /persona set for <id> <文本> 设置某个指定会话的人设 /persona clear [目标] 删掉记录,让目标落到下一层 /persona mute [目标] 写一条空白,让目标不再往下落 /persona list 列出运行时覆盖 /persona mode append|replace|config 选择人设如何进提示词 /persona reset 清掉全部运行时覆盖
文本原样保留,多行也行。会话 id 只在 for 后面才被识别,所以 /persona set 你是猫娘 是把人设设成「你是猫娘」,不会把它当目标。
运行时状态放在哪
$DSH_HOME/persona-slot/personas.json
profile 配置是部署默认值,这个文件是用户自己敲的。分开存意味着插件升级、profile 重建、重新安装都不会抹掉你在会话里写过的人设。文件坏了会被改名成 personas.json.corrupt 留档,插件以空状态启动而不是直接失败。
它是怎么接进去的
每个活着的 agent 会通过 agent.ctx 注册一条 system-prompt/assemble 监听器。该注册被作用域限到那个 agent,并跟着它一起销毁,因此:
- 两个会话组装出两份不同的提示词,谁也读不到谁的;
- 监听器在每一步都重新读存储,所以 /persona set 下一步就生效,不需要重注册、不需要重启;
- 卸载插件或销毁 agent 时,只摘掉它自己那条钩子。
append 模式下人设成为 persona-slot:session 段,紧跟在部署人设之后;replace 模式下直接改写部署人设那一段。人设文本标记为 interpolate: false,所以人设里字面写 {{任意}} 不会被当成未解析变量而让提示词组装失败。
模型侧影响
模型看到什么
多出一个提示词段(append),或被改写的部署人设(replace),内容就是操作者写的人设文本。人设不变时该段每步稳定不变,供应商的提示词缓存照常复用。
Token 影响
人设文本本身,加上段落之间的一个空行,仅此而已。
KV 缓存影响
人设不变则前缀稳定。/persona set 会改前缀,缓存从该段起失效——这就是对话中途换人格的既定代价。
已知边界
- 不是安全边界。 人设只是操作者写的提示词文本,它不限制工具、不限制沙箱模式、不限制审批策略——那些要靠对应的机制来管。
- 按会话 id 记录,不按标题。 恢复或 fork 的会话 id 不变,人设跟着走;改标题不会搬动人设。
- 一个会话一个人设。 不能在一个会话上叠两层人格,需要就自己合并成一段。
- replace 需要部署人设的位置。 它改写 deployment:persona-prefix;即使某个组合里那段不存在,它也会插到提示词最前面,不会让会话失去人设。
支持的 DSH 版本
0.2.1-rc.2 到 0.2.1-rc.5,声明为
=0.2.0-rc.2 <0.2.1-0 || >=0.2.1-rc.1 <=0.2.1-rc.5。
这个范围之所以写成显式的预发布分支,是有原因的:node-semver 只有在范围里某个* 比较符与该版本处在同一个 major.minor.patch 元组上、且自身也带预发布标签时,才会让预发布版本匹配。所以看起来更宽的 >=0.2.0-rc.2 <0.3.0-0 会静默排除所有 0.2.1- 构建——包括本插件实际测试过的那些。显式分支把 0.2.1-rc.1 到 rc.5 留在范围内,同时正确排除 0.2.1 正式版、alpha 构建与 0.3.0-。
开发与测试基于 0.2.1-rc.2;其后的发布版是同一批宿主包打补丁,而本插件只用到了稳定的接缝(agents、commands、systemPrompt、webServer)。
开发
npm test # 单元测试 + 真实运行时集成测试
npm run check # 每个模块语法检查
集成测试会启动真实的 Cordis 组合(dsh-system-prompt、dsh-agent、dsh-agent-loop、dsh-commands、dsh-session、dsh-tools),断言两个会话组装出两份不同的提示词。用 DSH_HOST_ROOT 指向 @deepseek-ai 宿主包目录来运行;该运行时不存在时测试会跳过而不是失败。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Zylog82568/dsh-persona-slot
为每个会话单独设定人设,并支持随时修改
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目