🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

花费统计 wuenna/dsh-deepseek-cost

DeepSeek 客户端
wuenna38 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

在用量面板旁显示会话与本轮对话的实时花费

29.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/wuenna/dsh-deepseek-cost.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 38 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 2 处,展示前 2 条)
  • 写入本地文件
    lib/index.js:719
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    lib/index.js:720
    writeFileSync(join(dir, 'boot.log'), `${new Date().toISOString()} host half mounted: ${detail}\n`);
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 显示会话总花费
  • 显示当前轮花费
  • 并入Token用量面板

DSH 插件:把 DeepSeek 官方费用统计(会话总计 + 当前轮)加进内置的 Token 用量面板。

README

由 DeepSeek 最新模型翻译生成
dsh-deepseek-cost 一个 DeepSeek Harness(DSH)插件,用于显示对话到目前为止的花费:在内置的步骤/时间和 token 统计旁边显示一个花费胶囊,其中会话总计和当前轮次按 DeepSeek 官方高峰/非高峰 API 费率计价,并在每个已完成轮次的内置本轮用量面板中增加一行花费。 所有非 DeepSeek 路由均按 0 计。 它增加了什么 在编辑器停靠栏中增加一个花费胶囊,与内置的步骤/时间和 token 胶囊并排显示。开头的 ¥ 是整个胶囊的货币符号,因此其旁边的金额保持裸值——每个胶囊一个符号: [¥] 0.4321 · 本轮 0.0123 点击它会打开自己的详情对话框,形状与内置的步骤和 token 对话框相同(相同的面板、标题和分隔线——使用相同的已发布 useAnchoredPosition / useDismissOnOutsidePointer 原语来定位和关闭它)。 面板本身就是网格:花费类别,然后每个范围一列。 两个范围总计位于标题栏中,并且由于网格从面板边缘开始,它们正好落在其所汇总的列上方。
展开完整文档(README 剩余 1 节)
dsh-deepseek-cost

一个 DeepSeek Harness(DSH)插件,用于显示对话到目前为止的花费:在内置的步骤/时间和 token 统计旁边显示一个花费胶囊,其中会话总计和当前轮次按 DeepSeek 官方高峰/非高峰 API 费率计价,并在每个已完成轮次的内置本轮用量面板中增加一行花费。
所有非 DeepSeek 路由均按 0 计。

它增加了什么

在编辑器停靠栏中增加一个花费胶囊,与内置的步骤/时间和 token 胶囊并排显示。开头的 ¥ 是整个胶囊的货币符号,因此其旁边的金额保持裸值——每个胶囊一个符号:

[¥] 0.4321 · 本轮 0.0123

点击它会打开自己的详情对话框,形状与内置的步骤和 token 对话框相同(相同的面板、标题和分隔线——使用相同的已发布 useAnchoredPosition / useDismissOnOutsidePointer 原语来定位和关闭它)。

面板本身就是网格:花费类别,然后每个范围一列。
两个范围总计位于标题栏中,并且由于网格从面板边缘开始,它们正好落在其所汇总的列上方。

¥ 花费 ¥ 0.4321 ¥ 0.0123 ────────────────────────────────────────────── 会话 本轮输入未缓存 ¥ 0.0120 ¥ 0.0010 输入缓存 ¥ 0.0988 ¥ 0.0028 输出 ¥ 0.3213 ¥ 0.0085 ────────────────────────────────────────────── 预估(按官方价) ~¥ 0.1650 ~¥ 0.0165 ────────────────────────────────────────────── 计费时段 空闲时段未计费调用 1 次 · 非 DeepSeek 官方,按 0 计

- 三个花费类别是提示词侧拆分(输入未缓存 / 输入缓存)加上输出,每个范围分别计价。会话 / 本轮标题命名了两个数值列。
- 标题栏带有每个范围一个总计,因此下方不会重复总计行,两个总计也都不会打印两次。
- 预估(按官方价) 回答“按 0 计费的路由如果按官方费率计费会花费多少?”——参见估算按 0 计费的路由。
它复用两个范围列,被淡化显示,并带有波浪号标记,因此绝不会被误读为已计费总计的一部分。它仅在某些调用确实按 0 计费时出现。
- 不属于任一范围的项在网格下方的全宽页脚中独占一整行——这就是此处表达“横跨两列”的方式,并且它还能保持其上方分隔线连续(跨越式网格行会在列间隙处断开细线)。

