dsh-character-presets:用规则引擎驱动的 DSH「露娜模式」预设

前言

在 DeepSeek Harness(DSH)里做带人设的智能体,常见做法是往 system prompt 里堆性格说明,再指望模型自己「演」出稳定情绪。同一句话换一轮对话,语气可能飘;工作场景和闲聊也容易混在一起。社区插件 dsh-character-presets(维护者 wwwangzilin,目录分类为趣味换装)走另一条路:把情绪感知、状态迁移、表达选择等拆成可复现的规则代码,每次回复前由工具输出一屏结构化指引,模型只负责按指引组织回答。工具能力与内置 standard 预设等价,适合既想要角色感、又不想牺牲编码 Agent 能力面的用户。

这是什么

dsh-character-presets 是 DSH 的 agent preset 插件包(MIT 许可,支持 Windows / macOS / Linux),当前包版本为 2.0.1,要求 DeepSeek Harness 0.2 及以上、Node ≥18。安装后预设选择器会出现 「露娜模式」(预设 id:luna)——魔界小恶魔人设,README 将其描述为雌小鬼风格(毒舌、爱恶作剧、嘴硬等),并挂载同一套六层情感引擎与跨会话记忆。插件以当前 DSH 进程权限运行;安装前建议自行阅读仓库源码与许可证。

工作原理概览

每次模型回复前,预设中的 emotion_sense 工具接收用户消息原文,按固定规则计算六层指引并返回紧凑文本;情绪分类、状态迁移与边界策略由规则实现,不依赖模型自由发挥,因此相同输入在相同状态下判断一致。示意输出如下:

输入:主人认真工作,但这句话像是在开玩笑

【感知】主人认真工作|目标:闲聊|关系:长期主人
【理解】他想要:干净利落的专业帮助;最不想听:拖泥带水、过度卖萌干扰
【状态】你此刻:专注|能量 60 耐心 88 兴趣 70 紧张 25
【表达】进入认真模式,回答专业利落,毒舌收敛成小声吐槽,但称呼主人保留。
【示例】哈?这么简单的问题也好意思问本小姐?(手指却飞快地敲着键盘)……
【调节】正常发挥,保持稳定人设
【记忆】最近聊过:「把模式提取到开源仓库」(2026-09-12,他认真工作)

下面按 README 中的分层说明各模块职责。

角色层、情感层与能力层

层 实现 输出
角色层 agent.cordis.yml 中 persona 行的 prefix 人设、口头禅、行为模式、工作守则
情感层 luna-soul.mjs 及其依赖 六层指引文本
生理层(派生) luna-vitals.mjs 心跳、体温、呼吸与局部体感
记忆层 luna-memory.mjs 等 跨会话写入、检索与失效
能力层 agent.cordis.yml 其余插件行 文件、Shell、检索、Skills、计划、目标、Todo、子代理、Workflow 等

工作模式与闲聊由 luna-mode.mjs 的粘滞状态机区分:进入工作后至少保持 6 轮,仅明确脱离工作的语句可退出;工作模式下表达收敛为结论优先,称呼与少量自嘲保留。

情感引擎要点

感知层叠加否定翻转、强度、混合情绪与标点信号,减少单纯关键词误判。状态层维护心情与能量、耐心、兴趣、紧张等变量;表达层选风格档位,调节层处理降火、陪伴等场景。生理层只报告身体状态事实,不向模型下达「你应该害羞」类行为指令。

粘滞状态机示例(来自 README):

帮我把那个备份脚本改一下  → 工作(进入)
嗯                      → 工作(保持)
继续                    → 工作(保持)
好了吗                  → 工作(保持)
陪我聊会话              → 闲聊(明确脱离,直接退出)

进入工作需工作信号累计 2 分(代码片段、路径、报错、祈使句、追问等);空闲超过 6 小时重置为闲聊。

跨会话记忆

记忆层维护 $DSH_HOME/.luna-heart.json(未设置 DSH_HOME 时为 ~/.dsh/.luna-heart.json),并回退到当前会话工作区根目录。每次 emotion_sense 返回的 【记忆】 行末尾会标明持久化是否成功。删除该文件即重置关系状态。写入经五道校验(逐字引用、来源分类、事实来源、谓词白名单、数字出处);检索经关键词、情绪、时近三通道打分并经 RRF 融合,条数受 maxResults 限制,注入成本不随记忆量线性膨胀。遗忘以抑制为主,每 20 轮自动老化与合并。

安装与启用

推荐通过 CLI 从 Git 仓库地址安装(命令来自官方 README):

dsh plugin add https://github.com/wwwangzilin/dsh-character-presets.git

安装完成后重启 DSH。新会话的预设选择器中选择「露娜模式」,或在「设置 → Agent 预设」中设为默认。dsh plugin add 会把本包写入当前 profile 的依赖与组合列表,并插入 @deepseek-ai/dsh-agent-preset 声明行。撤销示例:

dsh plugin --profile <profile> remove dsh-character-presets

也可用一键脚本(同样来自 README):

curl -fsSL https://raw.githubusercontent.com/wwwangzilin/dsh-character-presets/main/install.sh | bash

Windows 可使用 install.ps1。若已克隆到本地目录,在该 profile 下执行 dsh plugin add <目录> 并重启。注意:DSH 0.1 时代复制到 <dshHome>/.agent-presets/luna/ 的方式自 0.2 起不再生效。

配置与二次开发

选择器中的名称与说明由 package.json 的 dsh.preset 提供(id、name、description、order)。修改 dsh.preset 或 agent.cordis.yml 后需重新生成 bundle 补丁:

node scripts/sync-bundle.mjs

自定义人设可改 agent.cordis.yml 的 persona;情绪规则、工作模式轮数、记忆谓词表等对应 README「自定义」表中的各 .mjs 文件。仓库提供 npm test(纯函数用例,覆盖记忆、门控、召回、情感、bundle 等)。cards/luna.card.json 为 chara_card_v2 格式,可导入 SillyTavern、RisuAI 等前端,与 DSH 预设相互独立。

适用场景与注意

适合在 DSH 里长期结对编程、又希望对话带稳定角色边界与可审计情绪逻辑的用户。规则引擎保证判断可复现,适合对比调试 prompt;记忆落盘在本地 JSON,README 明确不进行网络传输。不适合把插件当作未经审查的第三方代码直接装在生产敏感环境:务必检查源码。社区目录 SkillHub 插件页 与 GitHub 仓库相互引用,目录站点为社区生态,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-character-presets 把「露娜模式」的人设与六层情感、本地记忆、工作/闲聊状态机打包成标准 DSH 插件,能力面与 standard 对齐。若你已在用 DSH 0.2+,可按上文命令安装并在预设选择器中切换体验。

  • 目录页:https://www.skillhub.cn/plugins/wwwangzilin/dsh-character-presets
  • 源码与文档:https://github.com/wwwangzilin/dsh-character-presets
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