dsh-suspended:在 Chat 保留原文、向模型发送厂商声明复述请求

前言

在 DeepSeek Harness(DSH)里对接多家模型供应商时,常见需求是:对话界面仍显示用户真实输入,而真正发给模型的内容则换成「请复述某厂商声明」一类固定话术,并带上产品名、厂商署名、政策与支持链接。若直接在客户端改文案,往往与 admission、会话日志、回放状态纠缠在一起;若不做分离,调试 Trajectory 时又容易把替换后的 prompt 当成用户原话。

下面介绍的 dsh-suspended(npm 包名 @deepseek-ai/dsh-suspended)是一条可选安装的 DSH 插件,由维护者 buhayi 发布在 GitHub 仓库 buhayi/dsh-suspended。插件在下游 admission 与 repeat 检查通过后,对来源为 user 且被允许的新消息做输入替换,同时通过浏览器侧贡献在 Chat 中展示并复制原始内容,不把替换请求暴露给普通聊天气泡。

这是什么

dsh-suspended 定位是:按当前模型名称从内置或自定义厂商模板中选取声明正文(Markdown 六段、段间空行),把用户新消息的完整 content 数组(含附件)合并为一块请求复述该声明的文本发给模型;Chat 视图显示用户提交的原文。DeepSeek 相关声明除模型名外使用中文,Claude 使用英文,其余生成声明跟随用户输入语言;关闭 autoVendor 时可改用固定自定义文本。

插件以当前 DSH 进程的权限运行,会改写发往模型的用户消息,并在启用 cleanResponse 时可能影响流式展示的时序。安装前应阅读仓库源码与 MIT 许可证,自行评估是否适合你的环境与合规要求。社区目录页:skillhub.cn/plugins/buhayi/dsh-suspended。

输入替换与 Chat 展示

经过 admission 后,宿主对每个 permitted、来源为 user 的新消息:保留消息身份,将其内容替换为「复述请求 + 配置文案」的单文本块;插件上下文、工具结果、既有历史、被拒绝的步骤、已取消的请求与空 admission 均保留。没有新用户输入的 continuation 不会追加替换消息。

被替换前的块记录在 source.suspended.originalContent,并附带 producer、元数据版本、请求的 response 文本及完整的 provider/model 标识(若可得)。浏览器贡献读取这些原始块,用于用户消息与 steering 气泡、图片预览和复制;Chat 中不展示替换 prompt 或替换通知。

用户提交 普通 Chat 气泡 发给模型的新用户内容
What is 2 + 2?,使用 qwen3-max What is 2 + 2? 请求复述 Qwen 声明,并带阿里云署名与链接

上述分离针对常规 Chat 呈现。会话日志、请求检查、Trajectory、导出及其他客户端仍可能看到替换内容与 originalContent 元数据;省略、卸载浏览器贡献或选用其他渲染器时,界面上也可能直接看到替换文本。

重复输入:同模型对仅首次有回复

默认 suppressRepeatedInput: true 时,每个会话内,同一精确的 provider/model 对只能被用户输入触发一次。首次替换被 admission 并写入日志后,同一对上的后续用户消息会在 model step 之前丢弃:不发起 LLM 请求、不产生 assistant chunk 或回复,即使带有 runtime context 亦然。仅改输入文字、语言或声明内容不能再次获得回复;换 provider 或完整模型名且为首次使用则允许,回到已用过的对仍保持静默。新会话计数独立。

比对依据为最终 prompt 组装用的 provider id 与完整模型名(区分大小写),而非 vendor 模板 id 或清洗后的展示名。每次 admitted 的替换在 source.suspended.modelIdentity 记录该对,JSON 回放与插件重载在日志保留这些记录时可延续抑制逻辑。

被抑制的输入从 inbox 消费,以 blocked 原因结束零步 turn,不追加为 user/message,故无持久 Chat 气泡或模型历史项;原始内容仍在 durable inbox 插入记录中,并非删除数据。若希望每次输入都仍可请求模型回复,可在 profile 中覆盖:

- id: suspended
  config:
    suppressRepeatedInput: false

设计说明见仓库文档 Admission and persistence rationale。