没有替换任何内置内容。该胶囊是编辑器停靠栏槽位的普通占用者,停靠栏会将其占用者内联布局,因此该胶囊只是位于内置胶囊旁边。如果投影不存在,该占用者渲染为 null,不会有任何回归。

内置本轮用量面板中的行

打开已完成轮次的内置用量信息会显示该轮次的 token;此插件将该轮次的花费追加到同一列表的最后一行,因此金额可以在 token 所在的位置被读取:

本轮用量 22,582.085 tok ────────────────────────────────────────── 提供方 / 模型 deepseek-official/deepseek-flash 缓存命中 97.8% 未缓存输入 487,432 tok 缓存读取 22,070,784 tok 缓存写入 0 tok 输出 23,869 tok 花费 ¥ 1.02

该面板是随附的 UI,没有自己的插槽,因此这是插件读取另一个包 DOM 的唯一一处——这是有意为之,并且仅通过两个钩子实现:

- dl[data-turn-usage-details] —— DSH 放在轮次用量面板自身行列表上的属性(相邻的会话统计和性能面板使用 data-session-stats-details,因此这个属性是明确无歧义的)。该行仅在该面板打开时追加,并且仅在检查确认它尚不存在之后才追加。
- data-turn-tail —— DSH 在已完成轮次的页脚上标记的轮次编号,从被点击触发器的祖先元素中读取。点击触发器是打开该面板的唯一方式,因此为较早轮次打开的面板显示的是那个轮次的成本,而绝不是当前轮次的成本。

追加操作是幂等的,观察器仅监视 document.body 的子元素(面板被传送到的位置),并且整个监视器是占用者上的一个 effect,当占用者卸载时会断开连接。client.test.mjs 断言整个 bundle 的选择器清单,因此无法悄悄添加第三个钩子。

调用计费为 0 的轮次仍会得到该行,并带有与对话框相同的假设推算——花费 ¥ 0.00(预估 ~¥ 0.98)——而早于插件自身账本的轮次从未被定价,因此其面板保持不变。

估算计费为 0 的路由

只有 deepseek-official 会计费,因此其他所有提供方显示的实际成本都是 0。估算说明的是这些相同的请求本会按官方费率产生多少成本。

使用哪个费率。 模型 id 决定参考层级:名称中包含 Pro 模型的 id 参考 deepseek-v4-pro,其他所有情况参考 deepseek-flash——无论是 Flash 别名、版本未知的 DeepSeek id,还是完全来自其他家族的模型(Qwen、GLM、MiniCPM5-2B)。Flash 是最便宜的官方费率,因此是假设推算的保守选择。

使用哪个缓存命中率。 这是估算所依赖的唯一前提,因此它被明确说明而不是被埋没:

| 路由报告 | 使用的费率 |
| 完全没有缓存读取(0%) | 95% 缓存命中 |
| 任何非零缓存命中率 | 所报告的那个费率 |

第三方路由常常完全不报告缓存核算,而 agent 会话几乎每一步都会重新发送其几乎整个提示词。如果按字面理解所报告的零,就会把整个提示词按缓存未命中费率计价——高出一个数量级。因此,整个提示词是按命中率重新拆分的,而不是逐桶读取,而 95% 是真实会话稳定后呈现的形态。

估算遵循与实际成本相同的规则:相同的峰/谷乘数、相同的步内样本替换,以及相同的重试计费。

定价

费率以每 1,000,000 个 token 的人民币计,非高峰时段适用,高峰时段按每个费率恰好两倍计费。来源:。

