per-key-per-app-usage-attribution · ZH · 2026-10-16

一个聚合站余额、五个副业项目:不分成多个账号怎么把用量归到项目

面向个人开发者的轻量用量归因方案:用请求元数据、按项目分 key、日志前缀三种手段,把同一个聚合站余额下的多项目消耗拆开,配合 USDC 扣费账单实现一眼可查。

同时跑三五个周末实验的人,最容易遇到的不是钱不够,而是钱花得不明不白。聚合站一个余额、一个 API key 就能调 Claude、GPT、DeepSeek、Qwen、GLM、Kimi,省事是省事,可到了月底看账单,只知道「这个月烧了多少 USDC」,不知道是哪个项目烧的。下面是一套不用开多账号、不用改业务逻辑就能落地的打标规范。

先想清楚:归因三个层次

用量归因本质是把「一次 API 调用」映射到一个项目标签。可以分三层来做,从粗到细,成本递增:

  • 账户层:按项目拆多个 API key。粒度最粗,但零改造。
  • 请求层:在请求元数据里带项目标识。粒度最细,能区分子任务。
  • 日志层:本地日志文件名/字段加前缀。补足前两层的盲区。

实际操作中三层通常叠加使用,而不是三选一。

方案一:按项目分 key,最省事

如果聚合站允许一个账号下创建多个 API key,这是性价比最高的一步。

  • 给每个活跃项目建一个独立 key,key 名字直接写成项目代号,例如 proj-notesum、proj-crawler。
  • 每个 key 配置到对应项目的环境变量,别共用 .env。
  • 如果一个 key 只服务于一个项目,那么聚合站后台的按 key 用量报表就是现成的项目账单。
  • 归档项目时禁用对应 key,能立刻止血——忘记关掉的实验项目是隐性消耗的主要来源。

局限:一个 key 只能对应一个标签。如果同一个项目里想再区分「抓取」和「总结」两个阶段,就需要下面的请求层方案。

方案二:请求元数据打标

大多数兼容 OpenAI 风格接口的聚合站会透传 user 字段或允许自定义 header。用它来携带项目标识是最轻的做法。

  • user 字段:不少服务端会把该字段写进调用日志或用量明细。约定格式如 proj=notesum;env=dev,不要塞敏感信息。
  • 自定义 Header:例如 X-Project-Id、X-Run-Id。前提是聚合站不会因为未知 header 拒绝请求,通常不会。
  • 封装一层薄客户端:在项目里写一个 callLLM() 包装函数,统一注入 project、run 两个字段,业务代码只调这个包装函数。这是把规范变成习惯的关键——靠人肉记得加字段,迟早会漏。

推荐的命名约定(纯文本、可 grep 即可):

  • 项目:小写短横线,proj-notesum
  • 环境:dev / prod
  • 运行批次:日期或短哈希,run-20240612-a1

不在标签里写用户 ID、邮箱等个人信息。

方案三:本地日志前缀,兜底用

请求元数据只有在服务端记录并可查询时才有用。如果聚合站后台不提供按字段筛选,退回本地日志是最可靠的兜底。

  • 每个项目一个日志文件,命名如 logs/notesum-2024-06.log。
  • 每行结构化记录:时间、模型名、输入输出 token 数(如果响应里返回)、项目标签、批次号。
  • 定期用一个几十行的小脚本按项目聚合 token 数,再乘以对应模型的单价,就能估算出各项目消耗。
  • 日志文件本身就是成本审计的原始数据,不依赖任何平台后台。

三种方案怎么配合

一个实用的组合是:

  1. 每个项目一个 API key —— 拿到账户层账单。
  2. 请求里带 proj / run 字段 —— 拿到子任务粒度。
  3. 本地日志按项目分文件 —— 作为独立于平台的交叉验证。

三者对齐同一个命名约定,后期查「某个周末的实验到底花了多少」时,三步都能指回同一个标签。

用 USDC 账单做月度对账

聚合站按官方价 ×1.3 从余额里扣 USDC,充值本身无 KYC,这意味着你的成本数据天然就是链上可查的。

  • 记下每次给余额充值的日期和金额。
  • 月底用后台的用量明细(或本地日志估算)摊到各项目。
  • 余额差额与各项目消耗之和应当大致吻合;差得多的往往是忘记关掉的 key、或是没带标签的调用。

如果同时向聚合站贡献 key 换取返利(按官方价 ×1.1,优质 ×1.2 返 USDC),把返利也记成一条独立的收入项,别和项目消耗混在一起。这样每个项目的真实净支出才看得清。

容易踩的坑

  • 标签不一致:这周写 notesum、下周写 note_sum,聚合时就是对不上的两笔。约定一次,写进项目的 .env.example。
  • 只打 key 不打请求:一个项目两个阶段共用 key 时,账户层报表就不再够用。
  • 信号量放错位置:把项目标签塞进 prompt 正文,既污染输入又浪费 token,应放在元数据/日志侧。
  • 忘了清理:实验结束只删代码不删 key 和定时任务,用量会以极慢的速度持续漏。

先做方案一和方案三,通常半天内就能落地;方案二等你确实需要区分项目内阶段时再补,收益更高但需要改一点代码。