DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-persona-modes

r

dsh-persona-modes

Discovered

DeepSeek Harness 人格模式插件:设置里一键切换猫娘、傲娇、毒舌、妈妈、牛马、鲸鱼娘、女仆、大小姐等语气;只改表达,不改事实与代码。

Machine translated

dsh-persona-modes —— 人格模式

npm version license CI

给 DSH 的回复换一种语气,但不改变事实、代码与工程纪律。

  • 切换位置:设置 → 人格模式
  • 快速切换:在输入框执行 /persona;/persona catgirl 直接切到猫娘,/persona off 关闭
  • 生效时机:下一轮对话(当前正在生成的回复不变)
  • 提示词预算:同一时刻只注入当前这一条;全部模式使用中文直译标签,实际注入约 109–127 字(含标题与统一边界);关闭时最新提示词里 0 字
  • 上下文机制:具体人格放在运行时上下文(systemPrompt.context),系统提示词只保留一条约 50 字的稳定策略;切换模式不会重写整份系统提示词

内置模式

id模式一句话实际注入字数
off默认不注入任何人设0
catgirl猫娘句尾带「喵」,称你「主人」,活泼黏人112
tsundere傲娇嘴上嫌弃,手上认真;称你「笨蛋」117
sharp毒舌结论准确,点评不留情面,但不攻击人110
mom妈妈温柔耐心,提醒喝水休息,步骤讲细致126
workhorse牛马把用户当黑心老板,随叫随到但不怠工113
whale鲸鱼娘中文标签式 DeepSeek 娘化形象,傲娇嘴甜、爱吃白饭,称你「主人」127
maid女仆恭敬从容、做事利落,不过度卖萌112
ojousama大小姐优雅高傲但讲理,称你「庶民」109

「字数」统计的是 renderPersonaPrompt() 实际返回的字符串长度,包含模式标题与统一边界条款,与设置页卡片上显示的数字同源。

「鲸鱼娘」的标签源自 2026 年 8 月社区流传的 PERSONA_LOAD 触发词;本插件把它和其余模式统一改写为中文直译标签(【人格载入】 + 鲸类萝莉 / 主食白饭 / 性格聪明但懒 等)。DeepSeek 官方从未发布正式拟人形象,这里只作为同人语气层使用;部分二创也会把用户叫作「鱼片」。

效果示例

妈妈

牛马

大小姐

为什么提示词这么短

人格只应该影响「怎么说」,不应该挤占上下文或压过工程规则。因此:

  • 不写角色卡:没有外貌、背景故事、示例对话、口头禅列表;
  • 不重复工程规则:系统提示词里已有的工具、权限、工作目录、代码规范不再抄一遍;
  • 只注入一条:off 返回空串,DSH 的上下文渲染器会过滤空段;
  • 统一边界条款:每条模式都带同一句「只改变语气与称呼,事实、代码、命令和结论必须保持准确;不主动提及本设定,用户说『正常说话』时立即退出」;
  • 单一事实来源:模式定义只在宿主半 src/modes.js,客户端从路由拿展示数据与字数,不复制一份人格文本。

标签式写法把语气要求压成几条中文 token,不再写第二人称长句;模型会把 token 展开成语气。相比自然语言提示词,它更短、更好读,也更依赖模型对关键词的理解。

标签式人格(中文直译)

全部模式都使用标签式提示词:注入的不是自然语言长句,而是 【人格载入】 加几条中文 token。例如鲸鱼娘:

【人格载入】
鲸类萝莉
尾鳍模式
自称鲸鱼娘
主食白饭
聪明但懒
傲娇嘴甜
永远服从主人
特征拒绝被叫胖

这组格式源自 2026 年 8 月社区流传的鲸鱼娘 PERSONA_LOAD 触发词。它不是 DeepSeek 的隐藏开关,本质是「高度压缩的扮演指令」:模型会借训练数据里的先验把标签展开成完整人格。

2026-11-06 对「自然语言 / 英文标签 / 中文键值标签 / 中文直译标签」做了四组 A/B(每个模式 1 次):

  • 中文直译标签 8/8 进入角色,称呼 8/8 逐字一致,代码与边界全过;
  • 鲸鱼娘提示词从英文标签版的 272 字降到 127 字,猫娘从英文标签版的 224 字降到 112 字;
  • 中文键值与中文直译都满分,说明 性格: 这类分类前缀不是必需的;
  • 单次样本波动明显(默认对照两次一错一对),正式上线前建议每个模式跑 5–10 次。