| 模型 id | 生效时间(北京) | 缓存命中 | 缓存未命中 | 输出 |
| deepseek-flash、deepseek-v4-flash、deepseek-v4-flash-vision-exp | 2026-08-17 00:00 | 0.05 | 1.5 | 4.5 |
| 同上 | 2026-09-10 12:00 | 0.02 | 1 | 4 |
| deepseek-v4-pro | 2026-08-17 00:00 | 0.15 | 4.5 | 13.5 |

- 高峰时段为北京时间 09:00–12:00 和 14:00–18:00,周一至周五;其余时间均为非高峰,包括周末。
- 两个已退役的 Flash 别名仍可调用,并按 deepseek-flash 提供服务——以及计费,因此它们共享其费率档位。
- 缓存写入按缓存未命中费率计费。
- 推理 token 已包含在提供方的 outputTokens 中,因此无需单独列一行。
- 没有公布费率的模型 id,以及除 deepseek-official / deepseek 之外的每个提供方,均按 0 计费,同时其 token 保持可见(投影中的 freeCalls),因此未定价的调用绝不会被静默并入 DeepSeek 的数字中。

工作原理

宿主侧(lib/index.js)在 ctx.sessionProjections 上注册 deepseekCost 会话投影。投影是对整个持久会话日志的纯同步折叠,因此无论转录分页和压缩如何,数字都是完整的——与 tokenUsage 和 sessionStats 使用的是同一个接缝。

该折叠镜像了 token-meter 的替换规则:一个 (turn, step) 内的最后一个用量样本替换其前一个,而 llm/retry-started 关闭该槽位,因此重试的尝试会新增第二个计费尝试。路由归属优先采用已定型的助手消息自身的 source,其次是最后一个 request/header / request/context 快照。

除了会话和当前轮次总计之外,该折叠还保留一个逐轮账本(turns,以轮次编号为键),记录每一轮的成本和估算。已完成的轮次永远不会再次成为当前轮次—— turn/start 在每个边界处重置当前轮次的数字——但其用量面板仍可从转录中打开,因此正是该账本使该面板可被应答。替换和重试只重写其自身轮次的条目。

浏览器侧(lib/client.js)在 conversation.composer.dock 列表槽位上注册一个占位项,使用 useProjection('deepseekCost') 读取投影,并将该胶囊作为该占位项的元素返回。dock 是一个 flex 行(InputBar.module.css .dock),因此该胶囊与内置胶囊并排内联布局;该占位项不拥有任何 portal,也不进行任何锚定。该胶囊拥有自己的对话框席位,复刻了随附原语中内置 useStatDialog 的放置和关闭方式。该占位项的唯一副作用是上文所述的轮次用量行监视器。
dock 槽位是公开契约,这正是让 pill 在 DSH 升级后仍能存活的原因:0.1.6 移除了统计行的 data-composer-stats 钩子,而内联 portal 本会需要它。pill 从未引用属于其他包的类名。本轮用量行是有意为之的例外——该面板不提供槽位——并且它仅限于上面两个 data- 属性,而非任何哈希类名。

该包同时声明了 dsh.bundle.patch 和 dsh.client,因此一条安装命令即可同时接入宿主行和浏览器 bundle。

各部分所在位置

有两个目录带有此插件的名称,它们存放的内容不同:

| 路径 | 它是什么 |
| ~/.dsh/plugins/dsh-deepseek-cost/ | 插件源码:package.json、cordis.patch.yml、lib/、test/、README.md。你编辑的所有内容都在这里。 |
| ~/.dsh/dsh-deepseek-cost/ | 插件的状态目录,由运行中的插件拥有。它只包含 boot.log。 |

boot.log 是一行激活记录,宿主半部分在每次挂载时都会覆盖它(2026-09-11T11:43:49.732Z host half mounted: projection "deepseekCost" registered)。当浏览器什么都不显示时,这是回答“我的重启是否真的加载了插件?”的最快方式。它的父目录像 harness 的其他部分一样遵循 $DSH_HOME,因此设置该变量会移动它。

名称冲突是 harness 自身的约定——插件拥有 ~/.dsh// 用于状态,与社区用量插件的 ~/.dsh/dsh-usage/ 并列——而 plugins/ 是这个插件的源码恰好所在的位置。运行时没有任何内容写入源码树,测试套件会将 $DSH_HOME 重定向到临时目录,因此运行它永远不会触及真实的状态目录。

