[控场AI]
· 8 分钟阅读· 4,335 字

20个免费LLM API整合为一个:开发者实战经验

20个免费LLM API整合为一个:开发者实战经验

开源工具 llm-free-cascade 将 20 个免费 LLM API 级联为统一接口,并总结 9 条实战经验。

本文介绍开源 Node 工具 `llm-free-cascade`,它把 Groq、Gemini、Cerebras 等 20 个免费 LLM API 级联成一个统一服务:先试 Groq,被拒则切 Gemini,依次类推。作者分享了 9 条实战经验,包括密钥轮换而非反复重试、区分单模型限流与密钥限流、依据 Retry-After 和错误消息动态冷却、按错误类型分类处理、集中管理易变的免费层信息、支持 OpenAI 兼容的本地服务器模式,以及用 Ollama 作为本地后备。项目零依赖、MIT 许可、运行于 Node 18+,并提供 keys、status、probe 等命令行工具和 `cascade.stats()` 可视化运行状态。

20个免费LLM API整合为一个:开发者实战经验

在构建教育科技平台的过程中,我开源了几个小型Node工具,其中llm-free-cascade解决了一个看似简单却颇为棘手的问题:如何让多个免费LLM API像同一个服务一样工作。

免费LLM API整合

核心目标与挑战

这个工具的设计初衷非常直观:向Groq发送聊天请求,如果Groq拒绝,就尝试Gemini,然后是Cerebras,依次类推,遍历所有拥有密钥的免费层。但实现过程中暴露出的复杂性远超预期。从密钥管理到错误处理,从限流策略到提供商稳定性,每个环节都需要精心设计。

什么是 LLM API 的免费层(Free Tier)?

主流大模型服务商(OpenAI、Google、Groq、Cerebras、SambaNova 等)通常会为开发者提供一定额度的免费调用配额,即“免费层”。这些配额一般按每分钟请求数(RPM)、**每分钟 Token 数(TPM)或每日请求数(RPD)**来限制,超出后接口会返回 429 状态码。免费层的特点是不需要付费即可获得一定的推理能力,但代价是:额度较小、速率限制严格、可用模型受限、政策随时可能调整(例如转为限时试用、要求绑定信用卡或直接下线)。正因如此,把多个提供商的免费层组合成一个“虚拟大池子”,就成了控制成本、提升可用性的常见开发者策略——而这也正是 llm-free-cascade 试图解决的问题:用级联(cascade)的方式在多个免费层之间自动切换,让上层调用者感知不到底层配额的碎片化。

9个关键经验教训

1. 不要反复重试同一个密钥

初版实现总是从第一个密钥开始。当它达到每日限额后,每个请求仍会先尝试它、失败,然后才切换。密钥越多,响应反而越慢。

解决方案: 在密钥间轮换。当一个密钥被限流时,让它休息并跳过,直到恢复可用。

2. 限制通常针对单个模型

429状态码很少意味着“这个密钥已用完”,它通常表示“该密钥下的这个模型已达限额”。因此,在放弃某个提供商之前,先尝试同一密钥下的其他模型。

new LLMCascade({
  keys: { groq: process.env.GROQ_API_KEY },
  models: { groq: ['openai/gpt-oss-120b', 'openai/gpt-oss-20b'] }, // 第二个模型仅在第一个受限时尝试
});

3. 准确掌握等待时间

固定冷却时间并不正确——对每分钟限制来说太长,对每日限制来说又太短。提供商以各自的方式告知何时可以重试:

  • Retry-After响应头
  • 类似“try again in 2m59s”的消息
  • 包含“per minute”或“per day”的词汇
  • 已知的每日重置时间(Gemini在太平洋时间午夜重置)

级联策略会读取所有这些信号。每分钟限制等待约一分钟,每日限制则等到提供商重置。

Rate Limit 与 Retry-After 机制

限流(Rate Limit)是服务端保护自身资源的手段,常见实现有令牌桶(Token Bucket)和滑动窗口(Sliding Window)两类。当客户端超过配额时,服务端会返回 HTTP 429 Too Many Requests,并可能附带 Retry-After 响应头,其值可以是秒数,也可以是 HTTP 日期。此外,不少 LLM 提供商在 429 响应体的错误消息里用自然语言给出提示,例如 “Rate limit reached, try again in 2m59s” 或 “You exceeded your current quota, please check your plan”,有些还会注明是 “per minute” 还是 “per day”。对客户端而言,正确识别这些信号并在等待后重试,比盲目固定休眠要高效得多:固定等待对每分钟限制可能过长(浪费吞吐),对每日限制又可能过短(反复撞墙)。因此,成熟的客户端应当解析响应头与错误消息,区分分钟级与每日级限流,并结合各提供商的已知重置时间(如 Google Gemini 免费层按太平洋时间午夜重置)来安排恢复。

