← 返回实操教程

璇垣 · 实操教程

OpenRouter 429 怎么解决?免费模型限额、请求过快和模型不可用一次讲清

OpenRouter 报 429 不一定是免费额度用完:免费日限额、请求过快、provider 容量、模型下架、余额为负都可能。本文给诊断表、5 分钟排查顺序和可抄走的 Python/Node 重试代码。

2 次浏览更新于 2026-09-08OpenRouter 429

你正在用 OpenRouter,突然收到 429 Too Many Requests,第一反应通常是「我的免费额度用完了」。但 429 的原因不止一种:免费日额度、请求过快、某个免费 provider 暂时没容量、模型下架、甚至账户余额为负都会以不同形式体现。本文先帮你判断「你的 429 属于哪一种」,再给一套 5 分钟内能跑完的排查顺序,以及可直接抄走的 Python / Node 重试代码。

核实日期:2026-09-08。OpenRouter 的额度、速率与免费政策可能调整,以 OpenRouter 当前官方说明为准:官方速率限制文档 与 FAQ。

01 先判断:你的 429 属于哪一种

不同原因的 429,处理方式完全不同。先用下面这张表定位。

现象可能原因怎么确认怎么处理
全天前几次还正常,某个时间点开始连续 429免费日额度(50/天或 1000/天)耗尽用的是 :free 模型;当天请求数很多等次日重置;或充值 ≥10 额度提升上限;或改用付费变体
瞬间并发很多请求,立刻 429每分钟请求数超限(免费档 20 RPM)短时间发送大量请求降低并发;加指数退避;用队列削峰
隔一段时间就 429,但日请求不多某个免费 provider 暂时没容量错误带 provider_code;换时段变好加重试/退避;配置 fallback 模型;用 openrouter/free
请求某个具体免费模型一直 429,别人能用的模型正常该免费模型已下架/暂时不可用模型从列表消失或返回不可用去 当前免费模型清单 重新挑在架模型
同时出现 402账户余额为负 / 单 Key 额度上限耗尽错误码是 402 而非 429充值使余额为正;或调高该 Key 的额度上限

关键区分:402 = 要钱(余额/额度),429 = 太快/太多(限速)。退避对 402 没用,先查余额。

02 最常见:免费请求额度到了

官方当前规则(核实于 2026-09-08):以 :free 结尾的免费模型变体,平台限额如下:

累计购买 credits(终生)每分钟请求数 (RPM)每日请求数 (RPD)
不足 10(含从未购买)2050
至少 10201000
  • 这是平台层对免费变体的限制,和具体模型无关。
  • 购买「至少 10 credits」后,即使余额后来低于 10,更高的日限额仍然保留。
  • 失败的请求也计入当日配额——疯狂重试会更快把额度打满,所以一定要退避、不要高频重发。
  • Cloudflare 的 DDoS 防护会在请求量「明显超出合理使用」时直接拦,表现为 429。
OpenRouter 定价页:免费档 50 请求/天

规则可能变化,以 OpenRouter 当前官方说明为准。

03 请求太快导致 429

即使日额度还很多,每分钟 20 次(免费档)的上限也可能被瞬间并发打爆。注意:

  • 不同模型 / provider 的限速不同,不要凭空假设一个固定 RPM/TPM;以官方速率限制文档为准。
  • 真正危险的是「并发」而不是「平均速率」:100 个 worker 同时发请求,可能在任何单个请求收到 429 之前就越限。
  • 解法不是「排更长的队」,而是降低并发、用退避和共享限流队列,让重试错开。

04 免费模型自身拥堵

这是最容易误判的一种:你的账户还有额度,但某个免费 provider 暂时没有容量。

  • 免费模型由上游 provider 提供,高峰期(尤其热门模型)provider 可能暂时满负荷。
  • 此时 OpenRouter 会先自动 fallback 到其他 provider;若所有 provider 都满,错误里的 error.metadata.provider_code 会带上 provider 原始错误码。
  • 表现就是间歇性 429,过一会儿(或换时段)又好了。
OpenRouter 速率限制文档

05 模型已经下架 / 不可用了怎么办