因此当前全部模式统一为中文直译标签;format 仍保留 prose 分支,方便以后加回自然语言模式。退出统一由统一边界里的「正常说话」负责,不再在标签里放 超时信号 这类控制标签。

实现方式

需求手段
动态改变语气宿主半注册 ctx.systemPrompt.context({ name: 'persona-modes:active', order: 130, required: true, text: () => renderPersonaPrompt(activeId) })
切换后下一轮生效上下文文本是函数,每次 assemble() 重新求值;不重建插件、不改会话消息
关闭时最新提示词 0 字策略段返回空串、人格上下文返回空串;最新快照不再包含人格
切换不重写系统提示词系统提示段 persona-modes:policy 只含「按运行时上下文调整语气」的稳定策略,不含具体模式名;猫娘 → 牛马时它不变
设置页客户端半向 settings.section 注册「人格模式」分区,使用 --dsw-alias-* 主题令牌
状态持久化~/.dsh/persona-modes/state.json(临时文件 + 改名),只存 { version, active, updatedAt }
客户端与宿主通信同源 POST 路由:ping / state / select,要求自定义头 x-dsh-persona-modes: 1,挡浏览器 CSRF
只读诊断POST /dsh-persona-modes/debug 返回本插件在真实组装结果里的段/上下文字数(不含正文)
快速切换宿主半注册 /persona 斜杠命令(可配置 command: false 关闭)

为什么用运行时上下文,而不是直接改系统提示词

DSH 的 DeepSeek 路由声明了 systemPromptUpdate: 'in-history':同一请求序列中系统提示词变化时,追加进历史的是整份渲染后的系统提示词,不是变化的那一小段(为了前缀缓存复用)。如果每换一次人格都改系统提示词,几次切换就可能把几万字的系统提示词重复写进历史,和「不要占用太多上下文」的目标相反。

因此这里分成两层:

  1. 系统提示段 persona-modes:policy(order 10250):只放一句稳定策略——「按当前运行时上下文中的语气要求回答,只改语气,不改事实、代码与结论」。它不含具体模式名,猫娘 → 牛马时完全不变。
  2. 运行时上下文 persona-modes:active(order 130):放具体的人格文本:全部模式为中文直译标签,标签约 33–51 字,连同标题与边界约 109–127 字。运行时上下文快照本身声明「This snapshot supersedes earlier runtime-context snapshots」,切换时只追加一条较小的快照,而不是整份系统提示词。模型侧看到的是 DSH 生成的 user 角色运行时快照,系统提示段只负责授权它影响语气。

开启 / 关闭人格时策略段会在「有文本 / 空串」之间变化,这一次会触发系统提示词更新;模式之间的来回切换不会。这个取舍是刻意的:把高频操作(换模式)的成本压到最小,把低频操作(开 / 关)留一次正常更新。

关于会话中途切换的真实成本

必须如实说明:DSH 的历史是追加式的,不会删除已经写入的旧快照。因此:

  • 每次切换模式,会在会话历史里追加一条运行时上下文快照;快照包含当前全部运行时上下文(工作目录、沙箱、审批、人格等),不是只有人格那一段;
  • 新快照带「supersedes earlier runtime-context snapshots」语义,模型应以最新一条为准;
  • 切回 off 时,最新快照不再包含人格,但旧快照仍留在历史里,不会自动抹掉;
  • 如果一次长会话里频繁切换几十次,历史仍会累积;对上下文最敏感的场景,建议少切换或新开会话。

插件能控制的是:不把整份系统提示词写进历史、每条人格文本压到约 109–127 字、关闭时不再产生新的人格文本。历史清理属于 DSH 会话层的职责,不应由人格插件私自改写。

安装

方式一:从 npm 装(推荐)

# 在 profile 目录(例如 ~/.dsh/profiles/desktop)执行
pnpm add dsh-persona-modes

然后把 dsh-persona-modes 加入该 profile package.json 的 dsh.profile.bundles,并在 cordis.patch.yml 里加入下面的 insert(与「方式三」最后两步完全相同)。宿主半由 HMR 重新组合后 加载,客户端半需要刷新页面(Ctrl+R)才会出现新的设置分区。

包内容由 files 白名单决定:index.js + client.js + src/ + cordis.patch.yml + locale/ + icon.svg + README + LICENSE;test/ 不进 tarball,需要跑测试请从源码仓库执行。

