前言¶
在 DSH 里跑带工具调用的对话时,模型一轮里可能连续执行读文件、跑命令、调 MCP 等操作。Provider 侧通常只给出整轮 usage,不会按工具拆开;若再叠加缓存命中,「进了上下文多少」和「按价计费多少」也不是同一回事。想排查某轮上下文为什么变长,或对比不同工具谁更「占篇幅」,需要一轮结束后的按工具归因,而不是账单金额。
下面介绍社区插件 dsh-tool-cost-hint(维护者 qiyuexue-xiyu,分类:模型推理)。它不报花了多少钱,只统计每个工具在本轮向模型可见上下文里注入了大约多少 token,并在对话流底部给出可折叠的一行摘要。
这是什么¶
dsh-tool-cost-hint 是纯被动观察型 DSH bundle:不注册工具、不向模型上下文写入内容、不 append 任何 session 事件。它监听 session/event,在每轮 turn/end 时整理「这一轮谁调了哪些工具、各几次、各自注入多少 token」。
当前实现覆盖两面:
- host 面:在进程内记账、折叠摘要并对外 emit;
- client 面:在
conversation.chat.turnTail插一行可折叠提示,把已有折叠结果送到浏览器渲染。
归因口径与 README 说明一致:展示的是「注入量」(inputTokens + outputTokens),不做价格换算;整轮计费可交给如 dsh-bill 类插件,两边不重叠。
仓库与目录页:
- GitHub:https://github.com/qiyuexue-xiyu/dsh-tool-cost-hint
- SkillHub 目录:https://www.skillhub.cn/plugins/qiyuexue-xiyu/dsh-tool-cost-hint
当前 Release 版本为 0.2.0(MIT,Node >=20)。包尚未发布到 npm registry,安装宜使用 Release 中的预构建 tarball(内含 dist/)。
核心功能¶
被动监听与轮末汇总¶
插件在 turn/start 建本轮累加器;在 tool/call 累加调用次数与调用侧 token(工具名 + 参数 JSON,按框架 estimate 公式估算);在 tool/result 配对 callId 并记录结果侧 token(优先 meter,否则 estimate);在 turn/end 调用一次 ctx.tokenMeter.measure(),用官方计量覆盖可覆盖的估算,再折叠成摘要。
未配对情况会显式记录,例如发了 tool/call 却没有 tool/result 的 unattributedCalls,或中途加载导致的 orphanResults,避免静默丢数。
注入量字段含义¶
| 字段 | 含义 |
|---|---|
inputTokens |
工具调用侧注入:本轮 tool/call 里 tool-call 块的 token(多为估算,因 tool/call 非 surface 事件) |
outputTokens |
工具结果侧注入:tool/result 进入模型可见 surface 的 token |
injectedTokens |
两者之和,UI 上「注入量」即此数 |
README 强调:命中缓存后「注入 3000 token」不等于「按 3000 token 付钱」,故插件不显示金额。
对话 UI 提示¶
装好后,在一轮用到工具的回复底部、操作栏上方会出现一行可点击展开的摘要,形态类似:
🛠 read ×1 · pwsh ×2 · ≈3.4K tok
展开后可看到逐行「工具名 / 次数 / 输入 / 输出」,末行合计注入量。没有这一行通常表示插件未正确加载,需按安装步骤排查。
安装与启用¶
插件以当前 DSH 进程权限运行;安装前建议阅读仓库源码与 MIT 许可证,并从官方 Release 或可信渠道获取 tarball。v0.2.0 的 SHA256(Windows certutil 核对用)为:73190410b86206af6e4b5785dec006f2ca59a7c6ce8c97b637607285fb19cba6。
命令行 profile(推荐 tarball)¶
固定下载链接(始终指向最新 Release 的预构建包):
https://github.com/qiyuexue-xiyu/dsh-tool-cost-hint/releases/latest/download/dsh-tool-cost-hint-0.2.0.tgz
下载到本地后,对非桌面版(如 dsh web / dsh tui 使用的 profile)执行:
dsh plugin --profile web add ./dsh-tool-cost-hint-0.2.0.tgz
也可用 GitHub 源码源(需本机可访问 GitHub 且具备构建链,因 dist/ 不进 git):
dsh plugin --profile web add github:qiyuexue-xiyu/dsh-tool-cost-hint
注意:仓库网页 URL 不能直接作为安装源,例如下列形式无效:
dsh plugin add https://github.com/qiyuexue-xiyu/dsh-tool-cost-hint
DSH 桌面版(Electron)¶
桌面版的 desktop profile 由 Electron 主进程独占,dsh plugin --profile desktop add ... 会报错且为设计使然,只能手动改配置。
- 在
%USERPROFILE%\.dsh\profiles\desktop\下用 npm 或 pnpm 安装本地 tgz,例如:
npm install "C:\Users\you\Downloads\dsh-tool-cost-hint-0.2.0.tgz"
-
编辑
%USERPROFILE%\.dsh\profiles\desktop\package.json:在dependencies增加dsh-tool-cost-hint的file:路径,并在dsh.profile.bundles数组末尾追加"dsh-tool-cost-hint"(仅改 dependencies 不会加载 bundle)。 -
完全退出 DSH 进程后重开(托盘退出或结束进程,不能只关窗口)。
装妥后应存在 node_modules\dsh-tool-cost-hint\dist\index.js。loader 会套用包内 cordis.patch.yml,将 tool-cost-hint 插入组合。
典型用法¶
安装并重启后,发一轮会触发工具调用的消息(例如让助手读取某个文件)。轮次结束后查看回复底部是否出现工具成本折叠行;点击展开核对各工具次数与注入量。
若需把包发给他人,README 推荐直接发上述 Release 下载链接;对方在命令行版用同一条 dsh plugin --profile web add ./dsh-tool-cost-hint-0.2.0.tgz 即可。桌面版对方需按「安装前必读」手改 package.json。
适用场景与注意¶
适合:
- 调试长上下文:快速看一轮里哪些工具、各注入多少 token;
- 对比工具输出体积:例如 shell 与读文件谁更占 surface;
- 与计费插件分工:本插件只管「塞了多少」,不管「花了多少钱」。
注意:
inputTokens对 tool/call 侧多为估算,数据结构用inputTokensSource/outputTokensSource标明来源;- 插件不缓存 tool/result 正文,只记 seq 与 token 数字,避免长会话内存驻留大块结果;
- DSH 生态是「一切皆插件」;SkillHub、DSH Plugin Hub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-tool-cost-hint 用一轮一次的被动记账,把工具调用从「黑盒 usage」拆成可读的注入量摘要,并落到 Web 对话尾部。需要金额时另装计费类插件即可。
- 目录页:https://www.skillhub.cn/plugins/qiyuexue-xiyu/dsh-tool-cost-hint
- 源码与说明:https://github.com/qiyuexue-xiyu/dsh-tool-cost-hint
- 当前 Release:https://github.com/qiyuexue-xiyu/dsh-tool-cost-hint/releases/tag/v0.2.0