🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话人设槽 Zylog82568/dsh-persona-slot

DeepSeek 客户端
Zylog825682 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

为每个会话单独设定人设,并支持随时修改

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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 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 宿主包目录来运行;该运行时不存在时测试会跳过而不是失败。
预览分享卡片长什么样 ↓Zylog82568/dsh-persona-slot
分享 · DeepSeek Harness Hub
Zylog82568/dsh-persona-slot

为每个会话单独设定人设,并支持随时修改

这是你的仓库?认领条目

回到顶部