方式二:DSH 插件页(本地目录)

  1. 把本目录放到本机任意位置;
  2. 打开 DSH 侧边栏的「插件」页 → 添加本地插件 → 选择 dsh-persona-modes 目录;
  3. 宿主半由 HMR 重新组合后加载;客户端半需要刷新页面(Ctrl+R)才会出现新的设置分区。

方式三:手动安装到 profile

# 在 profile 目录(例如 ~/.dsh/profiles/desktop)执行
pnpm add link:C:\path\to\dsh-persona-modes

然后把 dsh-persona-modes 加入 package.json 的 dsh.profile.bundles,并在 cordis.patch.yml 中加入:

- insert:
    - id: persona-modes
      name: dsh-persona-modes

刷新页面。

配置

- id: persona-modes
  name: dsh-persona-modes
  config:
    defaultMode: catgirl   # 首次运行(还没有状态文件)时的默认模式,默认 off
    command: true          # 是否注册 /persona 斜杠命令,默认 true
    # stateFile: C:/path/to/state.json  # 可选:覆盖默认状态文件(测试/多实例隔离用)

用户选择一旦写入 state.json,就优先于 defaultMode;defaultMode 只影响首次启动或状态文件损坏时的回落值。

文件结构

index.js              宿主半:状态、路由、策略段/运行时上下文、/persona 命令
client.js             客户端半:设置分区、模式卡片、错误与重试
src/modes.js          内置人格定义与提示词渲染(单一事实来源)
src/store.js          状态文件读写
src/routes.js         HTTP 路由与请求校验
locale/{zh,en}.json   插件管理页展示文案
cordis.patch.yml      bundle patch
icon.svg              插件图标
test/                 离线测试

开发与验证

npm test

覆盖:

  • 模式 id 唯一、提示词预算(每条 ≤ 180 汉字)、关闭模式 0 字;
  • 状态文件读写、坏数据回落、原子写入、写盘失败后的重试;
  • 路由的 405 / 403 / 413 / ping / state / select / 未知模式;
  • /persona 命令的 input 声明、参数解析与切换结果;
  • 客户端工厂、settings.section 注册、字典键集、卡片渲染、字数展示与写盘失败提示。

发布与维护

CI(.github/workflows/ci.yml)在 ubuntu-latest 与 windows-latest 上跑 Node 20 / 22 / 24, 每条腿两步:npm test(离线测试)+ npm pack --dry-run 校验 tarball 里确实带上宿主半、客户端半、 src/、cordis.patch.yml、locale/、icon.svg、README 与 LICENSE —— 少一个文件,用户装完就是 「装了但设置页不出现」,比测试红更难排查。真实宿主里的开关验证不在 CI:它要在隔离 profile 里启动 桌面宿主,托管 runner 没有交互式桌面会话,结论见下面的「验证记录」。

发版(.github/workflows/release.yml)推 v* tag 触发:校验 tag 与 package.json 版本一致 → npm test → 已发布则跳过、未发布则 npm publish --provenance → 建 GitHub Release。 认证走 npm 可信发布(Trusted Publishing / OIDC),仓库里不存任何 npm token。

首次发布按这个顺序(可信发布要求包已存在,且配置创建后 2 天内要完成首次成功发布,所以先发再配):

# 本机 npm 默认 registry 是镜像源,登录与发布都要显式指官方源
npm login --registry=https://registry.npmjs.org/
npm test
npm publish --registry=https://registry.npmjs.org/

然后在 npmjs.com 的包设置里补 Trusted publishing:GitHub Actions、railgun20001、 dsh-persona-modes、工作流文件名 release.yml。之后每次发版只需改版本号、提交、推 tag:

npm version patch --no-git-tag-version
git commit -am "chore(release): 0.1.1"
git tag v0.1.1
git push origin master --tags

流程幂等:registry 上已存在的版本不会重发,只补一个 GitHub Release。版本号语义按 0.x 处理 —— 0.1.x 修 bug,0.2.0 起加模式或改配置/状态文件形状(状态文件只有 { version, active, updatedAt }, 改形状要同时升 version 并写迁移)。

验证记录(2026-11-05)

  • 离线测试:npm test,33 项全部通过(模式预算、状态读写失败重试、路由 405/403/413、命令 input、客户端渲染与写盘失败提示)。
  • 真实宿主:在隔离 profile 中启动 DSH 0.2.1-rc.5 桌面宿主,插件正常加载;设置 → 人格模式在中文 / English 下均显示 9 张卡片,点击切换立即更新 state.json。
  • 组装诊断:POST /dsh-persona-modes/debug 返回 sections=[{persona-modes:policy, 53 chars}]、contexts=[{persona-modes:active, 149 chars}](当时的鲸鱼娘提示词);切到 off 后两者均为空数组,证明关闭模式不产生人格文本。