如果你一直调用的某个免费模型突然 429 且稳定不复活,很可能它已经下架或暂时不可用。处理:

  1. 打开 OpenRouter 免费模型怎么找(当前可用清单),确认它是否还在架。
  2. 优先改用在架的 :free 模型;不要把全部流量压在单一免费模型上。
  3. 在代码里配置 fallback 模型,模型 A 不可用时自动切到 B。
免费模型详情页(带 :free 标识)

06 最简单的解决顺序(5 分钟定位)

  1. 看错误码:是 429 还是 402?402 先去查余额/充值,不要退避。
  2. 看错误体:有没有 error.metadata.provider_code?有 → 是 provider 侧容量;没有且带 X-RateLimit-* → 是平台免费限额。
  3. 数请求:当天免费请求是不是接近 50 / 1000?并发是不是瞬间很高?
  4. 退避重试:尊重 Retry-After,否则指数退避,不要立即高频重发。
  5. 换模型 / 充值:仍不行就换在架免费模型、配置 fallback,或充值提升日限额。

07 推荐的代码处理方式

核心原则:捕获 429 → 指数退避(带抖动)→ 设最大重试次数 → 绝不无限重试 → 最终失败给出明确提示。下面是可直接改用的模板,Key 用占位符 YOUR_OPENROUTER_API_KEY。

Python

import time, random, requests

API_URL = "https://openrouter.ai/api/v1/chat/completions"
API_KEY = "YOUR_OPENROUTER_API_KEY"  # 替换为你自己的 OpenRouter API Key

def call_openrouter(messages, model="openrouter/auto", max_retries=5):
    headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
    payload = {"model": model, "messages": messages}
    backoff = 1.0
    for attempt in range(1, max_retries + 1):
        resp = requests.post(API_URL, headers=headers, json=payload, timeout=30)
        if resp.status_code != 429:
            resp.raise_for_status()
            return resp.json()
        # 429:尊重 Retry-After,否则指数退避(带抖动),上限 30s
        ra = resp.headers.get("Retry-After")
        wait = int(ra) if (ra and ra.isdigit()) else backoff
        wait += random.uniform(0, 0.5)
        print(f"[429] 第 {attempt}/{max_retries} 次,{wait:.1f}s 后重试")
        time.sleep(wait)
        backoff = min(backoff * 2, 30)
    raise RuntimeError("已重试 max_retries 次仍收到 429,请稍后或换模型/充值")

JavaScript / Node.js

const API_URL = "https://openrouter.ai/api/v1/chat/completions";
const API_KEY = "YOUR_OPENROUTER_API_KEY"; // 替换为你自己的 OpenRouter API Key

async function callOpenRouter(messages, model = "openrouter/auto", maxRetries = 5) {
  const payload = { model, messages };
  let backoff = 1000;
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    const resp = await fetch(API_URL, {
      method: "POST",
      headers: { "Authorization": `Bearer ${API_KEY}`, "Content-Type": "application/json" },
      body: JSON.stringify(payload),
    });
    if (resp.status !== 429) {
      if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
      return resp.json();
    }
    const ra = resp.headers.get("Retry-After");
    let wait = ra && /^\d+$/.test(ra) ? parseInt(ra, 10) * 1000 : backoff;
    wait += Math.random() * 500;
    console.log(`[429] 第 ${attempt}/${maxRetries} 次,${(wait / 1000).toFixed(1)}s 后重试`);
    await new Promise((r) => setTimeout(r, wait));
    backoff = Math.min(backoff * 2, 30000);
  }
  throw new Error("已重试 maxRetries 次仍收到 429,请稍后或换模型/充值");
}

流式(streaming)场景下,限流可能在 200 已经发出后才到达,表现为 SSE 的 finish_reason: "error" 事件,客户端要单独处理,不能只看 HTTP 状态码。

08 openrouter/free 能不能减少 429

openrouter/free 是「免费模型路由器」,会自动帮你挑一个在架的免费模型。它能解决什么:把请求分散到多个免费模型,降低单个模型被你打满的概率。不解决什么:

  • 不绕过平台的 50 / 1000 每日总限额——所有免费模型共享这条日上限。
  • 不解决某个 provider 暂时没容量的问题。
  • 不解决 402(余额不足)。

所以 openrouter/free 值得用,但别指望它「永远不会 429」。

