dsh-alive:在 DSH 里用宿主插件做「活人感」

前言

DeepSeek Harness(DSH)把对话能力拆成 Cordis 插件栈:模型、工具、会话状态各自挂扩展点。默认助手往往「有问必答、一条流到底、语气恒定」,和 IM 或角色 bot 里常见的「偶尔不回、分条出现、亲疏有别」不是同一套行为。

要在不改前端、不碰模型权重、不写外部文件的前提下,让会话侧多出这类节奏,需要在 agent/pre-step、会话投影和工具注册上动手。下面介绍社区插件 dsh-alive(维护者 Kaitox326,分类:趣味换装):它把五条机制收进一个 bundle,状态跟着 session 落盘,由 session 事件推导。

这是什么

dsh-alive 是面向 DSH 的「活人感」宿主插件:不回、分条节奏、状态外置、脏记忆、差序对待。它不替代人格 prompt 或长期记忆方案,而是在每轮进模型前做概率拦截、注入节奏与状态提示,并从用户消息里用规则抽少量「印象」。

项目地址:GitHub — Kaitox326/dsh-alive;社区目录页:skillhub.cn/plugins/Kaitox326/dsh-alive。DSH 生态是「一切皆插件」;目录站为社区独立站点,与 DeepSeek / 幻方无官方从属关系。

当前 package 版本为 0.1.0,许可证 MIT,要求 Node >= 22。

核心功能:五条机制落在哪

README 用一张表概括实现方式;下面按同一事实展开,便于对照配置项。

机制 落在哪 对应配置
不回 agent/pre-step 返回 { kind: 'reject' },这一轮不进模型 silentChance
分条 + 延迟 注入节奏指令;可选自带停顿工具 paceHint / selfPaceTool
状态外置 sessionProjections 的 alive 状态:mood / energy / intimacy stateHint
脏记忆 从用户消息里抽印象条目,不是档案 maxImpressions
差序对待 intimacy 同时决定注入措辞和说话硬度 同上

不回是真的不回。 reject 之后这一轮不产生任何输出,消息留在 inbox,下次唤醒才处理。桌面端表现就是「没反应」,容易误以为插件异常。因此默认 silentChance 为 0,需自行开启;作者建议从 0.1 起试。超过 silentMaxChars(默认 6 字)一律回复,不装死。命中 PITY 的输入一律回复,与活人感开关无关。

分条在 DSH 里不是「发多条 IM 消息」:assistant 仍是一条 message 流式渲染。分条依赖模型在段落之间调用停顿工具,让文本一块块出现——与 dsh-chat-pace 同一路子,本插件复用节奏提示,没有另造 IM 语义。

脏记忆是规则抽取,不是模型总结。只认三种句式:「我叫 X」「我喜欢/讨厌 X」「我在 X 上班/上学」。抽到就存,内部最多留 8 条、注入时带 maxImpressions 条(默认 5)。复杂来龙去脉应交给 dsh-context 等长期记忆插件。

状态推导(README 已验证部分):普通消息 mood +0.02、被同情 −0.25、挨骂 −0.15、回复后 energy −0.03;插件自注入的消息在 reduce() 里被忽略。

安装与启用

在 DSH 内安装 bundle(路径换成你本机克隆或解压后的插件目录绝对路径;资料未给出 github:owner/repo 一键命令,勿凭名称拼接):

plugin_manager action=install_bundle target="<插件目录绝对路径>"

或命令行:

dsh plugin add <此目录绝对路径>

装完重启 DSH 桌面端。desktop profile 被 Electron 独占,改完不重启看不到效果,命令行也无法 --dump-config 替代桌面侧生效。

在 ~/.dsh/profiles/desktop/cordis.patch.yml 增加同 id 的覆盖,例如:

- id: dsh-alive
  name: "dsh-alive"
  config:
    silentChance: 0.2
    paceHint: true
    selfPaceTool: false
    stateHint: true
    maxImpressions: 5

全部默认值(摘自 README):

键 默认 说明
enabled true 总开关
silentChance 0 不回的概率,默认关
silentMaxChars 6 超过字数一律回
paceHint true 注入节奏指令
paceToolName hold_for_followup 指令里提到的工具名
selfPaceTool false 自己注册停顿工具
stateHint true 注入状态和记忆
maxImpressions 5 最多带几条印象

与 dsh-chat-pace 的关系

dsh-chat-pace 已提供 hold_for_followup。若已安装,保持 selfPaceTool: false,节奏提示会指向该工具。若未安装,可将 selfPaceTool 设为 true,插件会注册同名工具。两个插件同时注册同名工具会报错,不可双开。

版本适配与扩展点

插件只使用三个宿主扩展点,写在 apply() 里,无全局补丁:

  • agent/pre-step — waterfall,decision 为 { kind: 'enter' | 'reject' }
  • sessionProjections.register / stateOf — 状态落盘(stateVersion: 1)
  • ctx.tools.register + defineTool — 工具注册

README 记载已验证版本:@deepseek-ai/dsh-* 0.1.2-rc.1、@deepseek-ai/cordis 4.0.2、schemastery 3.18.2、zod 4.5.4。更高版本时作者说明:服务缺失不崩、pre-step 结构变更只改 apply() 内两处判断、状态带版本号、不依赖包内 lib/ 深层路径。

未验证:在真实 DSH 进程里加载;agent/pre-step 监听顺序、stateOf 返回值时机仅在类型层核对。第一次装完建议先发一条普通消息,看日志里 alive 是否报错。

适用场景与注意

适合:希望在 DSH 桌面会话里试「概率不回 + 节奏提示 + 轻量印象 + 亲疏语气」,且能接受默认助手行为被改写的开发者或玩家向配置。

不适合:需要可靠长期记忆、复杂人设档案,或不能接受某轮完全无输出的场景(请保持 silentChance: 0)。

插件以当前 DSH 进程权限运行;安装前请自行阅读 源码与 LICENSE,确认行为与合规要求。

结尾

dsh-alive 把活人感的五条机制收敛到一个 Cordis bundle:不改前端、不碰模型、状态随 session 落盘。配置集中在 cordis.patch.yml 覆盖项;与 dsh-chat-pace 分工明确,避免重复注册 hold_for_followup。

  • 目录页:https://www.skillhub.cn/plugins/Kaitox326/dsh-alive
  • GitHub:https://github.com/Kaitox326/dsh-alive
羽毛球分组比赛记分
小程序二维码

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

小夜