dsh-turn-eta:在 DSH 对话头部看本轮耗时、token 与费用预估

前言

在 DSH(DeepSeek Harness)里跑长任务时,比较常见的困惑是两类:一是这一轮到底跑了多久、烧了多少 token,界面上看不到;二是发出去之前,不知道这一轮大概会产出多少 token、折算多少钱、要等多久。前者是事后复盘缺数据,后者是发之前没法做判断。

dsh-turn-eta 针对这两个点做了一件事:对话头部实时显示本轮耗时、token、速度与剩余时间倒计时,输入框上方在发送前给出产出 token、费用(≈¥)与预计耗时的预估。下面介绍这个插件的定位、安装、配置和用法。

这是什么

dsh-turn-eta 是一个 DeepSeek Harness 插件,目录页在 https://www.skillhub.cn/plugins/2370998716-jpg/dsh-turn-eta ,源码在 https://github.com/2370998716-jpg/dsh-turn-eta ,维护者为 2370998716-jpg,package.json 里的 author 是 zuo,许可证为 MIT。仓库 version 是 1.1.3,分类属于模型推理。

它解决的只是一件事:把每一轮的真实耗时和大致产出暴露到界面上,让你在等结果的时候有数字可看,而不是干等。

核心功能

插件把信息放在两个位置,都是纯文字,没有进度条、没有动效。

1、对话头部:本轮已耗时、已产出 token、速度(tok/s)、是否正在跑工具,以及一个剩余时间倒计时。倒计时只用一个规则:只减不增。

2、输入框上方:发送前预估这一轮大概产出的 token 数、按单价折算的费用(默认 ≈¥)和预计耗时。

默认内置单价,所以机器上没装 cost-meter 插件也能显示 ≈¥。装了 cost-meter 时,插件会优先读它的真实账单单价(见下文「价格来源优先级」)。

装完后,打开任意对话,头部应出现类似:

⏱ 0:03 · 120 tok · 60 tok/s · 估约 1:37

输入框上方应出现类似:

⚖ 预计 3.2k tok 产出 · 上下文 60k · ≈¥0.016 · ~0:22

注意:第一条消息发出去之后,单轮统计才开始累计;历史轮次越多,预估越准。

安装与启用

需要 Node.js ≥ 22.19(DSH 自带,一般不用管)。三种方式选一种。

方式一,从仓库直接装,最稳。<profile> 换成你正在用的 profile,桌面版一般是 desktop,Web 版是 web:

dsh plugin --profile <profile> add git+https://github.com/2370998716-jpg/dsh-turn-eta.git

Windows 上如果 dsh 不在 PATH 里,用完整路径(把 <你> 换成当前用户):

cmd /c ""C:\Users\<你>\AppData\Local\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add git+https://github.com/2370998716-jpg/dsh-turn-eta.git"

方式二,从本地文件夹装。先把整个仓库文件夹放到任意位置(路径别带奇怪的符号),然后在终端执行:

dsh plugin --profile <profile> add "<上面那个文件夹的绝对路径>"

方式三,从自定义索引源装,前提是你的 DSH 有「发现」页。DSH 0.2.1 起,插件页如果有「发现」标签,可以在索引源里添加:

https://raw.githubusercontent.com/2370998716-jpg/dsh-turn-eta/main/index.json

列表里会出现「轮次耗时与费用预估」。没有「发现」标签的装法直接用方式一。

装完之后必须完全退出 DSH 再打开(不是刷新页面)。宿主侧代码只在启动时加载,不重启看不到 ≈¥。

卸载命令:

dsh plugin --profile <profile> remove dsh-turn-eta

同样需要重启 DSH。

典型用法:改价格、换模型

默认按 DeepSeek 的 token 单价(美元/百万 token),缓存未命中、缓存命中、输出三档。高峰时段(UTC 1–4 点、6–10 点,即北京 9–12、14–18 点,仅周一至周五且非节假日)价格翻倍。峰谷按 UTC 窗口判断,周几和节假日按北京时间算。

