# freellmapiPro **Repository Path**: web/freellmapi-pro ## Basic Information - **Project Name**: freellmapiPro - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-07 - **Last Updated**: 2026-05-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
# FreeLLMAPI-Pro **一个 OpenAI 兼容的端点。十四个免费 LLM 提供商。每月约 13 亿+ token。** **改自原开源项目:** [https://github.com/tashfeenahmed/freellmapi.git](https://github.com/tashfeenahmed/freellmapi.git) 将 Google、Groq、Cerebras、SambaNova、NVIDIA、Mistral、OpenRouter、GitHub Models、Hugging Face、Cohere、Cloudflare、智谱、Moonshot(Kimi)和 MiniMax 的免费层聚合到一个 `/v1/chat/completions` 端点后面。密钥加密存储。路由器为每个请求选择最佳可用模型,当某个提供商被限流时自动故障转移到下一个,并跟踪每个密钥的使用情况,确保您保持在每个免费层限额内。 [![CI](https://github.com/tashfeenahmed/freellmapi/actions/workflows/ci.yml/badge.svg)](https://github.com/tashfeenahmed/freellmapi/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](#contributing) ![Fallback chain with per-provider token budget](repo-assets/fallback-chain.png)
--- ## 目录 - [为什么需要这个项目](#为什么需要这个项目) - [支持的提供商](#支持的提供商) - [功能特性](#功能特性) - [自定义 API 支持](#自定义-api支持) - [暂不支持的功能](#暂不支持的功能) - [快速开始](#快速开始) - [使用 API](#使用-api) - [截图](#截图) - [工作原理](#工作原理) - [限制](#限制) - [贡献](#贡献) - [服务条款审查](#服务条款审查) - [免责声明](#免责声明) ## 为什么需要这个项目 每个严肃的 AI 实验室现在都提供免费层——每月几百万 token,每天几千次请求。单独使用时,每个免费层都只是个玩具。但将它们堆叠在一起,总共可以达到大约 **每月 13 亿 token** 的推理能力,涵盖从小型快速模型到功能强大的模型等数十种模型。 问题在于手动堆叠它们非常痛苦:十四个不同的 SDK、十四个不同的速率限制、十四个可能失败的地方。FreeLLMAPI 将这些简化为一个 OpenAI 兼容的端点。将任何 OpenAI 客户端库指向您的本地服务器,它会透明地路由到您添加了密钥的任何提供商。 ## 支持的提供商
Google
Gemini 2.5 Pro / Flash
Groq
Llama 4, Qwen, Kimi
Cerebras
Llama 3.3, Qwen
SambaNova
Llama 3.3 70B
NVIDIA
NIM catalog
Mistral
La Plateforme
OpenRouter
免费层模型
GitHub Models
GPT-4o, Llama, Phi
Hugging Face
Inference Providers
Cohere
Command R+ (trial)
Cloudflare
Workers AI
智谱
GLM-4 系列
Moonshot
Kimi
MiniMax
abab / hailuo
自定义
OpenAI 兼容
## 功能特性 - **OpenAI 兼容** — `POST /v1/chat/completions` 和 `GET /v1/models` 可与官方 OpenAI SDK 以及任何 OpenAI 兼容客户端(LangChain、LlamaIndex、Continue、Hermes 等)一起使用。只需更改 `base_url`。 - **流式和非流式** — 当 `stream: true` 时使用 Server-Sent Events,否则返回 JSON 响应。每个提供商适配器都实现了这两种模式。 - **工具调用** — OpenAI 风格的 `tools` / `tool_choice` 请求会被传递,assistant 的 `tool_calls` + `tool` 角色的后续消息会跨提供商往返。 - **自动故障转移** — 如果所选提供商返回 429、5xx 或超时,路由器会跳过它,将密钥置于短暂冷却状态,并在回退链中的下一个模型上重试(最多 20 次尝试)。 - **每密钥速率跟踪** — 每个 `(平台, 模型, 密钥)` 的 RPM、RPD、TPM 和 TPD 计数器,因此路由器始终选择处于限额内的密钥。 - **粘性会话** — 多轮对话在 30 分钟内保持与同一模型对话,以避免中途切换模型导致的幻觉激增。 - **加密密钥存储** — API 密钥在存入 SQLite 之前使用 AES-256-GCM 加密;解密仅在请求前在内存中进行。 - **统一 API 密钥** — 客户端使用单个 `freellmapi-…` bearer token 认证到您的代理。您永远不会向上游提供商暴露密钥。 - **健康检查** — 定期探测将密钥标记为 `healthy`、`rate_limited`、`invalid` 或 `error`,因此路由器会自动跳过失效的密钥。 - **管理仪表板** — React + Vite UI 用于管理密钥、重新排序回退链、查看分析和在 playground 中运行提示。支持深色模式。 - **分析** — 每请求日志记录,包含延迟、token 计数、成功率和每个提供商的细分。 - **部署到树莓派** — 在树莓派 4 上通过 PM2 在 nginx 后面愉快运行。空闲时约 40 MB RSS。 - **管理密码保护** — 可选的管理密码(通过 `.env` 中的 `ADMIN_PASSWORD` 设置)保护仪表板。API 请求不受影响。 - **错误日志** — 可选的错误日志记录(通过 `.env` 中的 `ERROR_LOGGING=true` 启用)。 ### 新增功能 (Pro) - **管理平台密码验证** — 为管理仪表板添加密码保护,防止未授权访问。 - **兼容 OpenClaw 调用** — 支持 OpenClaw 调用,实现无缝集成。 - **新增通用 OpenAPI 模型添加** — 通过通用 OpenAPI 端点添加自定义 OpenAI 兼容模型。 - **直接获取所有可用模型** — 从 `/v1/models` 端点直接获取所有可用模型。 - **一键校验所有模型是否可用** — 一次性验证所有模型是否正常工作。 ## 自定义 API 支持 FreeLLMAPI 支持添加自定义 OpenAI 兼容的 API 端点。这允许您: 1. **连接到任何 OpenAI 兼容的 API** — 添加您自己的 API 端点和自定义 URL 2. **与任何模型一起使用** — 自定义 API 密钥可用于访问目录中的任何模型 3. **扩展到支持的提供商之外** — 连接到未在支持提供商列表中列出的 API ### 添加自定义 API 密钥 1. 转到仪表板中的 **Keys** 页面 2. 从平台下拉菜单中选择 **Custom OpenAI-compatible API** 3. 输入您的 API 密钥和 API 基础 URL(例如 `https://api.example.com/v1`) 4. 点击 **Add key** 自定义 API 密钥具有优先级,可用于访问回退链中的任何模型。当有自定义密钥可用时,它将优先于平台特定的密钥使用。 ## 暂不支持的功能 范围故意收窄。如果某个功能不在此列表中且不在下面,请认为它尚未实现。 - **嵌入** (`/v1/embeddings`) - **图像生成** (`/v1/images/*`) - **音频/语音** (`/v1/audio/*`) - **视觉/多模态输入** — 消息内容仅限文本 - **传统补全** (`/v1/completions`) — 仅实现了聊天端点 - **内容审核** (`/v1/moderations`) - **`n > 1`**(每个请求多个补全) - **每用户计费/多租户认证** — 设计为单用户 添加任何这些功能的 PR 非常受欢迎。请参阅 [贡献](#贡献)。 ## 快速开始 **前提条件:** Node.js 20+,npm。 ```bash git clone https://gitee.com/web/freellmapi-pro.git cd freellmapi npm install # 更新 git pull # 生成用于密钥存储的加密密钥 cp .env.example .env echo "ENCRYPTION_KEY=$(node -e "console.log(require('crypto').randomBytes(32).toString('hex'))")" >> .env # 一起启动服务器和仪表板 npm run dev ``` 打开 http://localhost:5173(Vite 开发 UI),在 **Keys** 页面添加您的提供商密钥,按喜好重新排序 **Fallback Chain**,并从 **Keys** 页面头部获取您的统一 API 密钥。这个统一密钥就是您要指向 OpenAI SDK 的密钥。 生产构建: ```bash npm run build node server/dist/index.js # 服务器和仪表板都在 :3001 上提供服务 ``` ## 使用 API 任何 OpenAI 兼容的客户端都可以使用。示例: **Python** ```python from openai import OpenAI client = OpenAI( base_url="http://localhost:3001/v1", api_key="freellmapi-your-unified-key", ) resp = client.chat.completions.create( model="auto", # 让路由器选择;或指定例如 "gemini-2.5-flash" messages=[{"role": "user", "content": "用一句话概括罗马的衰落。"}], ) print(resp.choices[0].message.content) print("路由通过:", resp.headers.get("x-routed-via")) ``` **curl** ```bash curl http://localhost:3001/v1/chat/completions \ -H "Authorization: Bearer freellmapi-your-unified-key" \ -H "Content-Type: application/json" \ -d '{ "model": "auto", "messages": [{"role": "user", "content": "hi"}] }' ``` **流式传输** ```python stream = client.chat.completions.create( model="auto", messages=[{"role": "user", "content": "给我一首关于 SQLite 的俳句。"}], stream=True, ) for chunk in stream: print(chunk.choices[0].delta.content or "", end="", flush=True) ``` **工具调用** 传递 OpenAI 风格的 `tools` 和 `tool_choice`;assistant 响应通过代理往返,与 OpenAI API 完全相同。多步骤流程(assistant `tool_calls` → `tool` 角色后续 → 最终答案)可以在路由器可访问的每个提供商上工作。 ```python tools = [{ "type": "function", "function": { "name": "get_weather", "description": "获取城市的当前天气。", "parameters": { "type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"], }, }, }] # 1. 模型请求工具调用 first = client.chat.completions.create( model="auto", messages=[{"role": "user", "content": "卡拉奇的天气怎么样?"}], tools=tools, tool_choice="required", ) call = first.choices[0].message.tool_calls[0] # 2. 您执行工具,将结果反馈回去 final = client.chat.completions.create( model="auto", messages=[ {"role": "user", "content": "卡拉奇的天气怎么样?"}, first.choices[0].message, {"role": "tool", "tool_call_id": call.id, "content": '{"temp_c": 32, "cond": "sunny"}'}, ], tools=tools, ) print(final.choices[0].message.content) ``` 也支持 `stream=True` — 您会得到 `delta.tool_calls` 块,然后是 `finish_reason: "tool_calls"` 结束。在底层,OpenAI 兼容提供商(Groq、Cerebras、SambaNova、Mistral、OpenRouter、GitHub Models、HuggingFace、Cloudflare、Cohere compat)的请求直接传递;Gemini 请求被转换为 Google 的 `functionDeclarations` / `functionResponse` 格式,响应再转换回来。 每个响应都带有 `X-Routed-Via: /` 头,因此您可以看到哪个提供商实际服务了每个调用。如果请求在提供商之间发生故障转移,您还会看到 `X-Fallback-Attempts: N`。 ## 截图 ### Keys 管理提供商凭证并获取您的应用连接的统一 API 密钥。每个密钥显示状态点和上次健康检查的时间。 ![Keys page](repo-assets/keys.png) ### Playground 通过路由器发送聊天补全,查看哪个提供商服务了它,模型 ID 和延迟直接显示在消息上。 ![Playground page](repo-assets/playground.png) ### Analytics 请求量、成功率、输入输出 token、平均延迟以及 24h / 7d / 30d 窗口内每个提供商的细分。 ![Analytics page](repo-assets/analytics.png) ## 工作原理 ``` ┌──────────────────┐ Bearer freellmapi-… ┌─────────────────────────┐ │ OpenAI SDK / │ ──────────────────────▶ │ Express proxy (:3001) │ │ curl / any │ ◀────────────────────── │ /v1/chat/completions │ │ OpenAI client │ streamed tokens └────────────┬────────────┘ └──────────────────┘ │ ▼ ┌────────────────────────────────────────────────┐ │ Router │ │ 1. 选择优先级最高的模型,要求: │ │ (a) 有健康的密钥,并且 │ │ (b) 在所有速率限制之下。 │ │ 2. 解密密钥,调用提供商 SDK。 │ │ 3. 如果遇到 429/5xx → 冷却 + 重试下一个模型。 │ └────────────────────────────────────────────────┘ │ ┌──────────────┬────────────┬──────────┴─────────┬─────────────┬──────────┐ ▼ ▼ ▼ ▼ ▼ ▼ Google Groq Cerebras OpenRouter HF …10 more ``` - **Router** (`server/src/services/router.ts`) — 为每个请求选择模型。 - **速率限制分类账** (`server/src/services/ratelimit.ts`) — 内存中的 RPM/RPD/TPM/TPD 计数器,由 SQLite 支持,429 时有冷却机制。 - **提供商适配器** (`server/src/providers/*.ts`) — 每个提供商一个文件,实现 `Provider` 基类:`chatCompletion()` 和 `streamChatCompletion()`。 - **健康服务** (`server/src/services/health.ts`) — 定期探测保持密钥状态新鲜。 - **仪表板** (`client/`) — React + Vite + shadcn/ui 管理界面。 - **存储** — SQLite (`better-sqlite3`),密钥使用 AES-256-GCM 信封加密。 ## 限制 堆叠免费层有实际的权衡。请诚实地看待它们: - **没有前沿模型。** 免费层目录最高达到 Llama 3.3 70B、GLM-4.5、Qwen 3 Coder 和 Gemini 2.5 Pro。您不会通过这个获得 GPT-5 或 Claude Opus 级别的推理能力。对于难题,请付费使用真正的 API。 - **智能程度随时间下降。** 您排名最高的模型(通常是 Gemini 2.5 Pro、通过 GitHub Models 的 GPT-4o)每日限额最低。一旦达到限额,路由器会在您的优先级链中降级到更小/更弱的模型。预计端点的有效智能程度在每天晚些时候会下降——然后在 UTC 午夜重置。 - **延迟高度可变。** Cerebras 和 Groq 非常快;其他则不然。您得到的是可用的那个。 - **免费层可能随时更改。** 提供商定期收紧、放宽或取消免费层。发生这种情况时,您会看到 429 或认证错误,直到您更新目录。重新播种脚本位于 `server/src/scripts/` 中。 - **没有 SLA,根据定义。** 如果您需要可靠性,请使用有合同的付费提供商。 - **本地优先。** 没有多租户认证。自己运行;不要暴露到互联网。 ## 贡献 非常欢迎贡献者!好的首次 PR: - **添加提供商** — 复制 `server/src/providers/openai-compat.ts` 作为模板,将其连接到 `server/src/providers/index.ts`,在 `server/src/db/index.ts` 中播种其模型,在 `server/src/__tests__/providers/` 中添加测试。 - **添加端点** — 嵌入、图像、审核。提供商基类可以添加新方法;适配器声明它们支持的方法。 - **改进路由器** — 成本感知路由(最便宜-健康-最快权衡)、更好的延迟加权优先级、区域固定。 - **仪表板改进** — 分析页面上的图表、密钥轮换 UX、从 `.env` 批量导入密钥。 - **文档** — 更多示例、Go/Rust 等客户端库代码片段、Docker 或 Fly 的部署方案。 **开发循环:** ```bash npm install npm run dev # 服务器在 :3001,仪表板在 :5173,都有 HMR npm test # vitest — 提供商、路由、路由器、速率限制共 75 个测试 ``` PR 应包含测试,保持现有测试套件通过,并符合仓库中已有的 `.editorconfig` / tsconfig 默认值。问题和讨论是开放的。 ### 贡献者 感谢所有帮助改进 FreeLLMAPI 的人: - [@moaaz12-web](https://github.com/moaaz12-web) — 跨提供商的工具调用支持 (#3) ## 服务条款审查 针对每个提供商的 ToS(2026 年 4 月)审查了自托管、单用户、个人使用设置。摘要: | 提供商 | 结论 | 备注 | |---|---|---| | Google Gemini | ✅ 可能 OK | 无不利条款;个人使用代理未被禁止。 | | Groq | ✅ 可能 OK | 明确允许集成到"客户应用程序"中。 | | Cerebras | ✅ 可能 OK | 允许;不要转售密钥。 | | Mistral | ✅ 可能 OK | API 允许个人/内部商业使用。 | | OpenRouter | ✅ 可能 OK | 仅限私人使用;不要公开暴露代理。 | | Hugging Face | ✅ 可能 OK | BYO-key 代理是文档化的模式。 | | 智谱 | ✅ 可能 OK | 明确的"个人、非商业研究"例外。 | | Moonshot / Kimi | ✅ 可能 OK | 竞争产品条款广泛但不针对单用户代理。 | | SambaNova | ⚠️ 模糊 | 公开条款对 API 保持沉默。 | | MiniMax | ⚠️ 模糊 | 公开条款沉默。 | | Cloudflare Workers AI | ⚠️ 模糊 | 未发现不利条款。 | | NVIDIA NIM | ⚠️ 谨慎 | 免费层是"仅评估,非生产"。 | | GitHub Models | ⚠️ 谨慎 | 免费层范围为"实验"。 | | Cohere | ❌ 避免 | 试用 ToS §14 明确禁止个人/家庭使用。 | 让大多数提供商满意的经验法则:**每个提供商一个账户**、**不转售**、**不与其他人共享您的端点**、**不要将免费层作为付费生产后端滥用**。这是信息性的,不是法律建议——阅读每个提供商的 ToS 并自行决定。 ## 免责声明 **本项目仅供个人实验和学习,不适用于生产环境。** 免费层存在是为了让开发人员可以针对它们进行原型设计;它们不是稳定的、受支持的推理基础架构,不应被视为这样的基础架构。如果您在 FreeLLMAPI 之上构建了真正的东西,请在发布前换入付费 API。您与每个上游提供商的关系受您创建账户时接受的条款管辖——当流量通过此项目代理时,这些条款仍然适用,您有责任遵守它们。 ## 许可证 [MIT](./LICENSE)