AI 参与说明(Agent:Codex):2026-09-17 根据 Metronome 官方文档及 Context7 检索整理产品定位、场景与接入方法。运行记录:模型
gpt-6-astra,reasoning effortmedium,执行入口 Codex Desktop。示例采用虚构业务和价格;已核对文档与示例语法,未连接真实 Metronome / Stripe 账户或执行交易。实际费率、账户可用能力及合同条件以供应商为准。
Metronome 是面向软件业务的计费平台,核心价值是把客户使用了多少资源、适用什么价格和签了什么合同,转换成可解释的费用与账单。它把 Metering 与 Rating 分开,让团队调整价格时不必总是改动用量采集代码。How Metronome works
例如,一个 AI API 同时需要按输入与输出 tokens 收费、给不同模型定价、支持充值余额,并给企业客户提供协议价。Metronome 可以承载这些计费规则;应用负责可靠记录真实用量,并连接账单与支付流程。
术语参考
| 官方名称 | 中文理解 | 在系统中的作用 |
|---|---|---|
| Metering | 用量计量 | 统计客户实际消耗 |
| Rating | 费用计算 | 将用量按适用价格换算成费用 |
| Usage Events | 用量事件 | 一次请求或一段资源消耗的原始记录 |
| Billable Metrics | 可计费指标 | 对事件进行筛选与聚合 |
| Products | 计费产品 | 定义账单上的收费项目 |
| Rate Cards | 价目表 | 管理产品价格 |
| Customers | 客户 | 承担费用的业务主体 |
| Contracts | 客户合同 | 关联客户、价格及账期等约定 |
| Credits / Commits | 额度与消费承诺 | 表达赠送额度、预付或承诺消费等条款;两者不能简单等同 |
| Invoices | 账单 | 汇总客户一个账期的应计费用 |
| Entitlement | 使用资格 | 应用判断是否允许客户使用服务的状态 |
这些对象共同构成计费链路,Products 不等同于应用内某个功能,Customers 也不一定对应一个登录用户:面向企业的软件通常需要按实际付费组织确定计费主体。How Metronome works
适合哪些场景
下面的例子说明业务模型,不代表供应商报价。
| 场景 | 业务需求示例 | 主要价值 |
|---|---|---|
| AI / LLM API | 输入、输出 tokens 分开收费,不同模型不同价 | 将用量维度与定价分离 |
| API 服务 | 按调用次数或处理数据量收费 | 根据真实使用量计费 |
| 云资源 | 计算时长、存储资源、流量收费 | 多种资源统一形成账单 |
| 混合订阅 | 固定月费加按量费用 | 同时覆盖固定与浮动收入 |
| 预付 Credits | 先充值、消费扣减、余额低时自动充值 | 支持先付后用的商业模式 |
| 企业合同 | 最低消费承诺、协议折扣、一次性费用与续约 | 减少为每份合同编写专用计费代码 |
官方入门页提供 Pay-as-you-go、Enterprise commits、Subscriptions with usage 和 Pre-paid credits 四类路径;具体用量也可以是 API 请求、tokens 或计算资源。Billing model guides、Event patterns
本文的选型判断是:当复杂度集中在用量、价格维度、客户合同和账单解释时,Metronome 值得评估。如果只有少量固定月费套餐,则应先比较既有支付 / 订阅方案能否覆盖需求,避免新增一套客户映射和对账链路。若尚不能可靠定义或记录用量,应先解决数据源问题,计费平台不会自动修复业务埋点。
与 Stripe 怎样分工
一种常见组合是:应用提供用量,Metronome 计算费用,Stripe 承接 Invoicing 和收款相关流程。Metronome 的原生 Stripe 集成还可利用 Stripe Tax、催收等能力;官方也提供 AWS、Azure、GCP Marketplace 以及 ERP 方向的账单集成。Invoicing overview
| 环节 | 典型负责方 |
|---|---|
| 判断请求是否成功、实际用了多少资源 | 应用后端 |
| 聚合用量、应用价格与合同、形成应计费用 | Metronome |
| 在 Stripe 路径中处理付款方式与收款流程 | Stripe 集成 |
| 根据支付或余额状态开放、限制服务 | 应用后端 |
| 展示客户用量、余额与账单 | 应用界面读取相应系统的数据 |
Metronome 还有 Stripe Marketplace App,可在 Stripe Dashboard 内管理关联客户和 Contracts。不过这个管理界面不代替底层集成:官方明确要求先配置 Metronome 的 Stripe invoicing integration,账单才能送到 Stripe。Manage contracts in Stripe
工程上应明确每类收费由哪个系统计算和触发,避免同一笔订阅或用量被两套流程重复收费。账单生成也不能直接当成支付成功。
接入方式与实施顺序
可以先在 Dashboard 配置模型,再通过服务端 REST API 接入业务;也可以通过 API 自动化创建相关对象。官方提供 Node.js、Python、Go、Ruby 和 Java SDK,事件还支持通过 Segment 接入。API token 决定 Sandbox 或 Production 环境,凭据应保留在服务端。Developer SDKs、API quickstart、Send usage events
建议先完成一个客户、一项用量、一张账单,再扩展商业模型。
- 定义收费口径。 例如只对成功完成的推理请求计费,分别记录输入与输出 tokens。明确失败、取消、缓存命中怎样处理;这些是产品规则,不能让计费平台替业务决定。
- 配置 Billable Metrics。 按
event_type筛选,再对用量字段聚合。需要按模型定价时,提前设计对应 group keys。 - 创建 Products 和 Rate Cards。 将指标映射到收费项目,设置计价单位与价格。原始 tokens 和“每百万 tokens”展示单位要一致换算。
- 创建 Customers 和 Contracts。 将付费主体与价目表、起始时间、账期关联,必要时加入协议价、Credits 或 Commits。
- 发送 Usage Events。 保留应用主体到 Metronome Customer 的映射,或者使用预先配置的 ingest alias。
- 验算 Invoices。 用一组人工可计算的数据检查用量、费率和金额,再连接账单交付及收款流程。
官方 API quickstart 给出了对象创建顺序;Billable Metrics 的聚合、筛选及 group keys 创建后不可随意修改,因此应在试接入时验证维度设计。API quickstart
最小事件示例
下面只演示“已有计费配置后发送一条事件”,不是完整开户或收费程序。前提:已在 Sandbox 创建 Customer,配置匹配 llm_request 的指标、Products、Rate Card 与有效 Contract;环境变量 METRONOME_API_TOKEN、METRONOME_CUSTOMER_ID 已在本地安全设置。运行环境为带有 curl 与 Python 3 的 shell。
先生成一次请求文件;网络重试必须复用此文件,不能重新生成事件 ID:
python3 - <<'PY' > metronome-event.json
import datetime
import json
import os
import uuid
print(json.dumps([{
"transaction_id": "demo-" + str(uuid.uuid4()),
"customer_id": os.environ["METRONOME_CUSTOMER_ID"],
"event_type": "llm_request",
"timestamp": datetime.datetime.now(datetime.timezone.utc).isoformat(),
"properties": {
"model": "model-standard",
"input_tokens": "1200",
"output_tokens": "300"
}
}]))
PY
curl --silent --show-error --fail-with-body \
--request POST 'https://api.metronome.com/v1/ingest' \
--header "Authorization: Bearer ${METRONOME_API_TOKEN:?Set a sandbox token}" \
--header 'Content-Type: application/json' \
--data-binary @metronome-event.json \
--write-out '\nHTTP %{http_code}\n'
预期接口返回 HTTP 200;随后应在用量与账单中确认指标命中。单独收到 200 不构成合同、价格和账单金额均正确的验收结论。正式接入时,事件 ID 应来自已持久化的业务记录,不能因投递重试变化。
接口为 POST /v1/ingest,请求体为事件数组,当前文档规定每批 1–100 条。transaction_id 的去重窗口与历史事件回填窗口均为 34 天;不要把它理解成无限期去重。Context7 本次返回的某段摘要写成 /v1/events,本文已对照原始 API Reference 更正。Ingest events
properties 中数值按指南推荐用字符串表示,避免不必要的浮点精度损失。时间使用真实发生时间;当前 Quickstart 与事件指南对未来时间容忍范围的表述不一致,示例不依赖未来时间容忍行为。Send usage events
用一个 AI 业务例子验算
假设自定义价格为输入每百万 tokens 2 美元、输出每百万 tokens 8 美元。一次请求输入 1,200、输出 300,那么税前、折扣与额度抵扣前费用为:
输入:1,200 ÷ 1,000,000 × 2 = 0.0024 美元
输出: 300 ÷ 1,000,000 × 8 = 0.0024 美元
合计: 0.0048 美元
可在本地用 Python 标准库独立验算:
from decimal import Decimal
amount = (
Decimal(1200) / Decimal(1000000) * Decimal(2)
+ Decimal(300) / Decimal(1000000) * Decimal(8)
)
assert amount == Decimal("0.0048")
print(amount)
这是教学价格,不是 Metronome 的收费,也不是任何模型供应商的报价。实际账单还受计价单位、舍入、账期、合同条款、折扣与税费影响。应用上报原始用量后,由已配置的指标和价格完成换算,不应把客户端计算出的费用直接当成可信依据。
预付 Credits:余额与服务权限怎样衔接
官方预付流程可以通过 Metronome 发起支付,支付成功后增加客户余额,再通过 Webhook 通知应用;余额耗尽时通知应用关闭使用资格。自动充值也需要配置阈值与支付流程。Prepaid credits
官方建议应用在自己的数据库中维护 Entitlement,并在操作前检查,这能满足应用自身的延迟与可用性需求。本文进一步建议:对于高成本、并发请求多的业务,额外设计请求前预算预留与请求后结算。异步余额通知存在传递过程,不能推导出绝对零超额保证;是否需要预留、允许多大超额,应由业务风险预算决定。
接入验收与常见问题
可靠投递是必需环节。官方建议使用持久队列;网络错误、5xx 可复用原事件重试,429 退避重试,其他 4xx 应隔离并排查,不能无条件循环重发。Send usage events
下面是本文建议的最小验收矩阵,执行结果应独立记录:
| 测试 | 通过标准 |
|---|---|
| 发送已知用量 | 指标、产品、费用与人工计算一致 |
| 重发相同事件 | 在去重窗口内用量不增加 |
| 网络失败后恢复 | 已持久化事件能够补发且不重复计费 |
| 改变模型维度 | 命中预期价格,不落入错误产品或漏计 |
| 改价或跨合同边界 | 边界前后事件分别采用预期生效规则 |
| 支付失败 | 不因前端成功跳转而发放付费权限 |
| Credits 耗尽与并发调用 | 应用按设计限制服务,超额处于定义范围 |
| 账期结束 | Metronome、账单交付系统与应用记录可核对 |
若事件已接收但没有金额,依次检查 Customer 映射、Contract 生效时间、指标筛选条件、Products 关联及 Rate Card。对于迟到事件,接收窗口与已定稿账单的修正流程是两个问题,不能认为允许回填就会自动重开历史账单。
Metronome 自己怎么收费
官方当前说明是年度平台费加消费型收费,后者在 Production 上线后开始累计;合同可能涉及 Billings、Events、Data Export 等计量项目。公开说明不能代替具体订单报价。Metronome pricing model
评估时应提供预估事件量、账单金额、客户数、合同复杂度与数据导出需求,要求报价明确适用计量项。还要把原有支付服务费用和内部事件管道、对账维护成本纳入比较。它更适合用复杂计费需求证明价值,而不是只因为产品使用 AI 就必须引入。