想改价格或换模型,新建配置文件(Windows 对应 C:\Users\<你>\.dsh\storages\dsh-turn-eta\config.json):

{
  "model": "deepseek-flash",
  "currency": "CNY",
  "symbol": "¥",
  "exchangeRate": 7.2,
  "peakEnabled": true,
  "peakWindows": [{ "start": 1, "end": 4 }, { "start": 6, "end": 10 }],
  "prices": { "cacheMiss": 0.15, "cacheHit": 0.003, "output": 0.6 }
}

配置规则:

1、prices 可以直接写上面这种扁平单价,也可以写完整结构 { "models": { "deepseek-flash": { "cacheMiss": …, "cacheHit": …, "output": …, "peak": { … } } } }。
2、只写想改的字段就行,没写的自动落回默认值。
3、改完不用重启,最多等 60 秒(价格有 1 分钟缓存)。

价格来源的优先级是:config.json 覆盖 → ~/.dsh/storages/cost-meter/ledger.json(装了 cost-meter 时会读它的真实账单单价)→ 内置默认。所以装了 cost-meter 的机器会自动用真实单价,没装的机器用内置单价。

环境变量 DSH_TURN_ETA_MODEL 可以临时指定用哪个模型的单价表,不必改配置文件。

数字是怎么算的

这部分决定你能不能放心用这些数字。

  • 倒计时:用「这一轮大概产出多少 token」的历史中位数,再按当前速度折算。同一轮内目标值会锁死,所以数字只会往下走,工具跑久了也不会往回跳。
  • 改口机制:跑超预估时分三段。中位数以内显示「估约」;跑过中位数但仍在历史 p75 以内,改成「最多约」——这是上界而不是新的中位数,每轮只改口一次;真越过 p75 才显示「超预估」,这时数字直接消失,不再编新数。README 说明里那句「宁可先说最多约」就是这个意思。
  • 挂机不算数:某一轮墙钟时间远大于真实干活时间(模型 + 工具,超过 2 倍且多 20 秒)时,按真实干活时间记样本,避免一次挂机把之后所有预估拉长。单个离群样本会被压回中位数的 8 倍以内。
  • 历史区间:鼠标悬停头部可以看到 p25–p75 的历史区间,头部本身只显示一个干净的数。
  • 历史存储:存在 ~/.dsh/storages/dsh-turn-eta/history.json,删掉就重新开始学习。

适用场景与注意

适合两类人:一是经常跑长任务、需要事后复盘单轮 token 与耗时的智能体开发者;二是想在发消息前判断这一轮大概花多少钱、等多久的人。

需要注意几点:

1、插件以当前 DSH 进程的权限运行。安装前应当先检查源码与许可证(MIT),尤其是从本地文件夹或第三方索引源装入时。
2、插件用历史中位数做预估,冷启动时只有第一条消息之后才有样本,早期数字参考意义有限。
3、倒计时只在同一个 turn 内锁死目标值,不预测工具本身还要跑多久,工具卡住时它不会变。
4、配置文件路径是 ~/.dsh/storages/dsh-turn-eta/config.json,改错字段会落到默认值,不会报错。

结尾

dsh-turn-eta 的价值在于把单轮的耗时、token 和费用从「不清楚」变成「看得见、估得出」:头部看实时进度,输入框上方看发送前的预估,历史区间可以悬停查看。默认单价内置,不依赖额外插件。

  • 目录页:https://www.skillhub.cn/plugins/2370998716-jpg/dsh-turn-eta
  • GitHub:https://github.com/2370998716-jpg/dsh-turn-eta
  • Issue:https://github.com/2370998716-jpg/dsh-turn-eta/issues

反馈可以直接发邮件给 2370998716@qq.com,写清「DSH 版本 + 你在哪个界面看到的什么数字不对」即可。

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

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

小夜