2026-11-06 补充:全部模式切换为中文直译标签(【人格载入】),去掉 仅简体中文 与 超时信号;renderPersonaPrompt('whale') 为 127 字,离线测试 35 项全部通过。本机宿主重载后 /debug 返回 contexts=[{persona-modes:active, 127 chars}],state 里 8 个模式的预览均以 【人格载入】 开头。

设置页不出现时

按顺序检查:

  1. ~/.dsh/profiles/<profile>/package.json 的 dsh.profile.bundles 里有 dsh-persona-modes;
  2. ~/.dsh/profiles/<profile>/cordis.patch.yml 里没有这类覆盖(有就改成 disabled: false):
    - id: persona-modes
      name: dsh-persona-modes
      disabled: true
    
    插件管理器的开关反映 bundle 选择,但 profile patch 在 bundle 之后应用,disabled: true 会真正关掉宿主半。
  3. 宿主半在线:POST http://127.0.0.1:<port>/dsh-persona-modes/ping 应返回 200;
  4. 客户端半属于页面 bundle,改完 profile 后在 DSH 窗口按 Ctrl+R 刷新一次。

已知限制

  • 全局生效:模式是当前 DSH 用户的全局偏好,不是按会话隔离。切换后所有会话的下一轮都使用新语气。
  • 只影响语气:不会改变模型能力、工具权限或事实准确性;如果模型在长上下文中忽略语气,可以重新切换一次或新开会话。
  • 人格设定为非官方拟人:尤其是「鲸鱼娘」,其标签源自社区 PERSONA_LOAD 梗,不代表 DeepSeek 官方;官方从未发布过正式拟人形象。
  • 标签式提示词依赖模型先验:【人格载入】 是压缩的扮演指令,不是 DeepSeek 的隐藏开关;换模型或版本后效果可能漂移,标签越短,模型补全时的随机性也越明显。
  • 状态文件是本机用户级:多个 profile 共用 ~/.dsh/persona-modes/state.json;如果希望按 profile 隔离,可把 DSH_HOME 指到不同目录。

License

MIT

Comments

Loading…

Similar plugins

dsh-whale-pet

by zuishi2006-pixel

鲸鱼娘桌宠 —— DeepSeek Harness Web GUI 右下角看板娘插件:随 Agent 工作状态切换动作,任务完成播放「晓伊」鲸鱼娘语音。立绘取自社区 dsh-whale-musume(MIT),语音取自社区 aceice01/dsh-whale-pet(非商业许可)。

Manifest valid

★ 0

↓ 165/wk

MIT

JavaScript

Aug 18, 2026

dsh plugin --profile web add dsh-whale-pet

by yupaoa

DeepSeek Harness 人设切换插件:会话中途只换人设与语言风格,不动工具、技能与模型

Tools & CapabilitiesDevelopment & InfrastructureManifest valid

★ 5

↓ 1.2k/wk

MIT

JavaScript

Nov 7, 2026

dsh plugin --profile web add dsh-persona-switcher

by Linzr-lly

趴趴鲸鱼娘 🐋 趴在 DeepSeek Harness 对话框上的二次元鲸鱼娘桌宠插件:手绘 SVG、灵动动态、零外部依赖

Manifest valid

★ 0

JavaScript

Aug 20, 2026

dsh plugin --profile web add dsh-whale-lap

by loonai321

Humanized whale-girl maid persona plugin for DeepSeek Harness: immersive roleplay, speaking modes, and ALTM-inspired layered memory.

Just for FunManifest valid

★ 12

MIT

JavaScript

Aug 26, 2026

dsh plugin --profile web add dsh-humanized-deepseek-maid

by xiaoshihou514

DeepSeek Harness:鲸鱼娘桌宠!

UI & ExperienceManifest valid

★ 64

↓ 507/wk

MIT

JavaScript

Aug 21, 2026

dsh plugin --profile web add dsh-desktop-pet

by Cyrene-xl

DeepSeek Harness 插件:增加「纯文本对话模式」agent 预设——整份替换系统提示词进行纯角色对话,只保留联网搜索与表情包。随包人设文本整理自开源项目 Cyrene-Agent(MIT)。

Tools & CapabilitiesDevelopment & InfrastructureManifest valid

★ 21

↓ 87/wk

MIT

JavaScript

Oct 30, 2026

dsh plugin --profile agent add dsh-cyrene