WorkBuddy Monitor — 自己动手打造 AI 编程助手的用量监控系统
WorkBuddy Monitor — 自己动手打造 AI 编程助手的用量监控系统

WorkBuddy Monitor — 自己动手打造 AI 编程助手的用量监控系统

当 AI 编程助手吃掉你的 API 额度时,你至少应该知道钱花在了哪里。

1. 前言

如果你和我一样,每天都在用 WorkBuddy(以及其他 AI 编程助手)写代码,你一定遇到过这个问题:每个月 API 账单来了,完全不知道这些 Token 用在了哪里。

某个模型花了多少钱?哪次会话消耗最大?某个 agent 调用了多少次?—— 一片空白。

这就是我写 WorkBuddy Monitor 的原因。它不是一个”计划中的功能”,而是一个已经跑起来的、能让你把 AI 使用情况看得一清二楚的监控系统。

2. 什么是 WorkBuddy Monitor?

它是一个双数据源互补的 AI 使用监控系统:

  • 方案 A — Trace 文件扫描:自动读取 WorkBuddy 生成的 trace JSON 文件(每 5 秒扫描一次),提取 Token 用量、模型名称、调用次数等元数据
  • 方案 B — MITM 代理拦截:拦截 WorkBuddy 与 LLM API 之间的 HTTPS 通信,捕获完整的 prompt 和 response 内容

两个方案的数据通过时间窗口自动关联,让你既能看统计数据,也能回溯具体的对话内容。

3. 核心功能一览

3.1 实时仪表盘

打开 http://localhost:5910,一个深色主题的全功能面板映入眼帘:

  • 概览卡片:总输入/输出/缓存 Token、Trace 数量、今日用量
  • 趋势图表:Token 累积趋势、小时级分布、模型用量占比、代理用量分布
  • 会话列表:支持多列组合排序,一键切换显示条目数
  • 代理控制:内置 MITM 代理的启动/停止控制面板

3.2 四级下钻分析

从会话 → Trace → Span(调用序列)→ 捕获记录,一路点下去,没有盲区:

  1. 会话详情 — 某次编码会话的整体统计
  2. Trace 详情 — 单次 AI 调用的完整剖析,包括 Span 调用链
  3. Span 分析 — agent/generation/function/custom 四类 Span 分类展示,可搜索过滤
  4. 捕获记录 — 通过时间关联的完整 prompt 和 response 内容

3.3 MITM 代理:白盒拦截,零入侵

这是我最自豪的部分。用纯 Python(asyncio + cryptography)实现了一个 HTTPS MITM 代理:

  • 自动生成自签名 CA 证书
  • 对每个目标主机动态生成 TLS 证书
  • 只拦截 api.deepseek.comapi.minimaxi.com 等 LLM API,其他请求透明转发
  • 支持 SSE 流式响应解析,能拼合 stream 中的 delta content
  • 内置智能修复:自动修正 MiMo 模型的图片请求格式问题

不依赖 mitmproxy,不修改任何应用代码,真正做到 双击即用、零配置运行

3.4 四种部署方式

方式适合场景
独立 exe双击运行,零依赖,谁都能用
Python 源码跨平台,适合开发者二次开发
Docker一键部署到服务器
Docker Compose生产级容器编排

4. 技术栈一览

技术用途
Python 3.9+、asyncio主开发语言 + 异步 I/O 核心
Flask 3.xWeb 框架(REST API + 页面渲染)
SQLite3本地持久化数据库
cryptography >=41.0CA 证书生成 + TLS 证书签名
Chart.js 4.4.1前端图表可视化
PyInstaller打包为独立 Windows exe
Docker / Compose容器化部署

5. 项目架构

