dsh-tier-boost
Verifieddsh-tier-boost · v1.1.0 · MIT
DeepSeek 六档推理等级(low/medium/high/xhigh/max/ultra):接管 deepseek-account 适配器,把右下角菜单从四档扩到六档;max/ultra 两档额外注入强化流程与 Agent Team 行为块。
Install
dsh plugin add dsh-tier-boost Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Readme
dsh-tier-boost
给 DeepSeek 线路加六档推理等级(Low / Medium / High / xHigh / Max / Ultra), 并在高档位自动注入强化流程 / Agent Team 提示词。
档位显示名、行为块正文、出网值映射全部可以配置——想改档位/文案/行为块/出网值都不用碰源码。
安装
dsh plugin add dsh-tier-boost
装完在 profile 的 cordis.patch.yml 里加一条。两种上线方式,选一种:
A. mode: own —— 通用路线(推荐给别人装)
用自己的 provider 名另起一条路,不碰内置行(内置 deepseek-account 照常可用):
- id: llm-tier-boost
name: dsh-tier-boost
config:
mode: own
provider: my-six-tier # 省略时默认 = 插件名 dsh-tier-boost
displayName: My Six Tier # 省略时默认 = "dsh-tier-boost(六档)"
extraProviders: [] # 同一套六档再作用到别的 provider 上,例如 [scnet]
B. mode: declare —— DSH 内部路线(桌面端在用)
declare 靠包裹宿主内置的 deepseek-account 适配器实例实现(只改声明层、不动注册关系,
所以没有"内置行已停用但本插件还没注册上"的启动窗口)。代价是它天生绑死
deepseek-account 这一个 provider——所以它是 DSH 自己的用法,不是给第三方线路的通用路线:
- id: llm-deepseek-account-tier
name: dsh-tier-boost
config:
mode: declare
(注:mode: declare 和 A 里的 mode: own 底层都是 @deepseek-ai/dsh-llm-deepseek 的适配器实例——
换的是 provider 名,不是厂商。要在别的厂商线路上叠六档,走 extraProviders:
它包裹的是那条线自己的适配器,与厂商无关。)
插件自带补丁里那条 config 只是出厂样例;同名 - id 的 profile 条目会整条覆盖它,
所以真正生效的是 profile 里那份(改完看 GET /plugins/<插件名>/state.json 自证)。
为什么需要它
- 右下角的推理等级菜单只显示适配器 advertise 的档位,而内置的
deepseek-account适配器把档位硬编码成四项off/low/high/max(@deepseek-ai/dsh-llm-deepseek的modelInfo()),没有任何配置项能扩展它。 - 发往
api.deepseek.com的output_config.effort也只接受off/low/high/max四个值(同一个文件里校验,非法值抛UNSUPPORTED_REASONING_EFFORT)。
所以"六档"必须是:菜单里六档 ≠ 出网四档,中间由适配器做映射。
六档映射(出厂默认)
| 菜单显示 | 档位 id | 出网 effort | 注入的提示词块 |
|---|---|---|---|
| Low | low |
off |
无 |
| Medium | medium |
low |
无 |
| High | high |
high |
无 |
| xHigh | xhigh |
max |
无(=改造前的行为) |
| Max | max |
max |
强化流程(判据先行 / 难题分解 / 迭代修复 / 收尾自检 / 交叉验证) |
| Ultra | ultra |
max |
强化流程 + Agent Team |
行为块通过 ctx.systemPrompt.section() 注入;低档返回空串,渲染器会把空段丢掉
(@deepseek-ai/dsh-system-prompt 的 renderPrompt 里 .filter((text) => text.length > 0)),
所以不需要写死两套提示词。
出网映射本身也可以用 wireMap 换掉(见下),比如某条线路认 none/minimal/medium/high
或别的枚举时,不必改代码。
配置项
配置项(插件行的 config):
| 键 | 默认 | 说明 |
|---|---|---|
mode |
declare |
own(另起 provider 名,通用路线)/ declare(包裹内置 deepseek-account,DSH 内部路线)/ takeover(用内置名注册,需同时停用内置行) |
provider |
own → 插件名;其余 → deepseek-account |
用哪个 provider 名注册 |
displayName |
own → "<插件名>(六档)";其余 → DeepSeek Account |
模型菜单里显示的 provider 名 |
takeover |
false |
mode: takeover 的旧写法(等价);新装请用 mode |
extraProviders |
[] |
同一套六档还要作用在哪些 provider 上(例:[scnet])。只改声明层,不动注册关系 |
blocks |
{} |
内联覆盖行为块正文,键 methods / team / teamOff / teammate;只给要换的那几块,其余留默认 |
blockDir |
不读目录 | 从外部目录读 <key>.md 覆盖正文(同名时 blocks 内联胜);文件缺失=那块留默认 |
wireValues |
['off','low','high','max'] |
出网合法值白名单。不在白名单里的档位会记一条 warn 并写进 state.json 的 wire.outOfRange |
wireMap |
见上表 | 档位 id → 出网值的覆盖表,例:{ xhigh: 'high' };没给的档位沿用默认 |
effortOverrides |
[] |
逐模型档位覆写,规则 { provider?, model?, effort, when? } |
memoryTurnMarkers |
['[meow-memory-reflect]', '[meow-memory-dream]'] |
哪些文本标记算"记忆轮"。没装 meow-memory 或对方改了文案,就把自己的标记填进来;传了是替换,不是并集 |
selectionGuard |
false |
记忆轮的路由/模型切换把会话档位带偏时,把档位钉回用户选的那一档 |
行为块怎么换成自己的
config:
# 写法一:直接内联(只换 methods 一块,其余三块留默认)
blocks:
methods: |
## 我的强化流程
1. 先写判据……
# 写法二:指向一个目录,里面放 methods.md / team.md / teamOff.md / teammate.md
blockDir: /path/to/my-blocks
teamOff 块里可以写 {maxLive} 占位符,会在渲染时替换成该档的子代理并发上限
(low/medium/high/xhigh/max/ultra = 1/2/3/4/6/8)。
when 作用域(effortOverrides)
- 不写 /
'always':只要 provider/model 命中就生效。 'memory-turn':只在"记忆轮"命中,标记见memoryTurnMarkers。{ markers: ['[my-marker]'] }:任意标记。你自己的插件在轮次里 emit 一句带标记的 user/message,就能用同一套覆盖表(判定口径与memory-turn完全一样)。- 认不出的字符串、空
markers、非字符串非对象写法:整条规则丢弃(宁可不生效, 也不要拿一个写错的 when 去改所有请求的档位)。
memoryTurnMarkers 只影响 'memory-turn' 规则与 selectionGuard 的判定;
当前生效的标记、自定义 marker 命中的情况都可以在 state.json 里自证。
自证路由
宿主半边注册了 /plugins/<插件名>(本插件名是 dsh-tier-boost):
GET /state.json—— 当前 provider、模式、六档表、当前档位,以及四段自证:identity: { pluginId, route, provider, settingsNs }(身份从插件名派生,不再散落字面量)wire: { values, map, patch, outOfRange }(出网白名单与映射的实际取值)blocks: { source, dir, chars }(行为块正文来自default/config/dir,以及每块长度)memoryTurn: { markers, source }(认哪些标记、来自 config 还是默认)
GET /probe?tier=max&model=deepseek-flash—— 单独看某一档映射到哪个出网值、注入多少字节。
已知取舍
- 内置的
resolveImageAttachmentAccess没有导出(不在dsh-llm-deepseek的导出名单里), 本插件只服务文本请求;图片请求走回退路径(不改任何现有行为,因为图片本来也不走账号线路)。 - 旧的线上档位名
low在新的六档里代表"轻思考→出网 low",语义与旧的low不同; 如果某条会话之前存了low选择,升级后会被解释成新六档的 Medium。 默认档位已在 profile 里设成xhigh(=出网max、不叠块),保持改造前的手感。 mode: own的默认 provider 名就是插件名本身;已经用provider:显式配过的不受影响。
想改六档?只改一个文件
lib/policy.js 是唯一的策略层(纯数据,不 import 任何模块):
- 六档表
TIERS、出网翻译TIER_WIRE、出厂兜底FALLBACK_TIER; - 逐档委派策略
TEAM_POLICY、团队工具族; - 行为块正文
DEFAULT_BLOCK_TEXTS(blocks/blockDir就是覆盖它)、BLOCK_KEYS、normalizeBlockTexts()、blockTextsFrom()、renderBlock(); - 出网值
DEFAULT_WIRE_VALUES、normalizeWireValues()、normalizeWireMap()、wireMapFrom()、wireToTierFrom(); - 自身身份
routePrefixFor()/ownProviderFor()/settingsNsFor(); - 记忆轮标记默认值与
normalizeMemoryTurnMarkers()。
lib/index.js 只负责机制(改写适配器声明层、注入提示词块、滤工具表),
lib/overrides.js 与 lib/selection-guard.js 是纯函数层(不 import 任何 @deepseek-ai/*,
所以能被判据直接 import 做单测)。
所以加第七档只需要动 lib/policy.js 一处;形状由工作区判据钉住:
checks/tier-boost-policy.check.mjs(表本身)、checks/tier-boost-generic.check.mjs
(泛化:覆盖通道 / 身份派生 / 作用域泛化)。