2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
周二下午,我启动了一项重新评分任务。大约 18,000 个提示词针对 claude-opus-4-7 模型进行处理,使用了八个 worker(工作进程),每个进程都尽可能快地循环调用 messages.create。
四十分钟后,每个请求开始返回 429 状态码,并附带一个显示 anthropic-ratelimit-tokens-remaining: 0 的响应头。我想,好吧,那就退避一下。我将 worker 数量减少到四个并等待。仍然是 429。再减到两个。还是 429。
随后我注意到,配额清除的时间戳并不是以分钟计的固定值,而是动态滚动的。我已经用完了整个组织的每日令牌预算,而每日时间窗口不会在五分钟内重置。
我给支持团队发了邮件。他们在周三早上确认了收到请求。直到周五下午才清除了配额限制。整整 72 小时。
在那之后,我不敢声称我的工程方案有多优雅。我坐在那里,刷新仪表盘等了三天。当配额限制最终解除后,我构建了 llmfleet,这样我就再也不用干坐着等待了。
功能介绍
llmfleet 是一个用于 messages.create 的池化调度器。你只需提供一组消息负载和一个并发上限,它便会以背压机制运行这些请求,该机制同时兼顾两个因素:正在进行的请求数量,以及最新的 anthropic-ratelimit-tokens-remaining 响应头。
受桑德勒销售法启发的部分是“协商”机制。池化调度器不再依赖硬性的信号量,而是监控 API 返回的信息。如果剩余令牌数低于某个阈值,正在进行的槽位会被保留,直到时间窗口跳动更新。无需疯狂地重试 429 错误。
import asyncio
from llmfleet import Fleet
fleet = Fleet(
api_key=os.environ["ANTHROPIC_API_KEY"],
max_in_flight=8,
soft_token_floor=20_000, # 低于此值时暂停新调度
hard_token_floor=2_000, # 完全停止,直到下一个时间窗口
)
payloads = [
{"model": "claude-opus-4-7", "max_tokens": 256,
"messages": [{"role": "user", "content": prompt}]}
for prompt in prompts
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。