你是否曾为调用大模型 API 时的高昂费用而心疼?是否因为网上找来的免费 Key 经常失效、频繁手动切换而烦恼?如果有一个工具,能自动抓取免费的 API Key,并在背后悄无声息地帮你调度、切换,让聊天机器人永远不中断,而且完全免费,你想不想要?
今天我们就来手把手搭建一个开源、轻量、智能的 LLM API 代理网关。它像一个贴心的管家,帮你收集所有可用的免费 Key,按优先级使用,并在 Key 失效时瞬间切换到下一个,对你的聊天机器人(AstrBot、OpenClaw 等)完全透明。
这个项目是一个多层防御的智能网关:
核心理念:优先烧完不稳定但免费的羊毛,官方稳定免费资源作为第二梯队,自己的付费 Key 当作保险丝。系统会自动在它们之间切换,而你只需在聊天框里正常说话。
项目采用 Python + Flask + Waitress,单文件设计,极简部署。所有 Key 存储在内存中,无磁盘 I/O 延迟,响应飞快。
┌──────────────────────────────────────────────┐ │ proxy.py (单文件) │ │ │ │ ┌──────────┐ ┌─────────────────────┐ │ │ │ 爬虫线程 │─────▶│ 内存 KeyPool │ │ │ │(定时抓取) │ │ P0: 中转 / P1: 免费 │ │ │ └──────────┘ │ P2: 付费 │ │ │ └─────────────────────┘ │ │ │ │ │ ┌────▼────┐ │ │ │ 热备用调度器 │ │ │ └────┬────┘ │ │ │ │ │ ┌────▼────┐ │ │ │ 格式适配 & 请求转发 │ │ │ └────┬────┘ │ │ │ │ │ ┌────▼────┐ │ │ │Flask+Waitress│ │ │ │ 对外开放 API │ │ │ └─────────┘ │ └──────────────────────────────────────────────┘
核心模块:
active_key 和 backup_key,当主 Key 失效时零延迟切换。在 Web 面板上可以随时添加新的免费 Key 来源(URL),爬虫会自动遍历所有源抓取 Key。你不再需要修改代码,今天发现一个好用的中转站,粘贴 URL 就能立刻开始薅羊毛。数据源支持两种格式:
{"groups": [{"keys": [{"api_key": "...", "model": "..."}]}]}[{"key": "...", "models": ["..."], "provider": "..."}]社区中转站普遍采用这种格式,非常适合批量抓取。
网关已经不再局限于社区中转 Key,而是将更多稳定、有官方免费额度的供应商纳入体系。
https://integrate.api.nvidia.com/v1,模型名使用 nvidia/nemotron-3-super-120b-a12b 等。https://models.github.ai/inference,模型名使用 openai/gpt-4o-mini 等。https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/v1,模型名使用 @cf/meta/llama-3.1-8b-instruct 等。https://generativelanguage.googleapis.com/v1beta,模型名使用 gemini-2.5-flash 等。https://api-inference.modelscope.cn/v1,模型名使用 deepseek-ai/DeepSeek-V4-Pro 等。通过将这些官方免费额度资源加入 P1 层,网关实现了更高的稳定性和可用性,确保在社区 Key 失效时,仍有充裕的免费资源可供调度。
网关在设计上力求对上游友好,避免因频繁轮询导致 API 被限流:
model: "auto" 智能路由:根据提示词内容(语言、是否包含代码等)自动选择最合适的模型。通过引入冷却(Cooldown)与成功重置(Success Reset)的机制,网关避免了因一次临时错误就删除 Key 的情况,极大地保护了有限且宝贵的免费资源。
当请求中 model 为 "auto" 时,网关按优先级循环尝试所有可用 Key,直到成功或全部失败。每次尝试使用该 Key 的第一个支持模型(verified_models[0] 或 selected_models[0])。切换过程对前端完全透明,只返回最终成功响应或全部失败错误。
网关的设计原则是尽可能不修改请求体,而是原样透传给上游。为了兼容不支持多模态的社区 Key,网关会自动移除 messages 中的 image_url 字段,只保留文本内容,避免上游 400 错误。同时,网关会根据供应商类型(OpenAI 兼容或 Google Gemini)自动构建请求 URL 和认证头。
爬虫线程从 sources.json 配置的数据源抓取社区 Key,每 5 分钟更新一次。社区 Key 失败时先冷却 60 秒,连续失败 3 次才删除。成功请求重置失败计数,实现“粘度延续”。爬虫更新时,保留现有社区 Key 的冷却时间和失败计数,避免因短暂故障而被误删。
告别修改配置文件的繁琐操作!在 Web 管理面板的供应商编辑页面,现在可以:
openai/gpt-4o-mini、@cf/meta/llama-3-8b-instruct)。nvidia/ 开头的模型)。providers.json,无需重启网关。每个稳定供应商都配有“测试”按钮,点击后网关会发送一条简单的测试消息(例如“Say 'OK' if you are working.”)到上游 API,并显示状态码、延迟和响应内容。测试成功后,网关会自动更新该供应商的平均延迟(指数加权移动平均),并在表格中刷新显示。测试失败不会删除或冷却 Key,仅展示错误信息。
proxy.py 和 templates/admin.html,无需复杂配置。waitress 作为 WSGI 服务器,支持多线程并发。proxy.log,管理面板提供分页日志查看和健康状态卡片。访问 http://127.0.0.1:8800/admin(默认账号密码 admin/admin),你可以:

proxy.py 和 templates/admin.html 保存到同一目录。pip install flask waitress requests cryptographypython proxy.pysources.json,添加社区 Key 采集 URL(默认已配置一个测试源)。http://你的服务器IP:8800/v1,API Key 任意填写。proxy.py:支持多供应商、多源数据抓取、热备用切换、自动清理多模态内容。admin.html:模型标签管理、探测模型模态框、日志自动刷新、供应商测试。这个网关的设计和实现凝聚了我们许多思考和实践。
对于个人开发者来说,这是一个极具性价比的解决方案。它让我们可以用极低的成本,体验到各种前沿的大模型能力。
希望这个项目的实现思路和最终成果能对你有所帮助。完整的代码和更详尽的技术细节,可以在下面的链接中找到。如果你有任何疑问或想法,也欢迎随时交流。
项目文档与代码仓库地址: https://github.com/yhyh0000/LLM-Proxy-Gateway
本文作者:苏皓明
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!