Quotas and cost accountancy:先于消费落地的 hold-and-settle 引擎
Simmetric Chat 的 quota engine 如何涵盖 token、存储与真金白银 —— 以账本承接的“无第二计量器”设计、未配置即 fail-open 的语义,以及把消费限额从报表变成关卡的 hold-and-settle 两阶段预留。

限额在消费发生之前就生效
多用户 AI 安装里的用量上限通常住在一块仪表盘 —— 一份在账单已经存在之后才读到的报表。Simmetric Chat 的 quota engine 把它们放得更早:放在请求路径里、在第一次 LLM 调用之前。引擎涵盖三类上限 —— token、存储、以及成本(真钱的算术,以分计)—— 而且到处同形:一条账本作为用量的真相、衍生出的余额、turn 前的关卡、以及永远显式的失败。
本文走一遍设计:以账本承接的“无第二计量器”不变量、决定每个用户限额的解析链、滚动重置的工作方式(历史从不被删除)、以及把成本配额变成真正关卡的 hold-and-settle 两阶段预留。
它是操作者的工具(Community 一类功能)。数据:FACT-CENSUS.md F-QUOTA-1。没有第二计量器
那条不可协商的不变量:消费真相留在平台既有的 token 使用账本里。余额、hold、重置锚都是衍生状态 —— 从不是可能漂离现实的第二张计数表。推论如下:
- 重置是账本锚,不是清零。 重置会写一行锚点来限定滚动窗口;用量/成本的历史永远不删不清零。操作者随时可以回溯审计。
- 关卡在服务层级、turn 之前 —— 它们在领域数据所在的地方运行(orchestrator 的第一次 LLM 调用之前、上传路径的摄取之前)。没有可绕过的中间件:检查就在服务路径自身之内。
- 钱的算术是 Decimal→分。 每笔成本计算都经小数层并落成整数分 —— 从不是浮点,从不是舍入漂移。
解析链
一个用户的上限经三级链条按序解析:
- 每用户覆盖 —— 管理员直接为一个具名用户设定 token/存储/成本的上限。
- 安装预设 —— 系统配置中的安装级默认键(token 上限、存储 GB、以 EUR 计的成本上限)。
- 不限 ——
"0"/空哨兵 = 没有配置,引擎 fail-open:从不触碰配额的安装行为零变化。
fail-open 是有明确形状的特性:quota engine 是操作者主动接入的工具,“没配置”绝不能静默变成“被拦”。
三类
token 配额 按账本上的窗口用量和滚动,受最近一次重置锚限定。解析会返回限额和它的来源层级 —— 操作者界面能指出是哪一行做了决定,逐用户可见。超限 = 一个命名的配额错误,其载荷是前端、widget 与连接器处理器共同读取的契约。
存储配额 在上传路径里、派发给 collector 之前强制:每用户覆盖、安装默认、或不限。
成本配额 —— 真钱的那一支 —— 是 hold-and-settle 的设计,见下。
Hold-and-settle:两阶段预留
token 的消费发生在 token 发生之时;欧元的消费发生在流运行的同时。成本关卡因此在 LLM 调用之前预留、在用量的接缝处结算:
- Reserve(调用之前) —— 一个条件更新,其谓词由数据库行锁求值(已花 + 预估 ≤ 限额):N 个并发请求串行化,而不是全部抢过同一份过期的检查,加上同一事务里的 hold 行(预留与检查原子绑定)。
- Settle(在接缝处) —— hold 结算并退还“预估 − 实际”。被接受的窗口是飞行中的超额(实际 > 预估)—— 不因为成本原因中途杀流;静止时的不变量精确:已结算支出 + 打开的 hold ≤ 限额。
这对操作让成本配额拥有了报表永远无法拥有的性质:上限在花费提交给模型之前生效,以行锁预留的方式、在并发下依然诚实。
定价:按模型、快照冻结、从不静默免费
每行的定价来源:存在时用冻结的模型成本快照(事后改价永不改写历史),否则用安装的回退费率(SC-4 信条:无定价的模型绝不绕过成本配额 —— 内置的非零底线带 warn-once 日志生效,于是任何东西都不可能因被遗漏而显得免费)。货币:账本按币种记录总计(v1:USD、EUR、GBP、JPY、CNY、INR —— 无折算);成本在流的 done 事件落地。
配置住在操作者的路径里:Settings → Providers → 模型的定价动作(每 1M token 的输入/输出费率 + 币种),或自有 provider 键的每用户定价。N/A = "配置一个费率";$0.00 = 显式免费(本地模型回填为 0)。
Widget 的主体
匿名的 widget 访客不是用户:widget 的消费绑定到该 widget 的组织主体 —— widget 流量从那个组织的配额链条取用,而不是为访客发明身份。连接器流量与内部聊天共享同一个唯一的 orchestrator,于是 turn 前的关卡同等地覆盖三类聊天表面。
继续阅读
操作指南带着完整的操作者参考 —— 键、端点、重置行为、定价细节 —— 在 /zh/docs/quotas-and-costs:
- Quotas and costs —— 操作指南
- 本文数据:
FACT-CENSUS.md行 F-QUOTA-1(三类、无第二计量器的账本、hold-and-settle 引擎)
Provenance:Simmetric Chat 的 docs/QUOTAS.md(v0.28.1,Phases 207/216)+ docs/MODEL_COSTS.md(Phases 203/209/216)、quotaService.ts/costQuotaService.ts —— 处于 census 固定的文档状态(SHA aca5b8ff)。


