Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>TimedPS 用量统计New to Visual Studio Code? Get it now.
TimedPS 用量统计

TimedPS 用量统计

lcz

|
9 installs
| (1) | Free
通过本地代理统计第三方 AI 接口的 Token 用量和预估费用
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

TimedPS

TimedPS 是一个给 Trae / VS Code 使用的本地代理统计插件。

它的作用很简单:

  1. 在你本机启动一个本地 HTTP 网关,默认监听 31234 端口。
  2. 把你发给大模型的请求先经过这个本地网关,再转发到真实模型服务。
  3. 从模型返回结果里解析 usage 数据,统计 Token 用量和预估费用。
  4. 在编辑器里实时展示累计消耗、每轮历史记录,以及 DeepSeek 官方余额。

如果你之前总是搞不清楚“这一下午到底用了多少 Token、花了多少钱”,这个插件就是专门解决这个问题的。

它能做什么

  • 在右下角状态栏实时显示总 Token、预估费用、官方余额。
  • 点击状态栏后弹出悬浮面板,快速查看当前统计信息。
  • 在侧边栏显示每一轮对话的历史记录。
  • 自动记录每轮对话的大致提问摘要,方便回看。
  • 支持区分输入 Token、缓存命中 Token、输出 Token。
  • 支持按单价自动估算费用。
  • 支持手动刷新 DeepSeek 官方余额。
  • 支持手动设置 API Key。
  • 支持查看本地网关运行日志,便于排查问题。
  • 关闭编辑器后数据不会丢失,重新打开还能继续看历史。

工作原理

可以把它理解成一个“本地中转站”:

Trae / VS Code
    -> TimedPS 本地网关(你的电脑,默认 31234)
    -> 真实模型 API(默认 DeepSeek)
    -> 返回结果给 Trae / VS Code

也就是说,Trae 原本直接请求 DeepSeek,现在改成先请求 http://127.0.0.1:31234。 TimedPS 收到请求后,会继续转发到真正的模型服务地址,比如 https://api.deepseek.com。

这样做的好处是:

  • 不需要改你原本的使用习惯。
  • 不需要改模型接口协议。
  • 只要模型响应里带 usage,就可以统计。

适合谁用

  • 想知道自己每天到底用了多少 Token 的人。
  • 想知道大概花了多少钱的人。
  • 使用 Trae 第三方模型配置的人。
  • 想查看每轮 AI 对话消耗记录的人。
  • 想排查代理请求、余额读取、端口冲突问题的人。

快速开始

如果你是第一次使用,建议先看这一节。

最容易漏掉的两件事就是:

  1. 先把 Trae 的自定义模型地址改到 TimedPS 本地代理。
  2. 再确认 API Key 是否已经带上,这样统计和余额功能才能正常工作。

只要这两步没配对,插件通常就会出现“装上了但没统计”“看不到余额”“状态栏没变化”这些问题。

第 1 步:安装插件

先把 TimedPS 安装到 Trae 或 VS Code 里。

如果你手里已经有打包文件,比如:

  • timedps-0.0.5.vsix

常见安装方式:

  1. 打开编辑器扩展页。
  2. 选择“从 VSIX 安装”。
  3. 选中 timedps-0.0.5.vsix。
  4. 安装完成后重载窗口。

安装完成后,右下角通常会出现 TimedPS 的状态栏信息。

常见显示有两种:

  • 网关未连接
  • 123k · ¥0.1234 ¥99.00

如果显示 网关未连接,一般说明:

  • 本地网关还没成功启动。
  • 配置端口被其他程序占用了。
  • 插件刚启动,正在等待网关连接。

第 2 步:先配置 Trae 自定义模型

这一步最重要,而且一定要放在前面做。

插件安装完以后,并不会自动接管你的模型请求。 你必须手动把 Trae 里对应模型服务商的请求地址改成 TimedPS 的本地网关地址,请求才会先经过插件。

默认本地代理地址是:

http://127.0.0.1:31234

如果你的模型接口原本带 /v1 前缀,通常要改成:

http://127.0.0.1:31234/v1