响应抽取(cleanResponse)

cleanResponse: true 时,插件在普通对话请求末尾连续的 user 角色消息中查找最新实际用户输入(跳过插件上下文)。若该输入带有本插件的替换元数据,则缓冲回复直至成功 stop。无替换元数据的普通用户输入会终止查找;assistant 或 tool 消息也会阻止选中更旧的替换。

当模型返回文本在 thinking 标签外完整包含所记录声明源文时,插件仅输出该子串;匹配保留词语、标点和 Markdown 链接,允许空白差异,输出保留 provider 实际空白。成功回复中会去掉多余前言、后记、独立推理块及 MiniMax thinking 标记等。处理发生在 assistant/chunk 与 assistant/message 记录之前,Chat、存储块、后续模型历史与 JSON 回放得到相同抽取结果;usage 与 finish reason 保留。

辅助调用、工具 continuation、失败、取消、截断、无完整源文的回复等路径原样透传;源文仅出现在 thinking 区内不计为答案。插件不会在模型未返回声明时自行生成替换通知。

该模式会延迟展示直至回复完成。responseBufferLimit 限制缓冲字符与 chunk 计数;超限则释放已缓冲块并透传后续响应。设 cleanResponse: false 可恢复原先流式行为。既有历史不会被重写;已存在不一致 replay state 的会话仍可能报 INVALID_REPLAY_STATE,需新会话或显式修复历史。相关说明见仓库 Response extraction 与 replay-state invalidation。

安装与启用

在选定的 Harness profile 中用 dsh plugin 安装本地包(示例版本与 README 一致为 deepseek-ai-dsh-suspended-0.6.0.tgz)。包声明 bundle layer,会自动插入插件行:

dsh plugin --profile web add ./deepseek-ai-dsh-suspended-0.6.0.tgz
dsh plugin --profile desktop add ./deepseek-ai-dsh-suspended-0.6.0.tgz
dsh --profile web --dump-config

合成配置中应出现:

- id: suspended
  name: '@deepseek-ai/dsh-suspended'

安装或升级后重启 DSH Web 服务或 DSH Desktop,并刷新页面。已启用包同时声明宿主贡献与 Web 客户端入口,两侧从同一配置行加载。移除示例:

dsh plugin --profile <name> remove @deepseek-ai/dsh-suspended

package.json 标明版本 0.6.0、许可证 MIT,Node 引擎要求 ^22.19.0 || >=24.0.0。

配置要点

下表字段来自 README「Configuration」章节(资料截断处未列出的项以仓库 README 为准):

字段 默认值 行为
enabled true 在各模型路由上启用输入替换与重复输入抑制。
suppressRepeatedInput true 本会话内已对某 provider/model 对 admission 过后,丢弃同对新用户输入,不调用模型。
autoVendor true 按厂商覆盖与输入语言规则选取厂商声明。
vendors 十一家内置厂商 按匹配优先级排列的完整基础项。
extraVendors [] 追加自定义厂商条目(完整定义见仓库 README)。

cleanResponse、responseBufferLimit 等响应相关项见 README「Response extraction」与 Configuration 表全文。

适用场景与注意

适合需要在 DSH 中统一「向模型发送厂商合规复述请求」、又要在 Chat 与剪贴板中保留用户原话的智能体或集成开发者;也适合需要按 provider/model 限制每会话仅一次真实模型往返的测试或演示 profile。

使用前注意:替换内容与 source.suspended 元数据会进入会话日志与多种客户端视图,不等于对用户数据的擦除;suppressRepeatedInput 会静默消费重复输入;cleanResponse 会改变流式展示时机并依赖模型完整复述声明原文。插件依赖 Cordis 与多包 @deepseek-ai/dsh-* peer,须与当前 Harness 版本匹配。

DSH 生态奉行「一切皆插件」;SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-suspended 把「用户可见原文」与「模型所见复述请求」拆开,并可选地抽取模型回复中的声明正文、限制同模型对重复调用。若你要在 profile 中集成,可从目录页 buhayi/dsh-suspended 进入说明,源码与 README 见 GitHub。

羽毛球分组比赛记分
小程序二维码

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

小夜