把高优先级任务先放进队列,并不会让它凭空拥有 Token 配额。调度器需要先承认一个朴素事实:已承诺给在途请求的预算,也属于暂时不可用的资源。
LangChain 10 月 1 日关于模型路由的文章把任务理解、评估与成本记录放在 harness 里讨论。本文只借鉴“调度决策要有任务与结果账本”的做法,不复用其成本降幅,也不实施模型切换。文章
预留、结算、取消是三种事件
请求开始前按上界预留;完成后按可信 usage 结算;取消时需要知道远端是否已经执行。若网络断了而结果未知,不能立刻假定零消耗并把全部配额发给下一批请求。供应商的 RPM、TPM、并发和缓存计费也不是同一个桶。
幂等键同样重要。一个超时回调和一个正常完成回调先后到达,若都归还同一笔预留,账本就会创造出不存在的预算。先把状态机写对,再讨论竞价公式会更稳。
一个不会双重退款的小账本
例子只管理一个固定容量桶,没有模拟供应商的滚动时间窗口。它能验证预算守恒与重复结算,不声称可以根治所有 429。
图中的容量 10、预留 6、实际 4 都是教学单位。图里的取消归还只能对应确认没有消耗的预留;未知远端结果必须进入单独的待核状态,不能沿用这个简化退款分支。
class Budget: def __init__(self, capacity): self.capacity = capacity self.available = capacity self.jobs = {} def reserve(self, request_id, amount): if request_id in self.jobs or amount <= 0 or amount > self.available: raise ValueError("duplicate or insufficient reservation") self.available -= amount self.jobs[request_id] = {"reserved": amount, "settled": None} def settle(self, request_id, actual): job = self.jobs[request_id] if job["settled"] is not None: if job["settled"] != actual: raise ValueError("conflicting settlement") return if not 0 <= actual <= job["reserved"]: raise ValueError("usage exceeds reserved upper bound") self.available += job["reserved"] - actual job["settled"] = actual budget = Budget(10) budget.reserve("r1", 6) assert budget.available == 4 budget.settle("r1", 4) assert budget.available == 6 budget.settle("r1", 4) assert budget.available == 6 try: budget.settle("r1", 0) except ValueError: pass else: raise AssertionError("second callback refunded twice") print("reserve 6, charge 4, balance 6; duplicate settlement changed nothing")例子跑通以后,还要验证什么
这段代码已在本地 macOS、CPython 3.9.6 下运行,实际输出为reserve 6, charge 4, balance 6; duplicate settlement changed nothing。它验证的是例子中的数据约束与分支,不包含线上服务的吞吐或延迟测量。
未调用模型 API,也未测试供应商配额、429、流式 usage 或计费。本地只验证有限状态账本;真实实现要持久化、处理并发原子性、过期预算、usage 不完整和估计超上界,并把优先级公平性与预算正确性分别评估。
延伸阅读
- How to Build a Model Router in the Harness:2026 年 10 月 1 日的一手工程案例;其试验数据不移植为本文成绩。