dsh-session-speed-pill:在每一轮回复旁显示解码速度与耗时构成

前言

在 DeepSeek Harness(DSH)里做智能体或长对话调试时,官方「用量」面板给出的是会话级的 token 与缓存信息,回答不了更细的问题:这一轮吐字快不快、时间花在模型推理还是工具执行、首字延迟大致多少。若只能靠体感或外部抓包,迭代 prompt 或排查慢请求会很费事。

dsh-session-speed-pill(会话速度胶囊)是社区维护者 wzsx150 发布的 DSH 插件,分类为「模型推理」。它在每轮助手回复下方、与「复制 · 点赞 · 分享 · 用量 · 时间」同一行的操作区里,在用量右侧、时间左侧插入一枚读数,例如 ⚡ 264 tok/s · 12.3秒;点开弹层可查看本轮更完整的时间构成与 token 汇总。数据全部从会话日志里已提交的事件推导,重放或刷新后数字一致,不依赖客户端自行计时。

这是什么

插件仓库:wzsx150/dsh-session-speed-pill(当前 package 版本 0.13.3,MIT 许可证)。目录页:SkillHub · dsh-session-speed-pill(独立社区目录,与 DeepSeek / 幻方无官方从属关系)。

一句话定位:给每一轮一问一答补上单轮速度与耗时读数,并在弹层末尾汇总本轮输入/输出用量;它不推断缓存命中率、上下文占用或费用,避免与官方用量数字冲突。

胶囊上显示什么

胶囊左侧是本轮解码速度:有效输出 token 之和除以解码耗时之和(按 token 加权)。右侧是总耗时:从 turn/start 到 turn/end 的墙钟时间,含首字延迟与工具执行。

时长格式:不足 1 分钟显示「12.3秒」,不足 1 小时显示「7分49秒」,超过 1 小时只显示「1小时05分」且不再带秒。速度低于 100 tok/s 保留一位小数,否则取整;分母不成立时显示 —,不会出现 0 tok/s、NaN 或 Infinity。

点开弹层:本轮指标

弹层样式对齐官方统计弹层(同一套 --dsw-* 主题 token 与布局)。标题行左侧为「本轮对话」,右侧可显示「共 N 步」。主要行包括:

  • 回答耗时:模型、工具、总耗时(工具为总耗时减模型耗时的残差,含调度、审批、重试等)
  • 首字延迟:各步最大、最小、算术平均
  • 解码输出:平均 tok/s(与胶囊左侧同一口径)、合计解码窗口时间
  • 预填充输入(估算)、本轮解码速度(估算)、本轮预填充速度(估算):带「估算」的项受网络延迟影响大,仅供参考
  • 总用量:本轮未缓存输入 token 与输出 token(约以 ≈8.4K / ≈1.1M 量级展示)

实现上校验两条恒等关系:平均解码速度 × 解码合计时间应对齐输出 token;模型耗时 + 工具耗时应对齐总耗时。更完整的推导与算例见仓库内 docs/metrics.md。

设置:始终显示消息操作行

官方默认只有最新一轮的消息操作行常驻,更早轮次在新消息出现后需悬停才可见。插件在 设置 → 通用 增加开关:

始终显示消息操作行(Always show message actions)
开启后常驻显示每条消息的操作行;默认关闭。

开关状态保存在浏览器 localStorage(键名 dsh-session-speed-pill:always-show-actions),按浏览器独立,换设备或清理站点数据会恢复默认关闭。

语言与界面位置

文案跟随 DSH 设置 → 语言:插件读取 <html lang>,zh / zh-CN / zh-Hant 等用中文单位(秒 / 分 / 小时),en 等用 English,其他语言回落 English。

胶囊通过会话 UI 的 conversation.chat.assistant-actions 槽位注入,并用 CSS order 把官方 endInfo 中的用量、胶囊、时间排成「用量 → 胶囊 → 时间」,视觉上与官方控件同一套度量。

数据从哪来

Host 侧注册会话投影 sessionSpeed:在每次会话事件上纯函数折叠状态,从 turn/start、turn/end、step/start、assistant/message 的 usage 与 stream(含 time0、逐块 dt)推导指标;客户端通过 useProjection('sessionSpeed') 按轮次 messageId 查表渲染。插件不订阅 session/event 做二次扫描,也不在客户端 fold 事件。

安装与启用

插件以当前 DSH 进程的权限运行;安装前请自行阅读仓库源码与 MIT 许可证。开发与验证环境为 DeepSeek Harness 0.2.1-rc.5;0.2.x 预期可用,0.3.x 及以后契约不变则应可用但未验证,0.1.x 未验证不保证。Host 侧要求 Node >=22。

下面是从 GitHub 安装 bundle 的方式(README 原文):

plugin_manager({ action: 'install_bundle', target: 'github:wzsx150/dsh-session-speed-pill' })

卸载:

plugin_manager({ action: 'remove_bundle', target: 'dsh-session-speed-pill' })

改动生效范围:index.js / lib/* 属 Host 半身,需重启 Harness;client.js 属浏览器半身,刷新页面即可。若本机访问 GitHub 较慢,插件管理器的连通性探测可能超时,README 建议在 profile 目录使用 pnpm update dsh-session-speed-pill 更新。

SkillHub 目录页也提供「发送给 DeepSeek Harness 安装」的提示语,可在 Harness 内让助手按 wzsx150/dsh-session-speed-pill 协助安装;具体步骤以你使用的 DSH 版本与助手能力为准。

典型用法

1、安装并重启/刷新后,正常与助手对话。每轮回复结束后,在操作行用量与时间之间会出现速度胶囊。

2、需要看分解指标时,点击胶囊,在弹层中查看回答耗时、首字延迟、解码与预填充估算、总用量等。

3、若要对比历史各轮的操作行(复制、用量、时间、胶囊),打开 设置 → 通用 → 始终显示消息操作行。

4、调试样式或位置时,可在 DevTools 中查找 data-plugin="dsh-session-speed-pill" 的注入样式表。

适用场景与注意

适合:需要单轮 tok/s 与耗时构成、排查慢回复或工具占用、在不动官方用量面板的前提下做推理侧观测的 DSH 用户与智能体开发者。

注意:

  • 只统计日志里已有的事件;若 provider 未回写 dt 时间线,仍有耗时但速度类指标可能为 —。
  • 数值在本轮提交后才落定,胶囊不会随流式 token 实时跳动,与官方投影行为一致。
  • 预填充相关指标为估算下界,不宜与官方会话级用量直接对比做计费推断。
  • 位置与「始终显示」依赖官方 DOM 属性(如 data-actions-reveal、data-clock);宿主升级后若属性变更,效果可能静默退回默认,不报错。
  • 投影 apply 若抛错可能中断对话;本插件对 fold 与 apply 做了防抛设计,任一 UI 条目也有错误边界隔离。

与其他插件:不注册 Host 服务、工具或 Web 路由;槽位与投影键均为追加式 id;主要冲突面是另有插件注册同名投影键 sessionSpeed 或改写同一操作行 DOM 时可能互相影响,需自行验证共存。

结尾

dsh-session-speed-pill 把「这一轮快不快、时间花在哪」从会话级用量里拆出来,放在每轮回复旁,并用与官方一致的 UI token 呈现;需要更细口径时可读弹层与仓库 docs/metrics.md。

  • 目录页:https://www.skillhub.cn/plugins/wzsx150/dsh-session-speed-pill
  • GitHub:https://github.com/wzsx150/dsh-session-speed-pill
羽毛球分组比赛记分
小程序二维码

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

Xiaoye