
不知道你们有没有被 AI 账单支配的恐惧。功能做得爽,月底账单来一看——好家伙,比服务器费用还高。我自己做了个 AI 黄金交易系统,用户量涨上来之后,OpenAI 的 API 费用也跟着飙,每个月几千美元扔进去,说不心疼是假的。
试过手动薅免费额度,结论是:**千万别这么干**。不同平台不同 API、不同速率限制、这家挂了那家顶上……管着管着人就麻了。后来认真研究了一圈,发现一个比较靠谱的开源方案——LLM API 网关,今天来聊聊。
每个月给 OpenAI 或者 Claude 交两千美元,说实话挺肉疼的。尤其当你知道外面有一堆不错的免费 LLM 在那闲着,问题是管不过来。API 分散、速率限制各异、可用性参差不齐——一旦某个服务挂了,应用也跟着崩。
我们需要的是这样的东西:
迁移到开源 LLM API 网关之后,核心代理通信的 LLM API 成本直接降了 75-80%。不是吹的,是真金白银省下来的。
研究了一圈,看上了 free-llm-gateway 这个项目。本质上它是个代理,对外暴露一个 OpenAI 兼容的端点,你调用自己的网关,它来智能路由到 14+ 个免费或低成本供应商:HuggingFace、Perplexity、You.com、Poe、OpenRouter……
关键不只是"免费",而是**弹性**。Perplexity 忙了?切 You.com。You.com 也挂了?试试 HuggingFace。这种多供应商路由策略,才是稳定性和成本控制的关键。
说干就干,先上 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。
网关跑起来之后,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 环境。
教训:
model: "llama-2-70b-chat",别让网关猜.env 文件里,别硬编码429 或者 500 就是有问题axios 的 responseType: 'stream' 配好就行能省多少?
省了 80% 的 LLM API 成本是真的,不是标题党。
真的能上生产吗?
低中流量没问题,高流量场景建议加监控、低成本付费兜底。
免费 LLM API 就在那,用网关把它们串起来,不光省钱,更重要的是服务稳定性。把鸡蛋放在不同篮子里,供应商挂了也不慌。如果你正在被 AI 账单折磨,不妨试试。