请求前检查
<10msGET /budget/{id}/check — 在 Token 消耗前拦截
开源 · v2.5.0
在每次 LLM 请求前调用 GET /budget/{id}/check — 亚秒级拦截、可自托管、100 万+ 事件/秒。
git clone https://github.com/10kshuaizhang/fluxmeter.git
cd fluxmeter
make demoToken 消耗速度远超传统计量系统的反应能力。
痛点
一个 Agent 循环在不到一分钟内烧掉了约 200 美元的 Token,因为用量只是周期性检查。等系统发现时,预算早已耗尽。
如果你的客户预付费购买 Token,需要在额度耗尽的瞬间立即切断——而不是 30 秒之后——你需要请求前拦截,而不是批量分析。
FluxMeter 的方案
在每次 LLM 调用前检查预算,调用后再上报用量。流式场景下先预留估算额度,流结束后对账。
available = balance − held
有效余额会扣除进行中的流式预留——客户在下次调用前就会被拦截,而不是等延迟的批量查询才发现。
请求前检查在 Token 消耗前阻止支出,窗口后扣减保持余额准确。
GET /budget/{id}/check — 在 Token 消耗前拦截
Flink 聚合 → 原子 Lua 扣减 → 终止信号
| 层级 | 延迟 | 作用 |
|---|---|---|
| 请求前检查 | <10ms | GET /budget/{id}/check — 在 Token 消耗前拦截 |
| 窗口后扣减 | 10–15s | Flink 聚合 → 原子 Lua 扣减 → 终止信号 |
# Set $50 budget, alert at $5 remaining
curl -X POST localhost:8000/budget/cust_123 \
-H 'Content-Type: application/json' \
-d '{"balance_usd": 50.0, "alert_threshold_usd": 5.0, "max_rpm": 100}'
# Pre-request check — call BEFORE every LLM request
curl "localhost:8000/budget/cust_123/check?estimated_cost_usd=0.05"
# → {"allowed": true, "balance_usd": 47.23, ...}
# → {"allowed": false, "reason": "budget_exhausted"}Lite 模式一分钟上手,流量增长后再扩展到 Flink。
make demo API → Redis Lua,无需 Flink。适合 side project 和 <10 万 eps。
make demo-full Kafka → Flink → Redis,10 万–100 万 eps,支持 Span 归因。
make start-saas 控制面 :8001,租户 CRUD + 套餐限制脚手架。
Python SDK、HTTP API 或直接 Kafka — 选择适合你的技术栈。
from fluxmeter import FluxMeter
meter = FluxMeter(kafka_brokers="localhost:9094")
meter.track_openai("cust_123", openai_response, latency_ms=1200)完整 API 参考见 GitHub docs OpenAPI 规范见 spec/openapi/openapi.yaml
增量聚合、原子 Lua 扣减、Exactly-once Sink。
[你的应用] → [Kafka] → [Flink: 聚合] → [Redis] → [API]
│ │ │ │
SDK/HTTP 预算告警 按 (客户,模型) 预算检查
事件上报 ← 终止信号 键聚合 (三层缓存)
10 秒窗口 O(keys) 内存,而非 O(events)
微美元精度 — 无浮点累积误差
SHA-256 + SET NX — 重放不会重复计费
缓存 → Redis → 失败策略 — 不阻塞热路径
设计 rationale 见 docs/DESIGN.md
make load-test 从 1 万到 100 万事件/秒的分级基准测试。
| 环境 | 1 万 eps | 5 万 eps | 50 万+ 目标 |
|---|---|---|---|
| 本地 docker-compose | 均值 ~9K / 峰值 ~18K | 均值 ~49K / 峰值 ~92K | 均值 ~40–45K |
| 参考集群 (2 TM) | 稳定 | 稳定 | 50 万持续;100 万突发 |
方法论与配置见 docs/load-testing.md
Spec 和 SDK 是产品界面,Engine 是参考实现。
spec/ 事件 Schema、OpenAPI、语义约定
sdk/ Python (PyPI) + JS 客户端
contrib/ Provider 映射、定价、连接器
src/ Flink 参考实现
| 层级 | 路径 | 用途 |
|---|---|---|
| Spec | spec/ | 事件 Schema、OpenAPI、语义约定 |
| SDKs | sdk/ | Python (PyPI) + JS 客户端 |
| Community | contrib/ | Provider 映射、定价、连接器 |
| Engine | src/ | Flink 参考实现 |