告别 AI 账单糊涂账:一行代码搞定 API 自动成本追踪

大家好,我是提米哥。

每次调用 AI 接口(API),你的账户余额都在悄悄减少。但除非你每次用完都去后台盯着数据面板,否则你根本不知道到底是哪个项目、哪个模型在疯狂“烧钱”。

为了解决这个痛点,我找到了一个绝佳的方案:用一行代码给你的 AI 客户端套上一个“自动记账小助手”,让每一次调用成本都清清楚楚。

手动记账为什么行不通?

市面上有一些工具允许你通过命令行手动记录,比如输入 aicost log myapp gpt-4o 1500 800 来记一笔账。

这听起来不错,但现实中根本没人能坚持下来。当你沉浸在写代码的心流中时,你肯定会想“等会儿再记”,然后……就彻底忘了。最后导致账单记录残缺不全,统计出来的数据也毫无参考价值。

一行代码实现自动记账

aicost-tracker 的 v0.1.2 版本中,作者加入了一个超级好用的 track() 函数。它可以直接“包装”你的 OpenAI 或 Anthropic 客户端,实现无感自动记账。

首先,在终端安装这个工具包:

# 安装 aicost-tracker 依赖包
npm install @ozperium/aicost-tracker

接下来,看看如何接入 OpenAI:

import OpenAI from 'openai';
// 引入自动记账函数 track
import { track } from '@ozperium/aicost-tracker';

// 用 track 函数包装原始的 OpenAI 客户端,并打上项目标签 'myapp'
const openai = track(new OpenAI(), { project: 'myapp' });

// 从这里开始,你的每一次 API 调用都会被自动记录,无需修改原有业务代码
const response = await openai.chat.completions.create({
  model: 'gpt-4o',
  messages: [{ role: 'user', content: '帮我总结一下这份文档' }]
});

就这么简单!除了给客户端套上一层 track(),你不需要改动任何现有的业务代码。

如果你使用的是 Anthropic (Claude),用法也完全一样:

import Anthropic from '@anthropic-ai/sdk';
// 引入自动记账函数 track
import { track } from '@ozperium/aicost-tracker';

// 包装 Anthropic 客户端,并标记为 'summarizer' 项目
const anthropic = track(new Anthropic(), { project: 'summarizer' });

// 正常调用 API,后台会自动记录这次消耗
const response = await anthropic.messages.create({ 
  model: 'claude-3-5-sonnet-20241022', 
  // ... 其他参数
});

记账效果展示

当你跑了几次程序后,只需在终端输入以下命令查看账单:

# 查看成本统计摘要
aicost summary

你会看到一份非常清晰的账单报告:

  AI Cost Tracker — 成本摘要
  ══════════════════════════════════════════════════
  总花费 (Total cost):       $1.2847
  输入 Token 数:             124,000
  输出 Token 数:             67,500

  按项目分类 (By Project):
  ──────────────────────────────────────────────────
  myapp (我的应用)           $    0.9102  31 次调用
  summarizer (摘要工具)      $    0.3745  12 次调用

  按模型分类 (By Model):
  ──────────────────────────────────────────────────
  gpt-4o                     $    0.9102  31 次调用
  claude-3-5-sonnet          $    0.3745  12 次调用

它是怎么做到“无感”且不影响性能的?

很多新手可能会担心:在中间加一层拦截,会不会让 API 响应变慢?

其实,track() 的原理非常巧妙。它只是在底层替换了客户端的创建请求方法(比如 OpenAI 的 client.chat.completions.create)。当 API 返回结果时,它会悄悄拦截响应,从 usage 字段中提取 Token 消耗数据,然后记录到本地,最后再把结果原封不动地还给你。

这是一个非常轻量的同步操作,完全不会增加任何网络延迟。而且,如果记账过程中出现任何小错误,它会自动忽略(吞掉错误),确保你的 API 调用永远能正常拿到结果,绝不因为记账失败而阻断主程序。

进阶玩法:按项目精准核算

如果你在一个代码库里跑了多个 AI 智能体(Agent)或小工具,可以通过 { project: 'xxx' } 参数给它们分别贴上标签:

// 为研究智能体单独记账
const researchAgent = track(new OpenAI(), { project: 'research' });

// 为摘要智能体单独记账
const summaryAgent = track(new OpenAI(), { project: 'summary' });

这样配置后,当你再次运行 aicost summary 时,系统就会自动按项目帮你把账单拆分得明明白白,哪个模块最烧钱,一眼便知。

直达网址:https://github.com/Ozperium/aicost-tracker

类似文章