安装

该包位于 ~/.dsh/plugins/dsh-deepseek-cost,并被链接到 web profile 的 node_modules 中,同时在 profile 自己的 patch 层中有一行记录。

1. link the package into the profile (a junction keeps one source of truth)
cmd /c mklink /J "$env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-deepseek-cost" "$env:USERPROFILE\.dsh\plugins\dsh-deepseek-cost"

然后 ~/.dsh/profiles/web/cordis.patch.yml 声明该行:

- insert:
- id: deepseek-cost
name: 'dsh-deepseek-cost'

web profile 是 patchReload: live,因此运行中的 dsh web 会在该文件更改时重新应用它;刷新页面,pill 就会出现。重启 dsh web 也会加载它。宿主半部分在每次挂载时都会向 ~/.dsh/dsh-deepseek-cost/boot.log 写入一行激活记录,这就是你确认它的方式。

只声明该行一次。insert 是追加的,因此同时在 dsh.profile.bundles 和 profile patch 层中列出 dsh-deepseek-cost 会将它挂载两次。

惯用替代方案

dsh plugin --profile web add 是正常的安装路径——它会链接该包,将名称追加到 dsh.profile.bundles,并让包自身的 dsh.bundle.patch 拥有该行。它在这台机器上被一个 pnpm store 阻止了
不匹配:

ERR_PNPM_UNEXPECTED_STORE node_modules is linked from
C:\Users\wuw\AppData\Local\pnpm\store\v11, pnpm now wants
C:\Users\wuw\.dsh\.pnpm-store\v11

要切换到它,请先协调存储(pnpm config set store-dir C:\Users\wuw\AppData\Local\pnpm store --global),在 ~/.dsh/profiles/web 中运行 pnpm install,然后在运行
dsh plugin --profile web add 之前删除上面这一行。

测试

cd C:\Users\wuw\.dsh\plugins\dsh-deepseek-cost
node test/fold.test.mjs # 23 pricing/fold cases
node test/client.test.mjs # 20 browser-half render/wiring cases
node test/wiring.test.mjs # 5 host-half + package-resolution cases

fold.test.mjs 的用例 1 和 2 复现了来自真实 DeepSeek 控制台账本的两个聚合值(2026-09-10 非高峰时段、2026-09-11 高峰时段),在那些日期生效的档位下精确到六位小数,从而将档位表、高峰时段和桶映射一并固定下来。用例 2b 展示了同样的 token 组合在一周后按当前档位计价的结果。client.test.mjs 通过真实的 window.__ModuleLoader__.load 契约驱动该 bundle,并针对一个最小化的 React 替身渲染药丸及其对话框,因为 React 在 DSH 中是浏览器端的静态模块,并未作为 Node 包安装。它断言了唯一可见的货币标记、钳制/测量后的放置、两种关闭路径、对话框的各行、无投影时的空操作、追加的 本轮用量 行(包括它回答的是哪一轮、其幂等性及其拆除)——并且,作为对 0.1.6 破坏性问题的回归防护,还断言了该 bundle 所评估的选择器的完整清单,这样 DOM 表面就无法在无人察觉的情况下增长。

配置

价格表位于 lib/index.js 的顶部(FLASH_TIERS、PRO_TIERS、 PRICE_BOOK、OFFICIAL_PROVIDERS)。为新模型 id 添加一个档位,或在 DeepSeek 更改费率时添加一个新的 { from, ... } 条目。每当 fold 的含义发生变化时,都必须提升 stateVersion,这样持久化的投影检查点会被丢弃,而不是被前向应用——它当前为 2,即添加了逐轮账本的版本;版本 1 的检查点也无法通过状态 schema,因此无论哪种情况都会从会话日志重放。
预览分享卡片长什么样 ↓wuenna/dsh-deepseek-cost
分享 · DeepSeek Harness Hub
wuenna/dsh-deepseek-cost

在用量面板旁显示会话与本轮对话的实时花费

回到顶部