WorkBuddy (AI助手)
  ├─ traces/*.json (Token用量元数据)
  └─ HTTPS 请求 → MITM Proxy (5911端口)
                    └─ 拦截 DeepSeek/MiniMax 等 API
                       └─ 保存完整 prompt/response

WorkBuddy Monitor
  ├─ TraceWatcher (5秒轮询) → SQLite
  ├─ MITM Proxy (asyncio)  → SQLite
  └─ Flask Web (5910端口)
       ├─ REST API
       └─ 深色主题面板 (Chart.js)

6. 开发中的挑战与取舍

6.1 双数据源设计

为什么不用单一方案?因为 trace 文件只有元数据(Token 数、模型名),没有具体的对话内容。MITM 代理能捕获对话内容,但需要用户手动配置。两个方案互补,让用户按需选择——Trace 监控零配置开箱即用,需要看具体内容时再开启代理。

6.2 自建 CA vs mitmproxy

用成熟的 mitmproxy 不是更简单吗?是的,但依赖一个 50MB+ 的外部工具不符合”零配置”的理念。用 cryptography 库自建 CA,整个核心逻辑不到 200 行代码,生成证书、签名、TLS 握手全搞定。

6.3 SSE 流式解析

LLM 的响应大多是流式的 Server-Sent Events。代理层不能简单等完整响应,必须一边转发一边拼合 chunk。我实现了一个状态机式的解析器,能正确处理换行、JSON 碎片、多个 data 事件——这在调试时是最容易出 bug 的地方。

6.4 时间关联匹配

Trace 文件和代理捕获的数据没有共同的 ID。解决方案:用时间窗口匹配——以 trace 的时间戳为中心,前后各取 10 秒缓冲,查找在该窗口内的捕获记录。实测效果不错,误匹配率很低。

从项目的 artifacts/dist/web/ 目录获取 wb-monitor-web.exe,双击运行,打开 http://localhost:5910 即可。

pip install -r config/requirements.txt
python run.py

四种部署方式覆盖了从零门槛到生产集群的全场景,可按需选择:

方式适用场景难度依赖
① 独立 exe其他 Windows 设备(无需环境)
② Python 源码有 Python 环境的任何设备⭐⭐Python 3.9+
③ Docker服务器 / Linux / macOS / Windows⭐⭐Docker
④ Docker Compose需要集群管理的设备⭐⭐⭐Docker Compose

7. 如何开始使用

7.1 方式一:独立 exe(Windows,最推荐)

无需安装 Python,一个 exe 直接运行。

在本机运行 scripts/build_exe.bat 打包(或直接使用已编译的 exe),完成后得到:

  • artifacts/dist/web/wb-monitor-web.exe — 完整面板(~15MB),包含 MITM 代理功能
  • artifacts/dist/proxy/wb-monitor-proxy.exe — 仅 MITM 代理(可选)

部署到其他 Windows 设备:将 exe 复制到目标设备,双击运行,浏览器访问 http://127.0.0.1:5910 即可。目标设备需要有 WorkBuddy 的 trace 文件(位于 ~/.workbuddy/traces/)才能看到数据。

命令行选项:

wb-monitor-web.exe                       # 默认启动面板
wb-monitor-web.exe --proxy               # 同时启动 MITM 代理
wb-monitor-web.exe --port 8080           # 自定义端口
wb-monitor-web.exe --no-browser          # 不自动打开浏览器
wb-monitor-web.exe --help                # 查看全部选项

7.2 方式二:Python 源码(跨平台)

任何安装了 Python 3.9+ 的设备均可使用。

安装依赖并启动:

cd wb_monitor
pip install -r config/requirements.txt
python run.py

可选:安装为系统命令,全局可用:

pip install .
wb-monitor

配合 MITM 代理启动:python run.py --proxy,然后在应用中将 HTTPS 代理设为 http://127.0.0.1:5911,首次使用需将 ~/.workbuddy-monitor/proxy-ca/ca.crt 安装为受信任根证书。

7.3 方式三:Docker(推荐服务器)

一键部署到任何支持 Docker 的设备。

docker build -t wb-monitor -f docker/Dockerfile .
docker run -d \
  --name wb-monitor \
  -p 5910:5910 \
  -v ~/.workbuddy/traces:/root/.workbuddy/traces:ro \
  -v wb-monitor-data:/root/.workbuddy-monitor \
  wb-monitor

~/.workbuddy/traces 只读挂载 trace 数据,wb-monitor-data 卷持久化 SQLite 数据库。

7.4 方式四:Docker Compose(推荐生产)

export TRACES_DIR=/path/to/your/traces
docker compose -f docker/docker-compose.yml up -d

如需对外暴露 MITM 代理端口,取消 docker-compose.yml5911:5911 的注释。

部署检查清单

  • 目标设备能访问 WorkBuddy trace 文件(~/.workbuddy/traces/
  • 端口 5910(Web 面板)未被占用
  • 如需 MITM 代理,端口 5911 也需可用
  • 如需 MITM 代理,需安装 CA 证书到系统证书库

项目目录结构

wb_monitor/
  run.py              - 统一入口(推荐使用)
  monitor.py          - Web 面板主程序(~3000行)
  llm_proxy.py        - MITM 代理模块(~800行)
  setup.py            - pip install 安装配置
  config/             - 配置文件
  docker/             - Docker 部署
  scripts/            - 启动/打包脚本
  docs/               - 部署文档
  artifacts/          - 生成物与缓存

8. 最后

WorkBuddy Monitor 不仅是一个工具,也是我对”如何监控 AI 使用”这个问题的完整解答。它涵盖了文件监控、网络代理、数据持久化、可视化面板、跨平台部署等完整技术栈——全部用一个 Python 项目实现。

如果你也在用 WorkBuddy 或其他 AI 编程助手,并且想知道自己的 API 额度花在了哪里,不妨试试它。

开源地址wb_monitor 📂 在线预览 wb_monitor.zip —— 查看项目完整目录结构。


透明,是高效使用 AI 的第一步。

starry0214

订阅评论
提醒
guest

1 评论
最新
最旧 最多投票
内联反馈
查看所有评论
着急·吴
着急·吴
9 小时 前

我真了个大擦了