先确定限制来自哪里
限制可能来自反向代理、网关用户或模型限制、渠道容量以及上游供应商。具体数值和窗口由部署配置决定;不要把 OpenRouter 的套餐限额套用到自己的实例。增加 API Key 不保证增加用户级总额度。
当前
middleware/model-rate-limit.go 的 Redis 拒绝路径会设置秒数形式的 Retry-After,内存实现的拒绝可能没有该头且响应体为空。其他限制路径和上游行为不同,因此不能强制要求每个 429 都有 JSON 错误体或统一的限流响应头。
Retry-After 可以表示秒数,也可以表示 HTTP 日期。它只建议最早再试时间,不保证下一次成功。缺失或无效时使用带随机抖动的退避;等待超过总截止时间时应停止,不要把服务端要求的等待截短后提前请求。
可运行:读取模型列表并记录诊断元数据
保存examples/diagnostics.mjs 及同目录的 http-client.mjs。在文档目录运行:
API_ROOT_URL 保留部署路径前缀,不包含 /v1。脚本只请求 GET /v1/models;最多 3 次尝试,总截止时间 10 秒,只对 429 / 502 / 503 / 504 重试。网络错误、重定向、其他 HTTP 错误和无效成功响应立即结束。错误体不打印;成功响应最多读取 1 MiB,只输出模型数量。日志写到 stderr,每次收到响应头时记录状态、尝试次数、累计时间和经过格式检查的请求 ID。
maxRetries: 0。即使只读模型查询成功,也没有验证实际推理能力;完整验收见生产接入。