前言¶
在 DeepSeek Harness(DSH)里跑智能体时,内置统计行会告诉你「25 turns · 226 steps」和「11.1M tok · 99% cache hit」,但看不到钱从哪来、上一句到底花了多少。Agent 计费有两点和直觉相反:一是按模型调用计费,不是按「轮」——一轮里读文件、跑命令、改代码可能各是一次请求,每次都会把整段上下文重新计费;二是重读历史常常是最大项——上下文到 39 万 token 时,每次调用都要再读 39 万 token,往往比模型真正「思考输出」还贵。
下面介绍社区插件 dsh-spend-pill(维护者 lalilulelo3),它在 Composer 状态栏增加一颗「花费胶囊」,展示上一句已结算的实际成本,点开可看拆分;分类为客户端插件,当前版本 0.1.1,许可证 MIT。
这是什么¶
dsh-spend-pill 是体量很小的 DSH 插件:在 Composer 状态行增加一颗 cost pill,默认显示类似 上句结算 ¥0.062,表示上一轮对话已结算的费用(来自宿主对完整会话日志的折叠,不是估算)。点击可展开本会话累计、token 明细、上一句内的模型调用次数、本句进行中的花费,以及「下一句发出去时重读历史的起步价」。
与只看 token 命中率不同,它把「每轮几次调用、上下文有多重、下一句话固定要付多少输入成本」放在同一屏,方便对照 DSH 在上下文约 69% 附近自动压缩的行为(插件在 50% 琥珀、60% 红色提示,留一点余量)。
核心功能¶
折叠态(Pill)¶
状态栏一行文案,例如:
上句结算 ¥0.062
表示上一句结算金额;首轮尚无结算时显示 ¥—。
展开态¶
展开后大致包含(示例来自 README,数值随会话变化):
本会话已花 ¥2.12
输出 18.3 万 token
缓存读 5888.3 万 token
未命中 20.7 万 token
────────────────────
上句结算(第 28 轮) ¥0.062
其中模型调用 6 次
本句进行中 ¥0.041
────────────────────
当前上下文 39.3 万(38%)
起步价(重读历史) ¥0.0079
按当前空闲·半价时段估算
要点如下:
- 上句结算是 settled 值:宿主侧
spendStats投影重放完整持久化日志,在turn/end处切轮并折叠 token;重启、分页、压缩不会改变已结算的上一句金额。 - 拆分上一句:同一轮里有多少次模型调用、本句已发生多少花费,与「本会话已花」、输出/缓存读/未命中 token 一并展示。
- 起步价:按当前上下文体量估算「下一条消息」固定要付的重读历史输入成本;并标注是否按北京时间的闲时半价估算。
- 上下文阈值:当前上下文占比在 50% 琥珀、60% 红色,便于在 DSH 自动压缩前心里有数。
计价说明(非发票)¶
价格硬编码为 DeepSeek 官方费率(闲时:缓存命中 0.02、未命中 1、输出 4 元/百万 token;忙时翻倍),按北京时间判断峰谷。投影里没有每次调用的时间戳,混合峰谷时段会按当前费率折算,可能与账单有偏差;README 明确说明这不是发票。仅 DeepSeek 默认可读;换其他 provider 需自行改源码中的 PRICE_PEAK / PRICE_OFF。
安装与启用¶
推荐从 GitHub 安装(资料原文命令,勿用 npm 包名 dsh-spend-pill——npm 上仍是 0.0.0-stage 占位包,无 lib/,会装成空包)。
桌面端:
dsh plugin --profile desktop add "github:lalilulelo3/dsh-spend-pill"
CLI Web UI 将 desktop 换成 web:
dsh plugin --profile web add "github:lalilulelo3/dsh-spend-pill"
安装后重启 DSH 宿主。插件要求 Node >= 20,依赖 @deepseek-ai/cordis ^4.0.1 与 React ^18.2.0(由 DSH 环境提供)。
本地开发可用 link: 指向克隆目录(需自行 clone,本文不展开);生产环境以 GitHub 安装为准。
典型用法¶
- 按上一节命令安装并重启宿主。
- 打开带 Composer 的会话,在状态栏找到花费胶囊(客户端注册在
conversation.composer.dock,order: -1)。 - 每完成一轮对话,看折叠态的「上句结算」是否与预期量级一致;若一轮里工具调用很多,展开看「其中模型调用」次数。
- 上下文变长时关注「当前上下文」百分比与颜色;对照「起步价(重读历史)」决定是否该手动压缩或缩短会话。
- 需要会话级总费时看「本会话已花」与 token 拆分行。
无额外配置文件;行为由宿主日志中的 usage 与 turn/end 驱动。
实现要点(便于审源码)¶
- Host(
lib/index.js):注册spendStats会话投影,消费assistant/message上的 providerusage,按turn/end分轮折叠。 - Client(
lib/client.js):注入 Composer dock,读取tokenUsage、contextPressure、spendStats等投影渲染 UI。 - 通过
cordis.patch.yml与@deepseek-ai/dsh-client-ui-slots接入客户端槽位。
安装前建议浏览 GitHub 仓库 源码与 MIT 许可证;插件在当前 DSH 进程权限下运行,与社区目录站点一样,不属于 DeepSeek / 幻方官方应用商店,而是 DSH「一切皆插件」生态中的第三方条目。
适用场景与限制¶
适合:主要用 DeepSeek 模型、在 DSH Desktop 或 Web Composer 里长时间跑 Agent、需要把 token 统计翻译成人民币并理解「每轮多调用 + 重读历史」成本结构的开发者。
限制(README 原文):
- 首轮无上句结算,显示
¥—。 - 被中断且该轮没有任何模型调用时,不会覆盖上一次 settled 值。
- 非 DeepSeek provider 需改源码费率常量。
- 峰谷混合使用时,按当前费率折算会有漂移。
结尾¶
DSH 内置行数/step/token 很有用,但缺「上一句到底花了多少钱」这一维。dsh-spend-pill 用一颗状态栏胶囊补上 settled 成本与拆分,并提示上下文与下一句起步价,适合和官方统计行对照使用。