你可以按下面步骤操作:

  1. 打开 Trae 的设置页。
  2. 找到你正在使用的自定义模型或第三方模型配置,比如 DeepSeek。
  3. 找到 Base URL、API Base URL、Endpoint 或类似字段。
  4. 把原来的官方地址改成 TimedPS 本地代理地址。
  5. 保存设置。

最常见的对应关系如下:

  • 原地址是 https://api.deepseek.com

  • 就改成 http://127.0.0.1:31234

  • 原地址是 https://api.deepseek.com/v1

  • 就改成 http://127.0.0.1:31234/v1

如果你不知道自己该填哪个,可以用这个最简单的判断方法:

  • 你原来的地址后面没有 /v1,现在一般也不要加 /v1
  • 你原来的地址后面有 /v1,现在一般也要保留 /v1

这一点非常关键,因为:

  • Base URL 不改,请求不会经过 TimedPS
  • 请求不经过 TimedPS,就不会有 Token 统计
  • 没有真正经过代理,插件也拿不到请求头里的 API Key

第 3 步:确认 API Key 已经设置好

这一步同样非常重要。

TimedPS 自己不负责帮你申请 API Key,它只是读取和使用你已经在 Trae 或命令里提供的 Key。

当前有两种方式让插件拿到 API Key。

方式 A:直接使用你在 Trae 自定义模型里填写的 API Key

这是最常见、也是最推荐的方式。

你在 Trae 自定义模型配置里,本来就会填写 API Key。 只要请求真的经过 TimedPS,本地网关就会从请求头里的 Authorization: Bearer ... 自动提取这个 Key。

这意味着:

  • 你不一定需要额外手动设置 API Key
  • 只要你已经在 Trae 里填好了,并且请求走到了本地代理,插件一般就能自动拿到

方式 B:手动设置 API Key

如果你还没有真正发起过一次请求,或者自动提取失败,也可以手动设置。

操作方法:

  1. 打开命令面板。
  2. 搜索 AI 用量:手动设置 API Key。
  3. 输入你的 DeepSeek API Key,例如 sk-...。
  4. 保存后,插件会把它写入本地汇总数据中。

这种方式适合下面几种情况:

  • 你还没开始正式对话,但想先测试余额刷新功能。
  • 你的请求没有成功经过代理,导致自动提取失败。
  • 你想先单独确认 Key 是否可用。

第 4 步:确认官方余额能不能正常获取

如果你使用的是 DeepSeek,建议把这一步也尽早做掉。

操作方法:

  1. 打开命令面板。
  2. 搜索 AI 用量:刷新官方余额。
  3. 执行后观察是否提示获取成功。

这一步的意义是:

  • 可以顺便确认你的 API Key 是有效的
  • 可以确认插件已经拿到或保存了 API Key
  • 可以提前排除“为什么后面看不到余额”的问题

如果刷新失败,常见原因通常是:

  • 当前还没有可用的 API Key
  • API Key 填错了
  • 你当前使用的不是 DeepSeek

第 5 步:发起一次正常对话

现在你像平时一样在 Trae 里和模型对话就行。

当请求经过 TimedPS 后,插件会自动:

  • 提取用户问题摘要。
  • 解析响应里的 usage。
  • 统计 Token。
  • 计算预估费用。
  • 记录到历史列表。

第 6 步:查看统计结果

你可以从 3 个地方看数据:

  1. 状态栏
    • 适合快速看总量。
  2. 点击状态栏后的悬浮面板
    • 可以看到总 Tokens、预估费用、官方余额、网关状态。
  3. 左侧 AI 用量侧边栏
    • 可以查看每轮历史记录和详细拆分。

安装方式

方式一:安装打包好的 .vsix

如果你已经有打包文件,比如:

  • timedps-0.0.5.vsix

可以直接在 Trae 或 VS Code 里安装这个扩展包。

方式二:本地源码运行

如果你是开发者,或者你想自己改代码后测试:

  1. 进入项目目录。
  2. 安装依赖。
  3. 编译 TypeScript。
  4. 在 VS Code / Trae 里启动扩展调试。

常用命令:

npm install
npm run compile

开发时监听编译:

npm run watch

打包 .vsix:

npm run package

界面说明

1. 状态栏

状态栏在编辑器右下角。

当网关连接正常时,会显示类似:

12.3k · ¥0.0567  ¥18.42

这几个值分别表示:

  • 第一个值:累计 Token。
  • 第二个值:累计预估费用。
  • 第三个值:官方余额(有时会显示,有时不会显示)。

如果当前没有成功连上网关,会显示:

网关未连接

点击状态栏,会打开统计悬浮面板。

2. 悬浮统计面板

点击状态栏后,会弹出一个悬浮面板,里面会展示:

  • 总 Tokens
  • 预估费用
  • 官方余额
  • 网关状态

这个面板右上角还有一个刷新按钮,用来刷新官方余额。

3. 左侧侧边栏历史

插件会在 Activity Bar 里提供一个 AI Usage 视图。

这里会按时间倒序显示每轮对话历史,每条记录会显示:

  • 提问摘要
  • 时间
  • 本轮费用

点开某一条记录后,还能看到详细拆分:

  • 费用
  • 总 Tokens
  • 未命中缓存的输入 Token
  • 命中缓存的输入 Token
  • 输出 Token
  • 本轮 API 请求次数

它是怎么统计“每一轮”的

插件不是简单地把每次 HTTP 请求都当成一轮。

它会把一次对话过程里的多次相关请求,尽量合并成同一轮来记录。 比如:

  • 先发起一次提问
  • 中间模型又触发一次内部继续生成
  • 或者发生多次连续调用

这些都会尽量累加进同一轮里。

同时,插件会从请求体里的 messages 中提取最后一条用户消息,并清理掉一些 IDE 自动注入的上下文噪音,让历史记录里的标题更像“你真正问的问题”。

支持的响应类型

当前实现支持两类响应统计:

  • 普通 JSON 响应
  • SSE 流式响应(text/event-stream)

也就是说,不管你是一次性返回,还是流式输出,只要上游响应里包含 usage 信息,TimedPS 就会尝试统计。

费用是怎么计算的

TimedPS 会分别统计:

  • 未命中缓存的输入 Token
  • 命中缓存的输入 Token
  • 输出 Token

然后按下面思路估算费用:

费用 =
未命中缓存输入 Token / 1,000,000 × 输入单价
+ 命中缓存输入 Token / 1,000,000 × 缓存命中单价
+ 输出 Token / 1,000,000 × 输出单价

默认价格配置是:

  • 输入单价:1
  • 输出单价:2
  • 缓存命中单价:0.1

你可以在设置里改成适合你当前模型的价格。

插件命令

打开命令面板:

  • macOS:Cmd + Shift + P
  • Windows / Linux:Ctrl + Shift + P

搜索 AI Usage,你会看到这些命令。

AI Usage: Show Details

打开或关闭悬浮统计面板。

AI Usage: Reset Usage

清空累计统计和历史记录。

适合在以下场景使用:

  • 你想从今天重新开始统计。
  • 你想单独统计某一次任务的消耗。

AI Usage: Refresh Official Balance

主动刷新 DeepSeek 官方余额。

AI Usage: Set API Key Manually

手动输入并保存 DeepSeek API Key。

这个命令主要用于下面两种情况:

  • 你还没真正发起过代理请求,但想先刷新余额。
  • 自动从请求头里提取 API Key 失败了。

AI Usage: Refresh History Tree

手动刷新左侧历史记录树。

AI Usage: Show Gateway Log

打开本地网关日志文件,用于排查问题。

设置项说明

在设置里搜索 aiUsageTracker,可以看到以下配置项。

aiUsageTracker.targetApiUrl

真实要转发到的模型 API 基础地址。

默认值:

https://api.deepseek.com

如果你接入别的兼容 OpenAI 风格接口的服务,可以改这里。

aiUsageTracker.proxyPort

本地代理端口。

默认值:

31234

如果这个端口被别的程序占用了,可以换一个。 改完以后,别忘了同步修改 Trae 里的模型 Base URL。

aiUsageTracker.currencySymbol

界面显示的货币符号。

默认值:

¥

你也可以改成:

$

aiUsageTracker.inputPricePerMillion

每 100 万个未命中缓存输入 Token 的价格。

默认值:

1

aiUsageTracker.outputPricePerMillion

每 100 万个输出 Token 的价格。

