deepseek-harness-desktop/packages/dsh-live-stats

156Star5Fork6Issue0Watching

在 DSH Web 聊天状态行实时显示输入/输出 token 估算和生成吞吐(TPS),等待 provider 真实用量到达后自动替换。

语言
TypeScript
License
BSD-3-Clause
分支
main
ai-agentai-coding-assistantcodexdeepseekdeepseek-harnessdesktop-appdshdsh-plugin

安装

$ dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/dsh-live-stats

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

DSH Web 聊天状态行里实时显示本次会话的输入/输出 token 估算与生成吞吐(TPS),等 provider 真实用量回来后自动替换掉估算值。

核心能力

  • 实时估算输入 token:综合会话表面消息与 header/工具框架的字符数,按字符密度参数折算
  • 实时估算输出 token:随着流式 chunk 逐块累计,文本、reasoning、tool-call 各自走不同的计费规则
  • 实时生成吞吐:渲染 TPS 31.4 tok/s 之类的指标,挂在步骤计数之后、计费组之前
  • 自动替换为真实用量:provider 返回 usage chunk 或最终消息落地时,估算值被真实数据覆盖
  • TPS 常驻显示:测得一次速率后便持续显示,新步骤暂未产出或遇到无速率步骤时回退到最近一次测量值,避免状态行闪烁
  • 暴露设置卡:DSH Web 插件设置里多出一张 live-stats 卡,可调字符密度参数和总开关

技术实现

  • 语言: TypeScript + React(客户端)
  • 关键依赖: @deepseek-ai/dsh-session(消费事件流)、@deepseek-ai/dsh-session-projection(注册可重放投影)、@deepseek-ai/dsh-token-meter(消费投影结果)、schemastery + zod(配置/数据结构校验)
  • 架构模式: 经典 host/client 双半区——host 侧用 cordis 插件形态注册 liveTokenUsage 会话投影(liveTokenUsage 走纯函数 fold,重放可知),client 侧把一张设置卡挂到 web-ui.plugin.item 槽位、把 TPS 行挂到 conversation.composer.dock 槽位
  • 入口文件: src/index.ts(host 半区)、src/client/index.ts(browser 半区)

适用场景

  • 在 DSH Web 里跑长对话时,想实时看到生成速度(TPS)和累计 token 走势,不再等结束时再揭晓
  • 想要在 provider 真实用量尚未到位时心里有数,比如判断是否需要尽早停止生成的场景
  • 想统一调整 token 估算密度(例如中文工作流把 charsPerToken 调到 1.5-2),让状态行数字更接近真实计费

前置依赖与兼容性

依赖最低版本说明
DSH0.1.0-rc.7+全部 SDK 依赖固定 ^0.1.0-rc.7;同时声明了对 rc.6 的兼容回退(ctx.webUiSettings 缺失时回退到 ctx.settingsScope
Node>=22.19.0仓库根 package.jsonengines 字段:`^22.19.0
运行平台Webdsh.client.platform: "web",仅在 Web 半区注册槽位,TUI/CLI 无等价物
原生模块仅依赖 Runtime SDK,无 node-gyp 编译模块

安装方式

dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/dsh-live-stats

配置项

配置类型说明默认值
enabled布尔总开关,关闭后 host 侧投影折叠不会注册,TPS 行不再出现true
charsPerToken数字一个 token 大致对应的文本字符数,调小会让估算 token 变大4
blockOverhead整数每个内容块(文本/工具调用/工具结果等)分配的固定框架 token4
roleOverhead整数每条消息或助手响应分配的固定框架 token4

常见问题

Q: 这个插件会增加每次请求的 token 消耗吗?

A: 不会。插件只消费持久化事件流与投影数据,不注入提示段落、不注册工具、也不发送任何 session 事件,每个请求的 token 影响为零,对 KV 缓存也无影响。

Q: 用 charsPerToken=4 估算中文是不是偏低?

A: 是的。默认 4 字符/token 会低估中文(中文实际更密集),同时高估纯 ASCII 文本。可以在设置面板或 overlay 配置中调整 charsPerToken,中文密集场景建议调到 1.5-2 之间。

Q: TPS 数字是怎么算出来的?为什么有时候不显示?

A: TPS 由某个活跃步骤的输出 token 除以墙钟耗时得出,且遵循"常驻"策略:只要某个步骤测得过速率,状态行就会持续显示,在新步骤尚未产出或遇到无速率步骤时回退到最近测得值,避免闪烁。只有刚开始从未测得时才会不显示。

Q: 估算值 ~ 什么时候会被替换成真实数据?

A: ~ 表示启发式估算。当 provider 返回 usage chunk 或最终响应消息落地时,估算值会被真实用量替换;精确的缓存统计始终来自 DSH 自带的持久化 token 用量投影,不依赖本插件。

Q: 它是 Web 限定还是所有客户端都支持?

A: 目前是 Web 限定。TPS 状态行渲染在 DSH Web 的会话统计行内,暂无 TUI/CLI 等价物。安装时 dsh.client.platform 字段也固定为 web

Q: 怎么调整字符密度参数?配置文件在哪里?

A: 推荐在 DSH Web 的插件设置面板里直接修改(一个 staging 表单绑到 live-stats 命名空间)。也可以在 ~/.dsh/config.yaml 的 overlay 里加 charsPerToken / blockOverhead / roleOverhead 三个字段,保存即热加载。

Q: 关闭插件后再开启需要重启吗?

A: 不需要。设置面板的 enabled 开关或 overlay 配置变化时,宿主侧会销毁旧投影并按新参数重新注册投影折叠,下一次会话日志重放即生效,无需重启 dsh web

上手难度

入门 — 安装即生效,零配置就能看到 TPS 与估算结果;进阶用户可在设置面板调密度参数。

已知问题与限制

  • 估算为启发式:输入/输出总量在 provider 用量到达前为字符数估算(带 ~ 标记),精确缓存统计始终来自 DSH 自带的持久化 token 用量投影
  • 仅 Web 端:TPS 行渲染在 DSH Web 的会话统计行内,暂无 TUI 等价物
  • 单活跃步骤:投影每个会话只跟踪一个活跃步骤,并发会话各自拥有独立投影
  • 字符密度假设:charsPerToken=4 会低估中文、高估纯 ASCII;估算偏差明显时需要按部署调整
  • 没有平台原生模块:插件是纯 JS/TS,不引入 node-gyp 编译产物,但同时也只能依赖 DSH Web 这一种运行形态
deepseek-harness-desktop/packages/dsh-live-stats — DeepSeek Harness 插件 | deepseek-plugin.org