site logo

Marico's space

省了80%成本!14+提供商的免费LLM API网关部署笔记

服务器技术 2026-04-24 20:59:56 12

不知道你们有没有被 AI 账单支配的恐惧。功能做得爽,月底账单来一看——好家伙,比服务器费用还高。我自己做了个 AI 黄金交易系统,用户量涨上来之后,OpenAI 的 API 费用也跟着飙,每个月几千美元扔进去,说不心疼是假的。

试过手动薅免费额度,结论是:**千万别这么干**。不同平台不同 API、不同速率限制、这家挂了那家顶上……管着管着人就麻了。后来认真研究了一圈,发现一个比较靠谱的开源方案——LLM API 网关,今天来聊聊。

server infrastructure

你的 LLM 账单为什么这么高?

每个月给 OpenAI 或者 Claude 交两千美元,说实话挺肉疼的。尤其当你知道外面有一堆不错的免费 LLM 在那闲着,问题是管不过来。API 分散、速率限制各异、可用性参差不齐——一旦某个服务挂了,应用也跟着崩。

我们需要的是这样的东西:

  • 统一 API:用 OpenAI 的方式调用,后端随便切
  • 自动降级:一个免费供应商扛不住了,自动切到下一个
  • 速率限制:别把免费 API 打封禁了
  • 成本直降:这个是核心目标

迁移到开源 LLM API 网关之后,核心代理通信的 LLM API 成本直接降了 75-80%。不是吹的,是真金白银省下来的。

方案:统一 LLM API 网关

研究了一圈,看上了 free-llm-gateway 这个项目。本质上它是个代理,对外暴露一个 OpenAI 兼容的端点,你调用自己的网关,它来智能路由到 14+ 个免费或低成本供应商:HuggingFace、Perplexity、You.com、Poe、OpenRouter……

关键不只是"免费",而是**弹性**。Perplexity 忙了?切 You.com。You.com 也挂了?试试 HuggingFace。这种多供应商路由策略,才是稳定性和成本控制的关键。

  • OpenAI API 兼容:现有代码改个地址就能用
  • 自动降级:配置供应商优先级列表,按顺序自动切
  • 内置速率限制:保护上游不被请求轰炸
  • 自托管:跑在便宜 VPS 上都行,树莓派也不是不行

动手部署(Docker Compose)

说干就干,先上 docker-compose.yml

version: '3.8'
services:
  free-llm-gateway:
    image: ghcr.io/ramonvc/free-llm-gateway:latest
    container_name: free-llm-gateway
    restart: unless-stopped
    ports:
      - "8000:8000"
    environment:
      - API_PORT=8000
      - OPENAI_COMPATIBLE=true
      - DEFAULT_MODEL=gpt-3.5-turbo

      # Perplexity(免费额度有上限)
      - PPLEX_ENABLED=true
      - PPLEX_API_KEY=your_perplexity_api_key
      - PPLEX_MODEL=llama-2-70b-chat

      # OpenRouter(聚合免费额度,也有廉价付费选项)
      - OPENROUTER_ENABLED=true
      - OPENROUTER_API_KEY=your_openrouter_key
      - OPENROUTER_MODEL=mistralai/mistral-7b-instruct-v0.2

      # 速率限制(免费供应商这块必须认真配)
      - RATE_LIMIT_ENABLED=true
      - RATE_LIMIT_PER_PROVIDER_MINUTE=60
      - RATE_LIMIT_TOTAL_MINUTE=100

      # 降级顺序:按这个列表依次试
      - FALLBACK_PROVIDERS=PPLEX,OPENROUTER,YOU,HF

启动:

docker-compose up -d

搞定,网关跑在 http://localhost:8000

docker containers

接入 Node.js 后端和 Flutter

网关跑起来之后,Flutter 端不应该直接怼网关——那样会暴露 URL,速率限制也容易被不同 IP 绕过。正确姿势是:Flutter → Node.js 后端 → free-llm-gateway。

Node.js 代理(Express)核心部分:

const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());

const LLM_GATEWAY_URL = process.env.LLM_GATEWAY_URL || 'http://localhost:8000';

app.post('/api/chat', async (req, res) => {
  try {
    const { messages, model, stream } = req.body;

    const gatewayResponse = await axios.post(
      `${LLM_GATEWAY_URL}/v1/chat/completions`,
      { messages, model: model || 'gpt-3.5-turbo', stream: stream || false },
      { headers: { 'Content-Type': 'application/json' }, responseType: stream ? 'stream' : 'json' }
    );

    if (stream) {
      res.setHeader('Content-Type', 'text/event-stream');
      gatewayResponse.data.pipe(res);
    } else {
      res.json(gatewayResponse.data);
    }
  } catch (error) {
    res.status(error.response?.status || 500).json({
      error: error.response?.data?.error || 'LLM网关调用失败',
    });
  }
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`代理服务启动,端口 ${PORT}`));

我踩过的坑

说真的,指望免费 LLM 供应商不用备用方案就能稳定跑生产,是想多了。免费 tier 嘛,人家是为了引你入坑,不是让你白嫖整个 production 环境。

教训:

  1. 多配置 fallback 提供商:别只配一两个,把能用的全配上,越多越稳
  2. 速率限制要保守:免费 tier 我一般设 10-20 RPM,先看效果再慢慢加
  3. 半免费备用方案:关键路径加一个低成本的付费兜底,比如 OpenRouter 充值一点点Credit,稳定性提升一个档次

优化建议

  • 如果你要 Llama-2-70B,直接在请求里指定 model: "llama-2-70b-chat",别让网关猜
  • API Key 放 .env 文件里,别硬编码
  • 监控日志,看到大量 429 或者 500 就是有问题
  • 支持流式输出,axiosresponseType: 'stream' 配好就行

FAQ

能省多少?
省了 80% 的 LLM API 成本是真的,不是标题党。

真的能上生产吗?
低中流量没问题,高流量场景建议加监控、低成本付费兜底。

免费 LLM API 就在那,用网关把它们串起来,不光省钱,更重要的是服务稳定性。把鸡蛋放在不同篮子里,供应商挂了也不慌。如果你正在被 AI 账单折磨,不妨试试。