bychv/dsh-preset-enhance ↗★ 37

dsh-preset-enhance

导入、编辑和使用预设、宏及助手预填充功能。 适合需要精细控制提示词结构、使用酒馆预设的高级玩家。

包名
dsh-preset-enhance
兼容性
待验证
版本
0.3.4-rc.3
许可证
MIT
最近更新
2026年10月12日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:bychv/dsh-preset-enhance

DSH Preset Enhance

在 DeepSeek Harness 中导入、编辑和使用 SillyTavern 预设,并为不同模式、不同会话管理工具开关。

当前预览版已验证 DSH 0.1.6-alpha.2、0.1.7-alpha.1、0.1.7-alpha.2、0.1.7-rc.1、0.1.7-rc.2、0.2.0-rc.1 和 0.2.0-rc.2。DSH 0.2.0 后续版本预计不再包含大量破坏性更新,因此插件兼容范围覆盖到 0.2.1。

  • 预设工作台:全局预设库、顺序编辑、消息预览、自动保存和单文件分享。
  • 消息注入:聊天记录前后及指定深度的提示词、变量宏和 assistant 预填充。
  • 工具管理:模式默认、会话覆盖、工具预设、用户分组与 MCP 服务分组。
  • 接口兼容:对话补全接口支持预填充、DSML 工具调用转换和实验性正文提取;Messages 提供有限的预设注入兼容。

安装与上手

DSH 0.1.6 / 0.1.7 / 0.2.0 预览版

安装当前预览版:

dsh plugin --profile web add dsh-preset-enhance@0.3.4-rc.2

安装后重新启动 dsh web,侧边栏会出现“预设工作台”,新建对话的模式列表中会出现“预设模式”。

  1. 打开工作台,导入 SillyTavern JSON 或 .dsh-preset.json 分享文件。导入的预设会保存到全局库,并成为当前默认。
  2. 新建“预设模式”对话,自动启用当前默认预设。已有会话可用 /preset on 开启注入。
  3. 检查提示词顺序与消息预览。如果最后一条消息是 assistant,请使用支持预填充的对话补全接口,并按需开启“预填充自动兼容”。
  4. 在工具面板选择“模式默认”或“当前会话覆盖”,调整工具开关并保存。新策略从下一次请求生效。

DSH 0.1.5

继续使用 DSH 0.1.5 时,固定安装原有 RC 版本:

dsh plugin --profile web add dsh-preset-enhance@0.3.2-rc.2

当前版本声明的宿主范围为 >=0.1.5-rc.2 =0.2.0-rc.1 前缀及兼容接口的思考字段,并保留工具调用历史中的真实 reasoning_content。接口要求见 DeepSeek 对话前缀续写文档。

地址与工具字段

请求目标与设置处理方式
DeepSeek 官方地址匹配的预填充请求自动切换到 https://api.deepseek.com/beta
非官方适配器地址使用适配器实际请求地址,不改写地址,无需在工作台重复填写
开启“处理工具调用”官方与非官方地址均转换工具定义、调用历史和响应,并移除原生工具字段
关闭处理,使用官方 Beta移除 tools、tool_choice 和 parallel_tool_calls
关闭处理,使用非官方地址由“非官方接口移除原生工具字段”开关决定移除或原样发送

工具调用处理会将可用工具定义加入 system 提示,将历史调用与结果转换为 DSML。模型返回的 DSML 再恢复为标准 tool_calls,交给 DSH 执行,支持流式和非流式响应;工具结果中的常见 base64 图片也会转换为兼容的图片内容块。

正文提取与后续预填充

“正文/工具调用提取”是默认关闭的实验功能,使用结束思考标记、10 token 窗口和输出区标签兜底区分思考与正文,移除输出区控制标记,并恢复 DSML 工具调用。策略说明见 预设稳定性实验。

开启时,格式提示词自动加入当前预设的 chatHistory 后方、assistant 预填充前,可在提示词列表中编辑。重复开启保留已有编辑;保存接口设置时会一并保存当前预设。