4. 并非所有错误都意味着提供商故障

错误类型级联处理方式
提示过长仅针对当前请求跳过该提供商
429/配额让该密钥和模型休息至重置
401/403停止使用该密钥
404(模型移除)停止使用该模型
超时、5xx连续2次后,跳过该提供商一分钟

最后一条至关重要。没有它,一个宕机的提供商会让每个请求都等待完整的超时时间。

5. 一个我选择不用的技巧

你可以将同一请求同时发送给两个提供商,保留更快的响应。但在免费层,这意味着为一个答案消耗双倍配额,因此我放弃了这种做法。

6. 免费层随时在变

今年Cerebras的免费层变成了30天试用,SambaNova开始要求绑定信用卡,GitHub Models则关闭了。模型名称的变化更加频繁。

因此,提供商列表存放在单个数据文件providers.json中。每个条目记录最后检查时间和数据来源,并警告诸如“仅限非商业用途”或“需要电话号码”等信息。一个小脚本会对照各提供商的实时列表检查每个模型名称。

需要注意:许多提供商不允许通过多个免费账户绕过限制。请检查各提供商的条款。

7. 支持任意语言调用

有人提issue希望能像OpenAI API一样从自己的工具中使用。现在可以将其作为本地服务器运行:

npx llm-free-cascade serve        # http://127.0.0.1:8787/v1

然后将任何OpenAI客户端指向它,例如Python:

from openai import OpenAI

client = OpenAI(base_url="http://127.0.0.1:8787/v1", api_key="unused")
reply = client.chat.completions.create(
    model="cascade",  # 或 "groq" 仅使用Groq
    messages=[{"role": "user", "content": "Explain photosynthesis in one sentence."}],
)
print(reply.choices[0].message.content)

它同样支持流式传输。服务器默认只监听本机,因为它保存了你所有的密钥。

OpenAI 兼容 API 与本地代理

所谓“OpenAI 兼容 API”,是指服务端暴露与 OpenAI Chat Completions 相同的请求/响应结构(/v1/chat/completions、messages 数组、choices[0].message.content 等)。由于 OpenAI 的 SDK 和生态极为普及,许多客户端、框架和工具默认都按这套接口编写,因此只要代理层实现该协议,就能让几乎所有语言和工具零改动接入。llm-free-cascade serve 正是这样一个本地代理:它监听本机端口,暴露 OpenAI 兼容端点,把请求翻译成对底层多个提供商的级联调用。使用 base_url 指向本地地址的 OpenAI 客户端(Python、Node、Go、Rust 均可),就能透明享受多提供商聚合。需要特别注意的是,这个服务器在内存中持有你所有的 API 密钥,因此默认只绑定 127.0.0.1,不要把端口暴露到公网;如确需远程访问,应额外加上反向代理和鉴权层。

8. 用Ollama实现本地备份

如果所有免费层同时繁忙,Ollama可以从你自己的电脑上回答问题。没有限制,只是速度较慢。

new LLMCascade({
  custom: {
    ollama: {
      baseUrl: 'http://localhost:11434/v1',
      model: 'llama3.2',
      apiKey: 'ollama', // 任意文本均可,但不能为空
      tier: 5,          // 最后尝试
    },
  },
});

9. 可视化运行状态

npx llm-free-cascade keys     # 缺少哪些提供商,以及在哪里注册
npx llm-free-cascade status   # 你的提供商、密钥和限制
npx llm-free-cascade probe    # 对所有密钥进行快速实时测试

在代码中,cascade.stats()显示每个提供商和密钥的调用次数、失败次数、速度和冷却状态。

技术实现与生态

llm-free-cascade采用MIT许可证,零依赖,运行在Node 18+上。它通过级联多个免费LLM API,为开发者提供了一个统一的接口,同时处理了密钥轮换、模型切换、错误分类和限流恢复等复杂逻辑。

项目地址:GitHub · npm · 指南

如果你发现某个模型名称已失效,修复只需提交单文件PR。如果希望在服务器中支持工具调用,欢迎提issue说明你的使用场景。

#免费LLM API#llm-free-cascade#API级联#限流处理#密钥轮换#OpenAI兼容#Ollama本地备份
分享:

相关推荐