手搓了一个 DeepSeek 桌面监控工具,零依赖 Electron 项目开源了
从一次「余额清零事故」说起,我开源了一个 DeepSeek 监控桌面应用
从一次「余额清零事故」说起
上个月跑了一个批量任务,用的 DeepSeek API。跑之前我看了眼余额,还有 60 多块,想着够用。结果那天晚上顺手点了好几次重试,等到第二天打开平台一看——余额归零,任务跑到一半全断了。
我打开 DeepSeek 官方控制台想看看钱到底是怎么烧的,结果发现更气人的事:
-
余额在一个页面,用量统计在另一个页面,消费明细又在第三个页面;
-
用量看板连个刷新按钮都没有,想看最新数据得关掉重新进;
-
想知道"这个月 V4 到底花了多少、缓存命中率多少",得自己拿计算器算。
作为一个程序员,我当时的想法很朴素:
这活儿不该让用户干,应该让机器干。
于是我用业余时间写了个桌面应用——DeepSeek Monitor。先放成品:

深色毛玻璃、无边框、驻留托盘、余额和用量一屏看完,还能自动刷新。
Github 地址(求个 star,真的):
它到底能干什么
一句话:把你的 DeepSeek 账户余额、消费趋势、模型用量,全部塞进一个 380 宽的小窗口里,并自动盯着它。
具体来说:
| 功能 | 说明 |
|---|---|
| 💰 余额监控 | 实时显示账户余额与可用状态 |
| 📊 双模型用量 | V4 Flash / V4 Pro 分别统计 Token、缓存命中率、消费金额 |
| 📈 7 日趋势图 | 命中/未命中/输出三段堆叠柱状图,悬停看明细 |
| 🧩 用量穿透 | 点模型卡片进详情页,按日看请求数和 Token |
| ⏰ 自动刷新 | 1/5/30/60 分钟四档,后台静默更新 |
| 🪟 系统托盘 | 关窗口不退出,托盘一键唤出 |
| 🚀 开机自启 | Windows/macOS 原生支持 |
| 🔑 Token 自动同步 | 内置登录窗口,自动捕获用量 Token |
以及 v1.1.0 新增的三板斧(后面细讲):
-
余额预警:跌破阈值弹系统通知,每个账户只提醒一次,不刷屏
-
多账户管理:多个 Key 一键切换,余额汇总
-
应用内自动更新:新版本自动下载,重启即生效
技术选型:为什么是 Electron + 零依赖?
做桌面工具,绕不开 Electron 和 Tauri 的争论。我选 Electron 的理由很实际:JS 一把梭,生态成熟,electron-builder 打包省心。而 Tauri 虽然包小,但 Rust 工具链 + WebView 兼容性对一个小工具来说试错成本有点高。
但我在依赖上做了个极端的选择:运行时零第三方依赖。
-
HTTP 请求?用 Node 原生
http/https模块,不引 axios; -
配置存储?手写 JSON 读写,不引 electron-store;
-
开机自启?直接调 Windows 注册表命令 / macOS LaunchAgent,不引 auto-launch。
你猜结果是什么?dependencies 字段长这样:
"dependencies": {
"electron-updater": "^6.6.2"
}
唯一的运行时依赖是自动更新组件。整个应用的核心逻辑就是主进程里那一千多行原生 Node 代码。好处显而易见:包体干净、供应链攻击面小、代码完全可控。
三个值得一提的实现细节
1. 用量 Token 的「自动捕获」是怎么做的
DeepSeek 的用量接口需要登录态的 Bearer Token,让用户手动去开发者工具里复制是反人类的。我的做法是:内置一个登录窗口,在它发出网络请求的瞬间拦下 Authorization 头:
// 在主进程拦截登录窗口的所有请求头
usageSyncWindow.webContents.session.webRequest.onBeforeSendHeaders(
{ urls: ['<all_urls>'] },
(details, callback) => {
const auth = details.requestHeaders.Authorization;
if (auth) maybeCaptureUsageToken(auth); // 验证有效后加密保存
callback({ requestHeaders: details.requestHeaders });
}
);
用户只需要在弹出的窗口里正常登录,Token 自动进配置。配合渲染进程里的 fetch/XHR hook 双保险,登录一次管很久。
2. 凭证加密:用系统的钥匙串
之前 API Key 明文躺在 config.json 里,我自己都心虚。v1.1.0 换成 Electron 的 safeStorage——底层是 Windows DPAPI / macOS Keychain,加密和解密都不经过我们的代码逻辑:
function encryptSecret(plain) {
if (safeStorage.isEncryptionAvailable()) {
return 'enc:v1:' + safeStorage.encryptString(plain).toString('base64');
}
return plain; // Linux 无钥匙串时回退明文
}
旧版本用户升级后,明文配置在首次启动时自动重写为加密格式,无需任何手动操作。
3. 余额预警的防刷屏设计
阈值触发通知不难,难的是别把用户烦死。我的状态机很简单:每个账户记录 ok / below 两种状态,只有状态跃迁时才发通知:
if (value < threshold && prev !== 'below') {
state = 'below';
notify(`账户「${name}」余额 ¥${value} 已低于阈值 ¥${threshold}`);
} else if (value >= threshold && prev === 'below') {
state = 'ok'; // 回升后重置,下次跌破才会再提醒
}
这样即使 1 分钟刷一次,也不会疯狂弹窗。
开源路上的一点点心得
这个项目经历了 v1.0.0 到 v1.1.0 的迭代,也踩了不少开源项目的坑,分享给想开源的同学:
-
README 要双语。中文社区和海外开发者吃两套文案,一份
README.md(英文)+ 一份README.zh-CN.md,顶部互相跳转,成本极低但受众直接翻倍; -
截图比什么都重要。README 里放一张真实界面截图,比十行功能描述都有说服力——用户 3 秒内判断要不要点 star;
-
CI 一定要从第一天就搭好。我配了 GitHub Actions:推送
vX.Y.Z标签自动构建 Windows/macOS/Linux 三平台安装包并发布 Release,latest.yml自动生成,应用内自动更新直接复用这套产物。从此发布 = 打一个 tag; -
安全敏感功能要写清楚。SECURITY.md 里明确"凭证加密范围、Token 捕获逻辑",既是给维护者看,也是给用户信任感。
安装 & 使用(30 秒上手)
方式一:下载安装包(推荐)
去 Releases 页面 下载 DeepSeek-Monitor-Setup-1.1.0.exe,Windows 直接装。macOS 有 dmg,Linux 有 AppImage。
⚠️ 未签名的 Windows 包会弹 SmartScreen,点「更多信息 → 仍要运行」即可。
方式二:源码跑
git clone https://github.com/guniang2/deepseek-monitor.git
cd deepseek-monitor
npm install
npm start
首次使用三步:设置页粘 API Key(sk- 开头)→ 点「网页登录自动同步」→ 完事。剩下交给它。
最后
这个项目的定位很纯粹:一个不打扰你、但替你盯着钱包的桌面小工具。
如果你也觉得"查个余额不该这么麻烦",欢迎来仓库逛逛:
点个 star 就是对我最大的支持,有使用问题提 issue,有想法直接提 PR,Contributing 指南都写好了。
也希望这帖子能给你一点启发:工具不是越复杂越好,而是越顺手越好。当你在某个场景反复被烦到的时候,可能就是一个值得做的小项目。
更多推荐



所有评论(0)