“工具调用后继续请求的预填充”默认继承原预设,也可填写独立提示词,支持变量宏和 `` 前缀。开启自动兼容后,它只替换同一轮工具执行后继续请求的末条预填充;新一轮用户消息仍使用原预设。留空或展开为空时继续继承。

上述接口设置全局保存,从下一次请求生效。预填充转换只作用于匹配当前会话末条 assistant 前缀的请求。

工具预设与分组

生效范围

范围生效规则
模式默认为每个 DSH 模式选择自定义开关或工具预设,没有会话覆盖时采用此策略
当前会话覆盖完整替换模式默认策略,可在同一会话内随时变更
恢复继承移除会话覆盖,重新使用模式默认

工具目录从宿主模式注册表、模式作用域和当前会话实时获取,兼容其他插件引入的模式与工具。保存后从下一次请求生效;暂时缺失的工具引用会保留,待对应插件恢复后重新匹配。

工具预设支持新建、复制、重命名和删除,可以被多个模式或会话引用。修改预设会影响所有引用者的后续请求。删除仍被引用的预设时,模式回到自定义、会话回到继承,并保留原有逐工具策略数据。直接保存工具开关会将当前范围切换为自定义策略。

用户分组与 MCP

  • 按 MCP 服务自动生成“服务名 · MCP”分组,也可将 MCP 工具加入用户分组。点击“刷新工具列表”重新读取动态工具目录。
  • 用户分组支持名称、排序和成员编辑;同一工具最多属于一个用户分组。固定标签提供“全部”和“未分组”。
  • 分组支持三态开关,以及全开、全关、仅启用此组和恢复预设值。顶部全选 / 全不选作用于当前模式全部工具,不受标签筛选影响。
  • 标签栏保持单行横向滚动,也可折叠为下拉框;窄屏自动使用下拉框。MCP 服务名过长时从中间省略,保留首尾,完整名称可在悬浮提示或下拉框中查看。

关闭工具后,插件过滤请求中的工具定义,并通过执行守卫拒绝调用。在 DSH 0.1.6 中,可限制的继承工具还会通过宿主作用域限制从 PTC(程序式工具调用)的 SDK 提示中移除。宿主保留的 run_code 入口不会被关闭;宿主不允许限制的会话本地工具仍由执行守卫约束。

单文件分享与数据保存

工作台可导入、导出 .dsh-preset.json,也可导出普通 ST JSON。

内容分享文件中的行为
ST 预设包含完整提示词与顺序表
预填充接口配置随文件携带,导入后需手动“应用包内接口设置(全局)”
工具预设与分组默认导出当前关联的工具预设及分组,导入后需手动应用工具配置
会话 ID、模式和会话选择、目录缓存、引用计数不导出
浏览器折叠状态、最后工具模式、自动保存开关及待保存草稿不导出

未知工具格式子版本仍可导入、编辑和再次导出,但不能应用工具配置。字段定义见 单文件格式说明。

预设库、默认选择、会话绑定、接口设置和工具策略默认保存在 DSH_HOME/preset-enhance/state.json;未设置 DSH_HOME 时使用用户目录下的 .dsh。浏览器只保存界面偏好、自动保存开关和待确认的工具草稿。

插件逻辑架构

插件分为工作台、状态与策略、请求处理三部分。预设注入和工具策略独立生效:关闭预设注入后,模式或会话的工具策略仍然有效。