默认值:

2

aiUsageTracker.cacheHitPricePerMillion

每 100 万个缓存命中输入 Token 的价格。

默认值:

0.1

官方余额说明

插件支持查询 DeepSeek 官方余额,但有几个前提:

  1. 需要有有效的 DeepSeek API Key。
  2. 这个 API Key 会从代理请求头里自动提取,或者通过命令手动设置。
  3. 点击刷新余额后,插件会去请求 DeepSeek 官方的 /user/balance 接口。

注意:

  • 这里的“官方余额”是 DeepSeek 官方余额。
  • 即使你把 targetApiUrl 改成别的服务商,余额刷新功能也不一定适用。
  • 如果你使用的不是 DeepSeek,这部分功能可能不可用,但 Token 统计仍然可以正常工作。

数据保存在哪里

插件的数据不是只放在内存里。

TimedPS 会把数据写到扩展自己的本地存储目录中,主要包括:

  • summary.json
    • 保存累计 Token、累计费用、官方余额、API Key 等汇总信息。
  • history.jsonl
    • 按行保存每一轮的历史记录。
  • gateway.log
    • 本地网关运行日志。

所以即使你关闭编辑器,只要没有手动重置,这些统计数据一般都会保留下来。

常见问题

1. 我安装了插件,但没有任何统计

最常见原因是:你还没有把 Trae 的模型 Base URL 改到本地代理地址。

请重点检查:

  • 是否改成了 http://127.0.0.1:31234
  • 或者 http://127.0.0.1:31234/v1

2. 状态栏一直显示“网关未连接”

可能原因:

  • 插件启动网关失败。
  • 当前端口被其他程序占用。
  • 你改了端口,但 Trae 里还是旧端口。

建议排查:

  1. 检查 aiUsageTracker.proxyPort。
  2. 确认这个端口没有被别的程序占用。
  3. 执行 AI Usage: Show Gateway Log 查看日志。

3. 为什么有时候看不到官方余额

可能原因:

  • 还没有获取到 API Key。
  • API Key 无效。
  • 你当前不是在用 DeepSeek。
  • 还没有手动点击刷新余额。

解决方法:

  1. 先正常发起一次请求,让插件自动提取 API Key。
  2. 或者执行 AI Usage: Set API Key Manually 手动填写。
  3. 再执行 AI Usage: Refresh Official Balance。

4. 为什么金额和官网账单不完全一样

因为这里显示的是“按你配置的单价估算出来的费用”。

影响差异的因素包括:

  • 你设置的价格是否和官方最新价格一致。
  • 你使用的模型是不是当前这组单价。
  • 服务商是否还有其他计费规则。

所以 TimedPS 更适合做“实时估算和趋势观察”,不是替代官方结算单。

适合用来排查哪些问题

如果你在 Trae 里配置了自定义模型,经常会遇到这些问题:

  • 到底有没有真的走到本地代理?
  • 请求有没有转发到上游?
  • 上游响应是不是正常返回了?
  • 为什么状态栏没有累计数据?
  • 为什么余额刷新失败?

这时你可以:

  1. 看状态栏是不是已连接。
  2. 打开悬浮面板看网关状态。
  3. 打开左侧历史看是否有新记录。
  4. 执行 AI Usage: Show Gateway Log 看网关日志。

开发说明

当前项目主要文件:

  • src/extension.ts
    • 扩展入口,负责状态栏、命令、侧边栏、启动网关进程。
  • src/gateway.ts
    • 独立本地网关,负责请求转发、usage 解析、文件存储、余额接口。
  • src/treeProvider.ts
    • 左侧历史记录树的数据提供者。

编译输出目录:

  • out/

TypeScript 配置入口:

  • tsconfig.json

项目脚本:

npm run compile
npm run watch
npm run package

总结

如果你只想快速用起来,记住下面 3 件事就够了:

  1. 安装 TimedPS。
  2. 把 Trae 的模型 Base URL 改成 http://127.0.0.1:31234 或 http://127.0.0.1:31234/v1。
  3. 发起一次对话,然后去看右下角状态栏和左侧 AI Usage 历史面板。

做到这 3 步,插件基本就已经正常工作了。

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft