一个fencing token不是一段话。它是一个计数器:必须按时钟递增,必须在截止时间前失效,而且永远不能去问模型"持有者还配不配拿着这把锁"。免费推理在这个循环里没有位置。

可团队还是把聊天补全塞进选主逻辑。某个节点没声了,日志一团乱,于是有人接上一个便宜模型去读噪声,投票决定谁该继续持有租约。这个类比像一座灯塔,每次闪光前先打电话问一位评论家。评论家很风趣。礁石不在乎。

打开网易新闻 查看精彩图片

第一道裂缝:延迟

租约续期是一笔以毫秒计的预算,不是一串token流。免费通道会卡住、会排队,供应商繁忙时还会返回一个被截断的对象。锁在文字还在路上时就过期了。脑裂不是文学修辞,它是两个写者共用一个偏移量。

第二道裂缝:不确定性

同一份健康快照,可能得出保留、丢弃,或者一句连JSON都解析不了的句子。控制平面需要同样的输入产生同样的栅栏。一个含糊其辞的模型不是法定人数,它是一枚多出好几面的硬币。

第三道裂缝:权限

一次补全可能被过滤、被限流,或者被调用方并不拥有的安全层改写。选主逻辑一旦依赖某家供应商的拒绝类别,就等于把写路径的否决权交给了这家供应商。而这个否决权,在只画HTTP 200的仪表盘上始终隐形。

这个循环到底是什么

租约是一种定时独占。持有者在过期前通过抬高epoch来证明自己活着。下游存储必须拒绝任何epoch已过期的写入。这个世界模型很小:持有者id、epoch、过期时间。这个元组里没有任何一项能靠温度参数变得更好。

PostgreSQL可以不加仪式地承载fencing token。下面这套表结构和续期逻辑是一个可运行的示例,不是多区域共识协议。把它们当作标注清楚的样例代码。

  • worker_leases表:name为主键,字段包括holder、epoch、expires_at
  • 在expires_at上建索引
  • lease_loop.py:这个模块里不出现HTTP客户端和模型SDK

获取或续期返回一个整数栅栏,或者什么都不返回。没有任何一个分支会去请模型解读这一行。使用租约的写者,必须在每次变更调用里带上那个epoch。看不到栅栏的存储层,并不受这个循环保护。

一次免费的补全,事后解释插入为什么失败,是可选的表演。它不能重试插入、不能抬高epoch、不能另选持有者。评论可以等。成员资格不能等。

一个可复现的红旗检查

观点很廉价,导入图不是。下面这个产物会在租约包长出推理客户端时让CI失败。它是一个提议中的门禁,不是"生产集群已经在跑它"的声明。

测试脚本会遍历lease目录下的Python文件,解析AST,检查是否导入了openai、anthropic、httpx、aiohttp、requests、google这些根模块,同时扫描chat.completions、messages.create、generate_content这些调用片段。命中任何一项,断言失败。

运行方式很无聊:建目录、拷贝两个文件、跑pytest。这个测试是启发式的。一个铁了心的工程师可以把补全藏进一个叫health.py的本地包装里。所以这道门禁是退出标准,不是人格测试。