OpenRouter Models 页

09 免费用户最稳的使用方法

  • 不要把所有请求压在同一个免费模型:准备 2–3 个在架 :free 模型做轮换/ fallback。
  • 先查询当前在架免费模型:定期看 免费模型清单,下架的及时换掉。
  • 合理退避:拿到 429 就退避,不要立刻高频重发(失败也计费/计额度)。
  • 请求失败不要立即重发:加指数退避 + 抖动 + 最大重试上限。
  • 保留备用模型:在代码里配置 fallback,单模型不可用时无缝切换。
  • 真要做生产流量:考虑充值提升日限额,或对关键路径用付费变体(无平台级请求上限)。

10 FAQ

429 是不是封号?

不是。429 是限速(Too Many Requests),是临时信号,退避后通常能恢复;它不是封禁。

要不要充值?

如果你频繁撞到每日 50 次上限,充值至少 10 credits 可把日限额提到 1000;若是 provider 容量问题,充值也不能凭空增加该 provider 的容量。

换 API Key 有用吗?

基本没用。限速是账户 / 平台级别的,新建 Key 不会重置容量或日限额。只有「单 Key 的额度上限」耗尽时,换/调高该 Key 的上限才有帮助。

换免费模型有用吗?

有用——前提是新模型在架且没被你打满。换到另一个在架 :free 模型或配置 fallback,能绕开单模型限额与 provider 容量问题。

第二天会恢复吗?

日限额按天重置,所以「当日额度用尽」型 429 第二天会恢复;provider 容量型 429 可能更早随时段恢复;若模型下架则不会自己恢复,需要换模型。

openrouter/free 是什么?

免费模型路由器,自动选一个在架免费模型。能分散单模型压力,但不绕过每日总限额与 provider 容量。

429 和 402 有什么区别?

429 = 太快/太多(限速);402 = 要钱(账户余额为负或单 Key 额度上限耗尽)。退避对 402 无效,先查余额。

为什么昨天能用今天不能用?

常见原因:当天免费额度已累计用尽;或你调用的免费模型今已被下架/限流;或该 provider 今天高峰容量紧张。先按第 06 节顺序定位。

免费资源

拿走即可用的排查与重试模板:

OpenRouter FAQ 速率限制说明 OpenRouter Request Builder / API 文档

文中速率与额度数据核实于 2026-09-08,可能随 OpenRouter 政策调整,以 官方速率限制文档 为准。

继续阅读

OpenRouter 免费模型怎么找?2026 可用入口和筛选方法

2026 年 OpenRouter 免费模型入口:打开 Models 页,左侧勾选 Free,列表中带 :free 后缀的模型即为当前免费档。默认每日限 50 次,购买 ≥10 信用额度后可提到 1000 次/天。

电脑开机慢怎么优化?8个方法解决卡顿问题

电脑运行卡顿?微软官方推荐8个优化方案,包含系统更新/磁盘清理/启动项管理等实用技巧,附风险提示与操作步骤。

svchost.exe 占用过高怎么排查

遇到 svchost.exe 占用 CPU 或内存过高怎么办?本文教你通过任务管理器、命令行和 Process Explorer 快速定位异常服务,并提供修复系统文件和禁用后台服务的步骤,彻底解决电脑卡顿问题。

Windows 11 搜索总跳网页怎么办?关闭 Web 和 Microsoft Store 建议的方法

Windows 11 搜索混入网页结果和 Microsoft Store 建议?本文说明新版搜索开关的位置、适用版本、关闭步骤,以及暂时看不到开关时该怎么办。

Google AI Studio API Key 突然不能用了?9月这项规则变了

Gemini API 正从 Standard keys 迁移到 Auth keys。本文解释哪些旧 Key 当前可能被拒绝、哪些仍可使用,以及如何安全迁移。

ChatGPT 上传文件失败怎么办?文件大小、额度、格式和服务状态排查

ChatGPT 文件上传失败时,先检查单文件大小、文档 token 上限、表格和图片限制、账号上传额度、文件格式与 OpenAI 服务状态,避免无效重复上传。

顺手试试免费工具

想要现成的完整工作流?

想要现成的完整工作流?

方法看完就要动手,工作流已经帮你搭好了。

查看数字产品 →