flowchart TD
    UI[侧边栏 / 会话中的预设工作台] --> API[插件 API]
    CMD[本地 /preset 命令] --> STATE[全局状态与会话绑定]
    API  STATE
    HOST[DSH 模式注册表与实时工具目录] --> API
    STATE --> POLICY[解析模式默认 / 会话工具覆盖]
    POLICY --> SCOPE[宿主作用域限制与 PTC 提示重组]
    SCOPE --> REQUEST[DSH 构造模型请求]
    STATE --> PRESET[预设顺序表 / 深度注入 / 宏展开]
    REQUEST --> STREAM[llm/stream 请求处理]
    PRESET --> STREAM
    POLICY --> STREAM
    STREAM --> PROTOCOL{会话实际连接协议}
    PROTOCOL -->|Messages| MSG[有限消息适配]
    PROTOCOL -->|Chat Completions| CHAT[对话补全请求]
    CHAT --> MATCH{是否匹配已启用的预填充}
    MATCH -->|是| BRIDGE[前缀兼容 / 可选 DSML 转换]
    MATCH -->|否| MODEL[模型接口]
    MSG --> MODEL
    BRIDGE --> MODEL
    MODEL --> RESPONSE[按请求配置转换响应]
    RESPONSE --> OUTPUT[正文 / 思考 / 标准工具调用]
    OUTPUT --> DSH[DSH 展示或执行工具]
    DSH -->|工具执行后继续请求| REQUEST

工具执行守卫是独立的最后一道校验:即使历史中已有工具调用,或模型自行生成调用,也会检查当前工具策略。编辑器保留完整的工具目录,不会因某工具被关闭就让它从可编辑列表中消失。

代码对应关系

模块职责
client.js、web/侧边栏与会话入口,预设编辑、预览、工具管理和保存交互
src/index.mts、src/mode.mts插件入口、API、命令、请求拦截、预设模式与生命周期管理
src/lib/store.mts、src/lib/preset-package.mts状态持久化、版本校验、单文件导入导出
src/lib/preset.mts、src/lib/macros.mts顺序表、深度注入、变量宏、最终消息和预填充判定
src/lib/tool-presets.mts、src/lib/tool-restrictions.mts工具策略、分组、会话作用域限制和 PTC 工具可见性
src/lib/connection.mts、src/lib/protocol.mts、src/lib/messages.mts读取实际连接协议、记录协议观察结果、Messages 消息适配
src/lib/deepseek-beta.mts、src/lib/toolcall-prefill.mts、src/lib/output-extractor.mts请求匹配、预填充兼容、DSML 转换和实验性正文提取

宿主侧以 src/**/*.mts 为源码,构建后生成发布包使用的 index.mjs、mode.mjs 和 lib/*.mjs;工作台与客户端入口使用 JavaScript。

启动与运行时启停

初始化会读取状态并根据宿主的 standard 组成注册预设模式。状态损坏、模式组成缺失或目录不可写时,插件保留工作台并显示原因,停止注入和写入,不自动清空数据。修复后重新启用即可。

停用时停止接受新操作,等待在途写入和流式请求收尾,再释放请求桥接。插件不可用时,预设模式会明确拒绝使用。运行时启停与升级安装包是不同操作,安装或升级后仍按安装步骤重启宿主。

Chat 适配器模型

工作台切换连接时会同步当前会话的模型选择器,优先保留同名模型;目标目录没有该模型时选择其默认或首个模型。已在执行的请求继续使用原连接,下一次请求使用新选择。

插件 Chat 适配器默认同步官方适配器的模型列表。DSH 设置的预设增强插件页面可直接修改或新增 Chat 模型,配置模型 ID、名称、上下文长度、最大输出及输入类型。未手动配置时跟随官方列表;重置该字段或清空列表恢复同步。模型配置由宿主管理,不随预设分享。

开发与验证

npm install
npm run build       # 类型检查并生成发布用 JavaScript
npm test            # 本地回归用例
npm run pack:check  # 检查 npm 打包内容

本地双协议端点可用于观察 Chat Completions 与 Messages 的流式响应和请求记录:

node tests/fixtures/protocol-server.mjs --demo
node tests/fixtures/protocol-server.mjs

具备本机沙盒环境时,npm run test:mcp:candidate 可在 candidate 槽位启动两个隔离的 stdio MCP 服务,检查发现、调用和分组;结束后关闭测试服务,不写入 candidate 配置。

许可证

MIT