dsh-tier-brain(v0.1.0)
在你发送之前,看一眼这句话有多难,然后只告诉你两件事:
建议的模型 · 建议的推理等级
就这两件事。没有分数、没有难度条、没有"为什么"按钮、不弹窗、不接管输入框,也不会替你改模型——它只建议,请求该怎么发还是怎么发。
它长什么样
聊天输入框的上方外侧会出现一枚小胶囊:
● deepseek-flash · off
- 左侧色点:🟢 省档 / 🟡 平档 / 🔴 强档
- 高峰时段末尾会多一个橙色
· 高峰(谷时没有,不占位) - 会话已经很长(读入 ≥48K token)时,末尾会多一个灰蓝
· 长上下文 - 只有当前对话界面的输入框有内容时才出现
- 切到设置、插件市场、别的会话——它立刻消失(只认
[data-composer-seat]里的真实会话输入框) - 发送后输入框清空,它自动收起
三档含义
| 档位 | 建议模型 | 推理等级 | 适合什么样的活 |
|---|---|---|---|
| 🟢 省档 | deepseek-flash |
off |
打招呼、问一个事实、查个词、格式转换、翻译短句 |
| 🟡 平档 | deepseek-flash |
high |
一般开发任务、解释、改代码、跑命令、中等排障 |
| 🔴 强档 | deepseek-v4-pro |
high |
架构设计、跨文件重构、复杂并发、长文产出、有取舍要权衡的决策 |
| 🔴 强档(极难) | deepseek-v4-pro |
max |
安全审计、复杂 code review、疑难调试——只在分数过线时自动出现 |
强档需要你的 provider 里已配置
deepseek-v4-pro;没有的话它只是一句提示。
判断依据(这是重点)
不是"看到'重构'两个字就加 20 分"那种词表。做法分两步:
第一步:先认任务类型,给一个基准分(同一类活的天然难度):
| 类型 | 基准分 | 典型信号 |
|---|---|---|
| 确认 / 寒暄 | 5 | 好、谢谢、可以、行 |
| 事实查询 | 12 | 是什么、多少、在哪、有没有 |
| 翻译 / 格式化 | 15 | 翻译、润色、转成、排版 |
| 解释概念 | 20 | 为什么、怎么理解、原理、区别 |
| 文档 / 写作 | 25 | 写一段、总结、说明、README |
| 读代码 | 28 | 看看这段、解释这个函数、这行什么意思 |
| 运维 / 安装 | 35 | 安装、配置、启动、端口、权限、npm、git |
| 调研 / 方案 | 35 | 你觉得、可行性、思路、建议、有什么影响 |
| 改代码 | 42 | 把…改成、加上、删掉、换成 |
| 调试排障 | 46 | 报错、不生效、变卡、失败、排查 |
| 从零构建 | 50 | 做一个、写一个、搭建、开发、实现 |
| 审查 / 评估 | 55 | 检查一遍、有没有问题、review、审计 |
| 重构 | 60 | 重构、抽出来、拆分、合并、清理冗余 |
| 架构设计 | 68 | 架构、设计一套、技术选型、并发模型 |
取命中权重最高的那一类;同一类被反复提及时分数只做对数增长,防止"长文堆词"把难度刷虚高。
第二步:按上下文加减(幅度都有上限,不会一项定生死):
- 篇幅:>1600 字 +12,>600 字 +9,>200 字 +5;≤14 字 −6
- 代码块 ≥4 段 +8,≥2 段 +5;含文件路径 +3;含 URL +2
- 范围词(所有/全部/整个/全面/逐一)+6;多步骤表述(先…再…然后)+4
- 硬约束(兼容/测试/边界/不破坏/性能/安全)出现 1 个 +4、≥2 个 +7
- 问"为什么"且不是一句话 +4
- 明确说"简单/只要/随便"且不是重活、不是开放讨论、篇幅短 → −8
- 同一会话里越往后 +2 / +4;之前工具调用失败过 ≥2 次 +5
- 上下文规模(上一轮真实读入的 token):≥12K +1、≥32K +3、≥96K +5
- 会话已经 ≥4 轮且上下文 ≥48K 时,省档会被抬到平档——见下一节
- 上一轮已经是强档、这一轮落在平档但分数接近强档线 → 保持强档(上下文已经很难了,别突然降档)
分档线:< 32 → 省档;32–55 → 平档;≥ 56 → 强档。
阈值故意把"难"这一侧放宽:把难题误判成省档、给出一个明显不够用的模型,比反过来更伤人。这也是它现在偏保守的原因。
为什么是这几个组合(依据)
不是拍脑袋定的三档。真实四档是 off / low / high / max(API 里写作 none/low/high/max),而档位在 DeepSeek 的实现里不是算力旋钮,是提示词前缀:low 什么都不加,high 前置一段"详尽推理"的长指令,max 是加强版。由此有两个反直觉的结论,直接决定了上面的组合:
low不是"便宜档"。 少了结构,模型更容易漫游、复述、绕圈——实测里low的 reasoning 与输出 token 反而多于high。所以省档用off而不是low:关掉思考,首字 < 0.1s、几乎零推理成本,对寒暄/查事实/格式转换完全够用;而且对简单问题,复杂模型开思考还可能"过度思考"答错。max经常不值。 通篇实测里,给一般任务上max,输出 token 可到 Flash 的 4 倍多,答案却一样甚至更差;在 8K 输出上限下high/max还会把额度全花在推理上、正文直接空响应(把max_tokens提到 32K 以上可解)。所以max只在"强档 + 架构/审查/疑难调试/重构 + 分数过线"时出现。
max 的触发门槛按类型分:审查 66 分、架构 72 分、调试 76 分、重构 78 分(满分 100)。门槛故意偏高——宁可漏推,不可乱推。
顺带一个省钱维度:高峰 / 谷时
DeepSeek 官方定价里,空闲时段价格正好是高峰时段的一半(Flash 输入 1 vs 2 元/百万 token、输出 4 vs 8;Pro 输入 4.5 vs 9、输出 13.5 vs 27)。高峰是北京时间周一至周五(不含法定节假日)9:00–12:00、14:00–18:00,其余时段(含整个周末)都算空闲。
所以卡片在高峰时段会多一个橙色 · 高峰 小标——不是催你换模型,是提醒"同档现在贵一倍,能挪就挪"。谷时不显示,免得添噪。
法定节假日无法在本地可靠判断,这里按"工作日"近似,节假日当天可能误报为高峰。
省钱杠杆的排序(按真实差价):错峰(省 50%)> 换 Flash(省 67%–78%)> 降档(不一定省,low 可能更贵)> 上 max(几乎总是更贵)。
上下文与记忆如何影响推荐
上面那套判断只看"这句话本身"。但真实花费不是这样算的:
新开一个对话,普通问答用
off确实比low省一点;可一旦聊过几轮,两个对话的花费就不再符合这个直觉了。
原因是每轮的钱由两部分组成:读入的上下文 + 生成的输出。而上下文里,你刚打的那几十个字只占几个百分点——其余是系统注入:记忆提醒、压缩摘要、运行时上下文、历史消息。本机实测的一个会话里,用户输入不到 600 字,系统注入将近 3.7 万字,助手输出 21 万字,读入侧的 token 有九成以上来自注入与历史。
于是:
off省的是输出,不省输入。 长会话里关掉思考,省下的那点输出相对整段上下文是零头;- 答错更贵。 省档一旦没答对,重来一次要再读一遍整段上下文,代价比省下的输出高一个数量级;
- 所以长会话里的"省档"是假省钱。
插件因此读了每轮的真实用量(assistant/message 事件里的 usage),用
上下文规模 = inputTokens + cacheReadTokens + cacheWriteTokens
缓存命中率 = cacheReadTokens / 上下文规模
来跟踪"这个对话现在有多重",规则只有两条:
- 规模越大,难度分越高:≥12K +1、≥32K +3、≥96K +5(幅度刻意小,只推临界样本一把);
- 会话 ≥4 轮且上下文 ≥48K 时,不再推荐省档,自动抬到平档,并在卡片上标
· 长上下文。
寒暄是例外:说一句"谢谢"不会因为上下文长就被抬档——那确实不需要思考。
为什么门槛定在 48K / 4 轮:低于这个量级时,输出仍占成本的可观比例,省档还有意义;再往上,输出占比被上下文稀释,升档的期望收益开始稳定为正。这两个数是经验阈值,不是实测出来的最优点,用 /tier 看到"上下文 xxK"后觉得不合适,可以直接告诉我调。
/tier 里还能看到本会话的记忆注入总量(累计字数与估算 token),以及缓存命中率——命中率高说明前缀稳定、输入便宜;命中率低说明每次都在重算,这才是该优化的地方。
准确率
用你本机全部会话(~/.dsh/sessions/**/session.v4.jsonl.zstd 解出来的历史消息)去重后得到的 122 条真实提问,按"这句话需要什么样的回答"人工标成三档,再跑插件自己的评分:
| 指标 | 数值 |
|---|---|
| 整体准确率(122 条) | 97.5% |
| 开发集(61 条) | 98.4% |
| 留出集(61 条,调参时没看过) | 96.7% |
| 省档召回 | 100.0% |
| 平档召回 | 95.3% |
| 强档召回 | 100.0% |
混淆矩阵(行=人工标签,列=插件判断):
T1 T2 T3
T1 43 0 0
T2 3 61 0
T3 0 0 15
剩余 3 条错例都是脱离上下文的短句/英文("点 Commit 之后填完是这样"、"2d 平面住客日常活动参考饭店物语"、一段英文 truncate 报错),单看文字判不了该用哪档,属标注固有误差,未强行加规则以免过拟合。
复现:node test/eval.mjs(或 test/check.mjs 只看语法);node test/check-v02.mjs 验证四档映射与峰谷判断;node test/check-v03.mjs 验证上下文与记忆规则;node test/check-events.mjs 验证"会话事件 → 上下文统计 → 推荐"整条链。分数低于 60% 时评测脚本直接 exit 1。
评测语料只标了"这句话本身"的难度,跑分时上下文一律为空,所以上面这组数字不含长上下文升档的影响;它衡量的是纯文本判断力。
必须说清楚的局限:
- 122 条的标签是一个人标的,边界样本(尤其"中等 vs 难")本来就见仁见智;
- 语料只来自你这台机器的使用习惯,换个人、换个领域,准确率会掉;
- 它是关键词 + 结构启发式,不是模型判别。遇到反讽、极简的深层问题("这个为什么不行?"背后是一整天的排查)会低估;
- 所以它只给建议。最终选哪个模型,还是你自己点。
如果发现某类问题总被判错,把原话发我,我把它加进 test/cases.jsonl 重新校准——这是让它变准的唯一正路。
输入框里也能问
/tier 帮我重构这个模块的架构,设计一个并发方案
会打印完整依据:分类、分数、命中信号、置信度;处于高峰时段时多一行错峰提醒。这些细节只在命令里给你,不往界面上糊。
再往下是 DSH 里怎么装。
命令行也能用
不想开 DSH 的时候,直接问一句:
# 装了包(npm i -g dsh-tier-brain)之后
dsh-tier-brain "帮我重构一下这个模块,顺便补齐边界条件的测试"
dsh-tier-brain --json "把 D 盘那个未签名的系统服务删掉"
# 没装全局包,直接在源码目录里跑
node scripts/dsh-tier-brain.mjs "帮我重构一下这个模块"
echo "帮我把这个插件的 README 重写一遍" | node scripts/dsh-tier-brain.mjs
输出:
建议:deepseek-v4-pro · high [强档]
类型:REFACTOR 评分:67
依据:REFACTOR;多重硬约束 +7
--json 输出结构化结果,方便脚本调用。
安装 / 更新
方式一:npm(推荐)
cd $env:USERPROFILE\.dsh\profiles\desktop
npm install dsh-tier-brain
然后确认 profile 的 package.json 里 dsh.profile.bundles 包含 dsh-tier-brain(npm 只负责装包,不会自动往 bundles 里加)。注意 bundles 里要写包名、dependencies 里要有对应条目,两处都得在。
方式二:本地目录(不用联网)
powershell -ExecutionPolicy Bypass -File .\install.ps1
方式三:分发包(tgz)
cd $env:USERPROFILE\.dsh\profiles\desktop
npm install file:C:/path/to/dsh-tier-brain-0.1.0.tgz
install.ps1 会:备份 profile 的 package.json → 复制 lib/ → 把 dsh-tier-brain 加进 dsh.profile.bundles(已经在里面就不重复加)。装完必须完全退出 DSH 再重开,宿主代码才会重新加载。
回滚:把 package.json.bak-tier-brain 覆盖回 package.json,删掉 node_modules\dsh-tier-brain。
版本号:
package.json与宿主 ping 返回的version都是 0.1.0;这是首个正式发布版。
数据与隐私
- 输入的文字只会
POST给本机宿主http://127.0.0.1:<port>/dsh-tier-brain/preview,不出本机; - 每次判定会追加一行到
~/.dsh/tier-brain/decisions.jsonl,只存前 200 字,用于以后复盘和校准; - 不读会话历史,不碰剪贴板,不改任何配置。
版本
- 0.1.0(2026-10-21,首个正式发布版):把先前的 0.2 / 0.3 内部迭代合并为一次发布——
- 判断规则重写为「任务分类基准分 + 上下文修饰」,不再靠零散词表加分;
- 省档用
flash + off,平档flash + high,强档pro + high,极难任务自动升max; - 卡片只显示模型与推理等级,切到设置 / 插件市场 / 其它会话立即消失;
- 结合上下文与记忆:读取每轮真实
usage,≥4 轮且 ≥48K 时不再推荐省档,卡片显示· 长上下文; - 高峰时段显示
· 高峰; - 用本机 19 个会话、122 条真实提问做评测:整体 97.5%(dev 98.4% / holdout 96.7%);
- 测试:
test/eval.mjs、test/check-v02.mjs、test/check-v03.mjs、test/check-events.mjs、test/server-smoke.mjs; - 附带
dsh-tier-brain命令行(scripts/dsh-tier-brain.mjs),不开 DSH 也能给一句话打分。
- 0.0.1:初版,难度条 + "为什么" + 词表加分(已废弃)。
No comments yet. Be the first to write one.