> [!NOTE] > 本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。 > [English](./README.en.md) · [原始项目](https://github.com/tashfeenahmed/freellmapi) · [上游 README](https://github.com/tashfeenahmed/freellmapi/blob/HEAD/README.md) > 原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
# FreeLLMAPI **一个 OpenAI 兼容端点。18 家免费 LLM 提供商。161 个免费模型。每月约 17 亿 token。** 将 Google、Groq、Cerebras、NVIDIA、Mistral、OpenRouter、GitHub Models、Cohere、Cloudflare、HuggingFace、Z.ai(智谱)、Ollama、Kilo、Pollinations、LLM7、OVH AI Endpoints、OpenCode Zen 和 AI Horde 的免费套餐,以及自定义 OpenAI 兼容的聊天、嵌入、图像和音频端点,聚合到单一 `/v1` API 之后。密钥加密存储。路由器为每个请求选择当前最佳可用模型,在某家提供商触发速率限制时自动故障转移到下一家,并跟踪每个密钥的用量,确保你始终不超出各家免费套餐上限。 [![CI](https://github.com/tashfeenahmed/freellmapi/actions/workflows/ci.yml/badge.svg)](https://github.com/tashfeenahmed/freellmapi/actions/workflows/ci.yml) [![GitHub stars](https://img.shields.io/github/stars/tashfeenahmed/freellmapi?style=flat&logo=github&color=yellow)](https://github.com/tashfeenahmed/freellmapi/stargazers) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](#contributing) [![Docker image](https://img.shields.io/badge/ghcr.io-freellmapi-2496ED?logo=docker&logoColor=white)](https://github.com/tashfeenahmed/freellmapi/pkgs/container/freellmapi) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/tashfeenahmed/freellmapi) **[freellmapi.co](https://freellmapi.co)** · 在实时目录中浏览全部 161 个免费模型 你的路由器会自动更新模型目录。免费安装在新模型上线 30 天后才能获得; **[Premium 在模型上线的当天即可获得,目前领先 79 个模型](https://freellmapi.co/?utm_source=github&utm_medium=readme#pricing)**($19/年,随时可取消)。 ![按提供商 token 预算的故障转移链](repo-assets/fallback-chain.png)
--- ## 目录 - [为何存在](#why-this-exists) - [支持的提供商](#supported-providers) - [功能](#features) - [尚不支持](#not-yet-supported) - [快速开始](#quick-start) - [与 OB-1 及其他客户端配合使用](#works-with-ob-1-and-other-clients) - [Docker](#docker) - [桌面应用](#desktop-app) - [语言](#languages) - [Premium(实时目录)](#premium-live-catalog) - [使用 API](#using-the-api) - [截图](#screenshots) - [工作原理](#how-it-works) - [上下文交接](#context-handoff) - [限制](#limitations) - [贡献](#contributing) - [服务条款审查](#terms-of-service-review) - [免责声明](#disclaimer) ## 为何存在 如今每家严肃的 AI 实验室都提供免费套餐——每月数百万 token、每天数千次请求。单独看,每个套餐都像是玩具;叠加在一起,它们合计可提供约 **每月 17 亿 token** 的可用推理容量,涵盖 160+ 个模型,从小而快到能力尚可。 问题在于手动叠加很痛苦:二十一套不同的 SDK、二十一套不同的速率限制、二十一个请求可能失败的地方。FreeLLMAPI 将这一切收敛为一个 OpenAI 兼容端点。将任意 OpenAI 客户端库指向你的本地服务器,它会在你已添加密钥的各提供商之间透明路由。 而且免费套餐格局每周都在变化:提供商上线模型、下线模型、悄悄调整配额。FreeLLMAPI 会替你跟踪这一切。路由器会自行从 [freellmapi.co](https://freellmapi.co) 拉取签名的模型目录,因此你的安装无需 `git pull` 也能保持同步。更新速度详见 [Premium(实时目录)](#premium-live-catalog)。 ## 支持的提供商
Google
Gemini 2.5 Flash · 3.x previews
Groq
Llama 3.3, Llama 4, GPT-OSS, Qwen3
Cerebras
Qwen3 235B
OpenCode Zen
DeepSeek V4 Flash · Nemotron (promo)
Mistral
Large 3 · Medium 3.5 · Codestral · Devstral
OpenRouter
21 free-tier models
GitHub Models
GPT-4.1 · GPT-4o
Cloudflare
Kimi K2 · GLM-4.7 · GPT-OSS · Granite 4
Cohere
Command R+ · Command-A (trial)
Z.ai (Zhipu)
GLM-4.5 · GLM-4.7 Flash
NVIDIA
NIM · 40 RPM free (eval-only ToS)
HuggingFace
Router → DeepSeek V4 · Kimi K2.6 · Qwen3
Ollama Cloud
GLM-4.7 · Kimi K2 · gpt-oss · Qwen3
Kilo Gateway
:free routes (anon ok)
Pollinations
GPT-OSS 20B (anon ok)
LLM7
GPT-OSS · Llama 3.1 · GLM (anon ok)
OVH AI Endpoints
Qwen3.5 397B · GPT-OSS · Llama 3.3 (anon ok)
NaraRouter
Mistral Large · Mistral Medium · Tencent Hy3
AI Horde
Community Llama · Gemma · Cydonia (anon ok, slow)
Aion Labs
Aggregator free tier (key, no card)
Requesty
Router free tier (key, no card)
此外还有 **custom**(自定义)提供商——在 Keys 页面可将聊天、嵌入、图像或音频模型指向任意 OpenAI 兼容端点(llama.cpp、LM Studio、vLLM、本地 Ollama 或远程网关)。 另有六项集成——**Agnes AI、Reka、SiliconFlow、Routeway、BazaarLink 和 AINative**——通过 [live catalog](#premium-live-catalog) 提供模型:Premium 路由器在模型上线的当天即可使用,免费安装则通过标准的 30 天门槛获得。 完整且始终最新的列表见 **[freellmapi.co/models](https://freellmapi.co/models.html)**,包含每个模型的速率限制、上下文窗口和免费 token 预算。 ## 功能 - **OpenAI 兼容** — `POST /v1/chat/completions` 和 `GET /v1/models` 可与官方 OpenAI SDK 及任意 OpenAI 兼容客户端(LangChain、LlamaIndex、Continue、Hermes 等)配合使用。只需修改 `base_url`。 - **Responses API** — `POST /v1/responses`(当前 Codex CLI 版本所需的线路格式)作为同一路由器之上的翻译垫片实现,支持完整流式事件和工具调用。 - **编辑器自动补全** — `POST /v1/completions` 将旧版 prompt/suffix 请求转换为同一路由器,因此 VS Code 幽灵文本客户端(如 Continue)可使用 FreeLLMAPI 进行行内建议。 - **Anthropic Messages API** — `POST /v1/messages`(以及 `/v1/messages/count_tokens`)在同一路由器上以 Anthropic 线路格式通信,因此 **Claude Code** 和官方 Anthropic SDK 可针对你的免费资源池运行。`GET /v1/models` 通过内容协商(客户端发送 `anthropic-version` 时为 Anthropic 形态,否则为 OpenAI 形态),Claude 系列(`opus` / `sonnet` / `haiku` / `default`)映射到 `auto` 或在 Keys 页面固定的模型。详见 [Anthropic / Claude clients](#anthropic--claude-clients)。 - **Fusion(多模型综合)** — 请求虚拟 `fusion` 模型时,路由器会将你的提示并行分发给一组多样化的免费模型,再由评判模型从草稿中综合出一个答案。面板、评判模型和策略可在仪表板的 **Fusion** 页面配置,或通过 `fusion` 字段按请求配置;每个子调用都走正常的路由、配额和分析流程。 - **图像生成与文字转语音** — `POST /v1/images/generations` 和 `POST /v1/audio/speech` 在提供媒体模型的提供商之间路由,包括自定义 OpenAI 兼容媒体端点。可在仪表板的 **Models → Image / Audio** 标签页浏览并启用。 - **自更新模型目录** — 路由器每天两次从 freellmapi.co 同步签名目录:新模型、配额变更和提供商怪癖修复会自动进入你的安装。详见 [Premium(实时目录)](#premium-live-catalog)。 - **流式与非流式** — `stream: true` 使用 Server-Sent Events,否则返回 JSON 响应。每个提供商适配器均实现两者。 - **工具调用** — OpenAI 风格的 `tools` / `tool_choice` 请求会透传,assistant `tool_calls` + `tool` 角色后续消息在各提供商之间往返。将工具调用以纯文本而非结构化 JSON 输出的模型会自动修复为真正的 `tool_calls`,且工具请求仅路由到实际支持它们的模型。 - **结构化输出与完整采样透传** — `response_format`(`json_object` / `json_schema`,翻译为 Gemini 原生 `responseSchema`),以及 `seed`、`top_k`、`min_p`、presence/frequency/repetition penalties、`logit_bias`、`logprobs` 和 `max_completion_tokens` 别名。已知会被某提供商拒绝的参数会按平台丢弃(Mistral 的严格 API、Groq 的 logprobs 系列……),每个模型在 `/v1/models` `supported_parameters` 中公布其真实支持列表。 - **Embeddings(嵌入)** — `/v1/embeddings` 支持基于模型族的 routing,包括自定义 OpenAI 兼容嵌入端点:故障转移仅在提供*同一*模型的提供商之间发生(不同模型的向量不兼容),绝不会跨模型转移。详见 [Embeddings](#embeddings)。 - **自动故障转移** — 若所选提供商返回 429、5xx 或超时,路由器会跳过它,将密钥置于短暂冷却期,并在你的故障转移链中重试下一个模型(最多 20 次尝试,受墙钟重试预算限制)。失效密钥会轮换到其兄弟密钥,而不是让整个请求失败;耗尽错误会携带完整尝试轨迹,便于你确切看到尝试过什么。 - **智能路由,六种策略** — 链按可选策略排序:`priority`(你的手动顺序)、`balanced`、`smartest`、`fastest`、`reliable`,或 `custom` 配合你自己的权重组合。分数来自实时逐模型测量(速度、能力、速率限制余量、近期错误),底层采用 Thompson-sampling bandit;一键排序预设可从仪表板重排链。 - **统一模型** — 由多家提供商提供的同一逻辑模型(例如 Cloudflare 和 Z.ai 上的 GLM-4.7)合并为一条目:`/v1/models` 中一个名称、组内严格故障转移,以及分组猜测错误时的合并/拆分覆盖。 - **模型配置** — 保存命名的故障转移链配置(编码链、长上下文链、视觉链),并从仪表板切换当前激活项。 - **按密钥速率跟踪** — 每个 `(platform, model, key)` 的 RPM、RPD、TPM 和 TPD 计数器,使路由器始终选择未超限的密钥。账本还会学习:提供商在错误正文或配额头中报告的上限(例如 Groq 413 指明其 TPM 限制)会自动收紧路由器自身的限制。 - **粘性会话** — 多轮对话在 30 分钟内持续使用同一模型,以避免对话中途切换模型带来的幻觉激增。 - **响应缓存(可选)** — 对相同非流式请求的精确匹配内存 LRU:对完整请求做规范化 SHA-256 键、TTL 与 temperature 门控、按请求 `X-FreeLLM-Cache: on|off` 覆盖,以及仪表板上的节省 token 统计。默认关闭;缓存命中不消耗任何提供商配额。 - **加密密钥存储** — API 密钥在写入 SQLite 前以 AES-256-GCM 加密;解密仅在请求前于内存中进行。 - **密钥导入与导出** — 通过粘贴 `.env` 文件批量导入密钥(含预览和逐密钥选择),可导出为 JSON、`.env` 或 CSV。 - **统一 API 密钥** — 客户端使用单一 `freellmapi-…` bearer token 向你的代理认证。你永远不会向上游应用暴露提供商密钥。 - **仪表板登录** — 管理 UI 及所有 `/api/*` 路由由邮箱 + 密码账户保护(scrypt 哈希、session-token 认证),首次运行时设置。`/v1` 代理为应用保留自己的统一密钥认证。 - **健康检查** — 定期探测将密钥标记为 `healthy`、`rate_limited`、`invalid` 或 `error`,路由器会自动跳过失效项。 - **管理仪表板** — React + Vite UI,用于管理密钥、重排故障转移链、查看分析并在 playground 中运行提示。包含深色模式。 - **分析** — 按请求记录延迟(p50 / p95 及流式的首 token 时间)、token 计数、成功率、预估节省成本,以及 24 小时至 90 天窗口内按提供商 / 按模型 / 按密钥的细分。 - **交互式 API 文档** — `GET /v1/docs` 提供无依赖的 OpenAPI 查看器,覆盖每个代理端点;规范本身位于 `GET /v1/openapi.json`。 - **MCP 服务器** — `POST /mcp` 使用 Model Context Protocol(Streamable HTTP),因此支持 MCP 的代理可询问路由器当前哪些免费模型可用(含每个模型的 `supported_parameters`)、检查提供商/密钥健康与冷却、读取用量与缓存统计,并在会话中途切换路由策略。详见 [Coding agents](#coding-agents)。 - **加密数据库备份** — 可选的 SQLite 数据库定期加密快照到本地路径或 HTTP 目标,全新启动时自动恢复(`FREEAPI_DB_BACKUP_*` 环境变量)。 - **模型切换时的上下文交接** — 可选。当会话故障转移到不同模型时,注入一条紧凑的系统消息,让新模型知道它正在继续现有任务。默认关闭;使用 `FREELLMAPI_CONTEXT_HANDOFF=on_model_switch` 启用。详见 [Context Handoff](#context-handoff)。 - **可在任何运行 Node 20+ 的环境运行** — Windows、macOS、Linux 服务器或小型 ARM SBC(包括 Raspberry Pi)。在 PM2 / systemd / 你偏好的任意进程管理器下空闲时约 40 MB RSS。 ## 尚未支持 功能范围有意保持精简。若某功能既不在此列表中,也不在下文提及,请默认尚未实现。 - **内容审核**(Moderation,`/v1/moderations`) - **`n > 1`**(单次请求多次补全,multiple completions per request) - **按用户计费 / 多租户认证** — 设计上为单用户 欢迎提交 PR 实现上述任一功能。详见 [贡献指南](#contributing)。 ## 快速开始 **一行命令**(需要 Docker — 会配置 `~/freellmapi`、生成加密密钥、拉取镜像并启动容器): ```bash curl -fsSL https://freellmapi.co/install.sh | bash ``` 想在 pipe 到 bash 之前先读一遍?[脚本在此](https://freellmapi.co/install.sh). 重复运行是安全的:你的 `.env`(及加密密钥)会被保留,容器会更新到 `:latest`。可用 `FREELLMAPI_DIR`、`PORT` 或 `HOST_BIND` 环境变量覆盖默认值。 在 Windows 上,最省事的方式是使用桌面端 **[Releases 中的 `.exe` 安装包](https://github.com/tashfeenahmed/freellmapi/releases/latest)**(见下文);Docker 步骤可在 WSL 或任意 bash shell 中执行。 **或使用 Docker Compose 手动部署。** 它会在 3001 端口同时运行 API 和仪表盘,并将 SQLite 数据持久化到命名卷中。 **前置条件:** Docker、Docker Compose、OpenSSL。 *在 macOS / Linux(Bash)上:* ```bash git clone https://github.com/tashfeenahmed/freellmapi.git cd freellmapi # Generate an encryption key for at-rest key storage ENCRYPTION_KEY="$(openssl rand -hex 32)" printf "ENCRYPTION_KEY=%s\nPORT=3001\n" "$ENCRYPTION_KEY" > .env docker compose up -d ``` *在 Windows(PowerShell)上:* ```powershell git clone https://github.com/tashfeenahmed/freellmapi.git cd freellmapi $Bytes = New-Object Byte[] 32 [Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($Bytes) $ENCRYPTION_KEY = -join ($Bytes | ForEach-Object { "{0:x2}" -f $_ }) "ENCRYPTION_KEY=$ENCRYPTION_KEY`nPORT=3001" | Out-File -Encoding utf8 .env docker compose up -d ``` 打开 http://localhost:3001,,在 **Keys** 页面添加你的 provider 密钥,按需调整 **Fallback Chain** 顺序,并从 **Keys** 页面顶部获取统一 API 密钥。将该统一密钥配置给你的 OpenAI SDK 即可。 全新安装自带免费目录快照(目前 82 个模型),并会从此自动保持更新。实时 feed 额外添加的内容均列于 [freellmapi.co/models](https://freellmapi.co/models.html). > **从另一台机器访问?** 默认情况下容器仅发布在 `127.0.0.1` 上,因此 `http://:3001` 无法从其他设备加载(页面会一直挂起)。若要在局域网暴露服务 — 例如在 `http://192.168.1.x:3001` 的 Raspberry Pi 上 — 请使用 `HOST_BIND=0.0.0.0` 启动: > > ```bash > HOST_BIND=0.0.0.0 docker compose up -d > ``` > > 仅在可信网络上这样做:该代理为单用户模式,仅靠统一 API 密钥保护。 ### 本地开发 **前置条件:** Node.js 20+、npm。 *在 macOS / Linux(Bash)上:* ```bash git clone https://github.com/tashfeenahmed/freellmapi.git cd freellmapi npm install ENCRYPTION_KEY="$(node -e 'console.log(require("crypto").randomBytes(32).toString("hex"))')" printf "ENCRYPTION_KEY=%s\nPORT=3001\n" "$ENCRYPTION_KEY" > .env npm run dev ``` *在 Windows(PowerShell)上:* ```powershell git clone https://github.com/tashfeenahmed/freellmapi.git cd freellmapi npm install $ENCRYPTION_KEY = node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" "ENCRYPTION_KEY=$ENCRYPTION_KEY`nPORT=3001" | Out-File -Encoding utf8 .env npm run dev ``` 启动需要 `ENCRYPTION_KEY`。当 `NODE_ENV` 不是 `production` 且未设置时,服务器会自动生成开发密钥并保存到 SQLite 数据库旁的 `.encryption-key` 文件(权限 0600),而非存入数据库。旧版将密钥保存在数据库中的安装会在首次启动时迁移到该文件。使用真实 provider 密钥时不要依赖此回退;请设置 `ENCRYPTION_KEY`。 请求分析数据默认保留 90 天或 100000 条请求记录,以先触达的限制为准进行清理。在 `.env` 中设置 `REQUEST_ANALYTICS_RETENTION_DAYS=0` 或 `REQUEST_ANALYTICS_MAX_ROWS=0` 可禁用相应保留限制。 打开 http://localhost:5173(Vite 开发 UI),在 **Keys** 页面添加你的 provider 密钥,按需调整 **Fallback Chain** 顺序,并从 **Keys** 页面顶部获取统一 API 密钥。将该统一密钥配置给你的 OpenAI SDK 即可。 ### 声明式启动配置 对于可重复的 Docker/服务器安装,FreeLLMAPI 可在每次启动时应用 JSON 配置。设置 `FREEAPI_CONFIG_PATH=/path/to/freellmapi.config.json`,或将相同 JSON 放入 `FREEAPI_CONFIG_JSON`。该配置具有幂等性:现有密钥、自定义 provider、模型编辑、fallback 行和路由设置会被更新而非重复创建。 ```json { "keys": [ { "platform": "groq", "key": "gsk_...", "label": "main" }, { "platform": "google", "key": "AIza...", "enabled": true } ], "customProviders": [ { "baseUrl": "http://host.docker.internal:11434/v1", "label": "Ollama", "models": [ { "model": "llama3.1:8b", "displayName": "Local Llama", "supportsTools": true } ] } ], "models": [ { "platform": "groq", "modelId": "llama-3.3-70b-versatile", "displayName": "Llama 3.3 70B", "supportsTools": true, "fallbackEnabled": true } ], "routing": { "strategy": "balanced" } } ``` > **从局域网另一台设备访问开发 UI?** 使用 `npm run dev:lan` — 它会将 `--host` 传递给 Vite,Vite 随后会打印一个 `Network: http://:5173` URL,可在手机或其他机器上打开。(此处 plain `npm run dev -- --host` *不*适用:根目录 `dev` 脚本是 `concurrently` 包装器,标志无法传递到 Vite。)API 调用经 Vite 开发代理转发,无需额外服务器配置。 若不使用 Docker 进行生产构建: ```bash npm run build node server/dist/index.js # server + dashboard both served on :3001 ``` ## Docker FreeLLMAPI 发布单一生产镜像,内含 Express 服务器和已构建的 React 仪表盘: ```bash docker pull ghcr.io/tashfeenahmed/freellmapi:latest # or pin a release, e.g. :v1.2.3 ``` 镜像为多架构(`linux/amd64` + `linux/arm64`,因此可在 Raspberry Pi 上运行)。已发布标签:`latest`(默认分支)、`v*.*.*`(git 发布标签)和 `sha-`。 推荐的安装方式是使用附带的 `docker-compose.yml`: ```bash docker compose up -d docker compose logs -f freellmapi ``` 默认情况下容器端口绑定到 `127.0.0.1`(仅 localhost)。若要从网络上另一台机器访问仪表盘/API,请使用 `HOST_BIND=0.0.0.0 docker compose up -d` 在所有接口上发布 — 仅限可信局域网,因为该代理为单用户模式。 SQLite 数据存储在 `freellmapi-data` 卷中的 `/app/server/data`。升级时请保留相同的 `.env` `ENCRYPTION_KEY` 和卷,因为 provider 密钥在静态存储时会被加密。若主机仅持久化特定目录,请设置 `FREEAPI_DB_PATH=/that/path/freellmapi.db`。 在具有临时磁盘的主机上,请配置加密备份目标: ```env FREEAPI_DB_BACKUP_PATH=/app/server/data/freellmapi.db.backup # or: FREEAPI_DB_BACKUP_URL=https://example.com/freellmapi.db.backup FREEAPI_DB_BACKUP_TOKEN=optional-bearer-token FREEAPI_DB_BACKUP_KEY=64-char-hex-backup-key FREEAPI_DB_BACKUP_INTERVAL_MS=300000 ``` 启动时若数据库文件缺失,FreeLLMAPI 会在迁移运行前恢复备份。服务器运行期间会定期上传新的加密备份。若省略 `FREEAPI_DB_BACKUP_KEY`,应用也会使用 `ENCRYPTION_KEY` 作为备份信封。 更多 Docker 操作与示例见 [docker/README.md](./docker/README.md)。 ## 桌面应用 原生菜单栏应用位于 [`desktop/`](./desktop):整个 router + dashboard 从系统托盘本地运行,带有展示实时请求统计的毛玻璃弹出窗口。 ![FreeLLMAPI 桌面应用](repo-assets/desktop.png) **[从 Releases 下载](https://github.com/tashfeenahmed/freellmapi/releases/latest)** — macOS 版 `.dmg` 与 Windows 版 `.exe` 安装包由 [`desktop-release`](.github/workflows/desktop-release.yml) 工作流构建并随每次发布附上。也可在本仓库几分钟内自行构建: > **从源码构建的 Windows 用户请注意:** 构建桌面应用需要为 Electron 编译原生 SQLite 模块。在运行 `npm install` 之前,你必须已安装 [Visual Studio Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/)(具体为「使用 C++ 的桌面开发」工作负载)和 Python。 ```bash npm install npm install --prefix desktop # install desktop dependencies npm run desktop:dist # macOS → desktop/dist-electron/FreeLLMAPI-…-arm64.dmg npm run desktop:dist:win # Windows → "desktop/dist-electron/FreeLLMAPI Setup ….exe" ``` > 本地构建的应用未经签名,因此 Windows SmartScreen 可能在首次运行时发出警告 > (「更多信息」→「仍要运行」);macOS 构建版启动时不会触发 Gatekeeper 提示。 > 完整说明请参阅 [desktop/README.md](./desktop/README.md)。 ### 凭据与数据存放位置 桌面应用**无需设置用户名或密码**。与服务端不同 (其仪表板需通过邮箱 + 密码账户访问),桌面版 会使用隐藏的本地账户自动登录仪表板,因此 你永远不会被要求输入凭据,也无需准备任何凭据。 你唯一需要的凭据是**统一 API 密钥**——即 你的 OpenAI/Anthropic 客户端所指向的 `freellmapi-…` 令牌。可通过以下方式获取: - 托盘弹出菜单——点击托盘图标,然后选择 **Copy Key**,或 - 仪表板 **Keys** 页面页眉(托盘 → **Open Dashboard**)。 你无需手动打开或编辑 `freeapi.db`。 你的设置和数据按操作系统存放在各自的文件夹中(复制该文件夹即可迁移到 另一台机器或容器中): | OS | 位置 | |----|----------| | Windows | `%APPDATA%\FreeLLMAPI\`(例如 `C:\Users\\AppData\Roaming\FreeLLMAPI\`) | | macOS | `~/Library/Application Support/FreeLLMAPI/` | | Linux | `~/.config/FreeLLMAPI/` | 该文件夹包含 `freeapi.db`(所有密钥、模型、设置,静态加密存储) 以及 `config.json`(窗口/主题/端口/LAN 偏好设置)。迁移安装时请一并复制两者。对于服务端(非桌面版)部署,等效状态位于 `.env` 文件及 `server/data/freeapi.db` 处的 SQLite 数据库(或 `FREEAPI_DB_PATH` 所指向的位置)。 ## 语言 仪表板与桌面托盘内置 6 种语言。UI 在首次加载时会自动检测你的 浏览器/系统语言,你可随时通过 **⋯** 菜单切换;所选语言会被记住。 | 语言 | 区域设置 | | --- | --- | | English | `en` | | 中文 (简体) | `zh-CN` | | Français | `fr` | | Español | `es` | | Português (Brasil) | `pt-BR` | | Italiano | `it` | 翻译文件位于 [`client/src/i18n/locales/`](./client/src/i18n/locales),以 扁平 JSON 文件形式存放。要添加新语言,请复制 `en.json`,翻译其中的值,并在 `client/src/i18n/I18nProvider.tsx`(以及 托盘字符串对应的 `desktop/src/i18n.ts`)中注册该区域设置 — 欢迎提交 PR。 ## 与 OB-1 及其他客户端配合使用 FreeLLMAPI 是 **[OB-1](https://github.com/Overbrilliant/ob-1)**: 的免费层级; OB-1 CLI 可以自动克隆、配置、启动、健康检查并将此代理接入 其设置。新 OB-1 用户可选择 **Start free**,在创建任何托管账户之前 即可使用可用的 OpenAI 兼容端点。 它也可单独使用。任何能将目标指向 OpenAI 兼容 基础 URL 的客户端均可使用 FreeLLMAPI: - **OB-1**:由 CLI 自动管理,包括匿名提供商。 - **LangChain、LlamaIndex、官方 OpenAI SDK**:将 `base_url` 设置为 `http://localhost:3001/v1`,并使用仪表板中的统一密钥。 - **本地 GPU 主机**:为 Ollama、 llama.cpp、LM Studio、vLLM 或内部网关添加自定义 OpenAI 兼容端点。 ### 编程代理(Coding agents) 以下每种配置方案本质相同,只是写在不同的配置文件中:基础 URL `http://localhost:3001/v1`、来自仪表板 Keys 页面的统一密钥,以及 一个模型(`auto` 可让路由器自动选择)。 | 代理 | 配置 | | --- | --- | | **Claude Code** | `ANTHROPIC_BASE_URL=http://localhost:3001` + `ANTHROPIC_AUTH_TOKEN=` — 完整步骤见 [Anthropic / Claude clients](#anthropic--claude-clients) | | **Codex CLI** | 在 `~/.codex/config.toml` 中添加提供商,将 `base_url = "http://localhost:3001/v1"` 及其 `env_key` 指向统一密钥 — 所需的 `/v1/responses` 接口已实现 | | **Cline / Roo Code** | 提供商类型为 "OpenAI Compatible",基础 URL `http://localhost:3001/v1`,统一密钥,模型 `auto`(或 `/v1/models` 中的任意 id) | | **Continue** | 在其配置中使用 `apiBase: http://localhost:3001/v1`;通过旧版 `/v1/completions` 接口也可实现行内自动补全 | | **Aider** | `OPENAI_API_BASE=http://localhost:3001/v1` + `OPENAI_API_KEY=`,然后 `aider --model openai/auto` | | **opencode** | 使用相同基础 URL 和密钥的 OpenAI 兼容提供商 | | **Cursor** | 在自定义 OpenAI 基础 URL 下粘贴统一密钥 — 但请注意,Cursor 会**从其服务器**验证并调用 API,因此你的路由器必须可从互联网访问(通过隧道或具有公网地址的主机),而不仅仅是 `localhost` | 除推理外,该路由器还是一个 **MCP 服务器**:代理可在会话中途对其进行自省 (可用模型及各模型支持的参数、提供商健康状态、用量与缓存统计、 路由策略)。对于 Claude Code: ```bash claude mcp add --transport http freellmapi http://localhost:3001/mcp \ --header "Authorization: Bearer freellmapi-your-unified-key" ``` 任何支持 Streamable HTTP 的 MCP 客户端用法相同:将其指向 `/mcp`,并以 统一密钥作为 Bearer 令牌。 FreeLLMAPI 从设计上即本地优先且面向单用户。你的提供商密钥保存在 SQLite 数据库中,静态加密存储,请求从你的机器发向你已启用的 上游提供商。 ## Premium(实时目录) 路由器会自动保持模型目录更新:每天两次从 [freellmapi.co](https://freellmapi.co) 拉取已签名的目录, 并将新模型、配额变更和提供商特殊修复应用到本地数据库。你自己的 启用/禁用选择与自定义提供商永远不会被修改,且每次 下载在应用前都会使用固定的 Ed25519 密钥进行验证。 目录分为两个订阅源: | | Free | Premium | |---|---|---| | 价格 | $0,永久免费 | **$19/年** 或 **$49 终身** | | 当前提供的模型(2026 年 7 月) | 82 | **161** | | 新增免费模型 | 每个模型发布后 30 天 | **发布当天** | | 配额变更与特殊修复 | 同样延迟 30 天 | 2-3 天内 | | 激活 | 无需操作 | 一个密钥,覆盖所有设备 | 差距并非假设。目前实时订阅源比 免费安装版**领先 79 个模型**,包括 Kimi K2.7 Code、GLM-5.2、MiniMax M3、Qwen3.5 397B,以及 支持 100 万 token 上下文窗口的 Nemotron 3 Ultra 550B。其中每个模型在发布后约一个月才会进入免费 安装版;而 Premium 路由器在发布当天就已提供 这些模型。可在 **[freellmapi.co/models](https://freellmapi.co/models.html)**. 精确查看你所缺失的内容。 在这个市场里,三十天已是漫长时间。当提供商推出强劲的 新免费模型、悄然收紧配额或破坏某种 wire format 时,实时订阅 路由器会在数天内完成修补,而免费安装版只能等待模型「到期」 后才能获得更新。如果你每天都使用路由器,Premium 的差别就在于你是亲身赶上 免费层浪潮,还是事后才读到相关消息。 **[Go live at freellmapi.co →](https://freellmapi.co/?utm_source=github&utm_medium=readme#pricing)** - $19/年或一次性 $49,终身有效。Stripe 结账;可随时取消,自助管理。 - 一个 `fla_` 密钥覆盖你运行的所有路由器:桌面版、家庭实验室、树莓派。 - 在仪表板的 **Premium** 下激活;可在 [freellmapi.co/manage](https://freellmapi.co/manage). 自助取消或管理账单。 - 路由器本身始终保持 MIT 许可且完全免费,永久如此。Premium 仅 提供实时订阅源,正是它资助了每日模型测试与目录 维护工作,使两个层级都能正常运转。 目录服务器永远不会看到你的提示词、补全内容或提供商密钥 — 无论哪种方式, 路由器都保持完全自托管。 ## 使用 API 任何兼容 OpenAI 的客户端均可使用(Anthropic / Claude 客户端也可以 — 见 [Anthropic / Claude 客户端](#anthropic--claude-clients))。示例: **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", # let the router pick; or specify e.g. "gemini-2.5-flash" messages=[{"role": "user", "content": "Summarise the fall of Rome in one sentence."}], ) print(resp.choices[0].message.content) print("Routed via:", 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"}] }' ``` **流式传输(Streaming)** ```python stream = client.chat.completions.create( model="auto", messages=[{"role": "user", "content": "Stream me a haiku about SQLite."}], stream=True, ) for chunk in stream: print(chunk.choices[0].delta.content or "", end="", flush=True) ``` **VS Code 幽灵文本自动补全(Continue)** FreeLLMAPI 为发送旧版 OpenAI prompt/suffix 请求的编辑器自动补全客户端暴露 `/v1/completions`。Continue 配置示例: ```yaml models: - name: FreeLLMAPI Autocomplete provider: openai model: auto apiBase: http://localhost:3001/v1 apiKey: freellmapi-your-unified-key useLegacyCompletionsEndpoint: true roles: - autocomplete ``` **工具调用(Tool calling)** 传入 OpenAI 风格的 `tools` 和 `tool_choice`;助手响应会通过代理原样往返,与 OpenAI API 完全一致。多步流程(助手 `tool_calls` → `tool` 角色后续跟进 → 最终答案)在路由器能访问的每个提供商上均可工作。 ```python tools = [{ "type": "function", "function": { "name": "get_weather", "description": "Get current weather for a city.", "parameters": { "type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"], }, }, }] # 1. Model asks for a tool call first = client.chat.completions.create( model="auto", messages=[{"role": "user", "content": "What's the weather in Karachi?"}], tools=tools, tool_choice="required", ) call = first.choices[0].message.tool_calls[0] # 2. You execute the tool, feed the result back final = client.chat.completions.create( model="auto", messages=[ {"role": "user", "content": "What's the weather in Karachi?"}, 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) ``` **Gemini Google Search 接地(grounding)** Google 的模型可以将回答建立在实时 Google 搜索结果之上。由于 OpenAI 线路格式无法表达该能力,请请求名为 `google_search` 的工具,Google 提供商会将其转换为 Gemini 的原生接地工具。它可以单独发送,也可以与常规函数工具一并发送。 ```python resp = client.chat.completions.create( model="gemini-2.5-flash", # pin a Google model so the request routes there messages=[{"role": "user", "content": "Who won the F1 race this weekend?"}], tools=[{"type": "function", "function": {"name": "google_search", "parameters": {}}}], ) print(resp.choices[0].message.content) ``` **视觉 / 图像输入(Vision / image input)** 使用标准 OpenAI `image_url` 内容块发送图像(base64 `data:` URL 或 `http(s)` URL)。当请求包含图像时,路由器会限制为仅使用**支持视觉的模型**,并忽略纯文本模型。支持视觉的模型在 Fallback Chain 页面上标有 **Vision** 徽章;当前集合包括 Gemini(2.5 / 3.x)、Llama 4 Scout/Maverick(Groq、NVIDIA)、GLM-4.6V Flash(Z.ai)、Nemotron Nano 12B VL(OpenRouter)以及 GitHub 的 GPT-4o / GPT-4.1。 ```python resp = client.chat.completions.create( model="auto", # auto-routes to a vision model messages=[{ "role": "user", "content": [ {"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "data:image/png;base64,<...>"}}, ], }], ) print(resp.choices[0].message.content) ``` 若在 Fallback Chain 中未启用任何支持视觉的模型,图像请求会返回明确的 `422`(`code: "no_vision_model"`),而不是静默丢弃图像。(`/v1/responses` 尚不支持图像输入 — 请使用 `/v1/chat/completions`。) 同样适用于 `stream=True` — 你会先收到 `delta.tool_calls` 块,随后是 `finish_reason: "tool_calls"` 结束。底层实现上,兼容 OpenAI 的提供商(Groq、Cerebras、Mistral、OpenRouter、GitHub Models、HuggingFace、Cloudflare、Cohere compat)会原样透传请求;Gemini 请求会被转换为 Google 的 `functionDeclarations` / `functionResponse` 形态,响应再转换回来。 每个响应都带有 `X-Routed-Via: /` 标头,便于查看实际为每次调用提供服务的提供商。若请求在提供商之间发生故障转移,你还会看到 `X-Fallback-Attempts: N`。 ### 嵌入(Embeddings) `/v1/embeddings` 兼容 OpenAI,与聊天路由有一处刻意差异:**故障转移绝不会跨模型切换。** 不同模型的向量处于不兼容的空间 — 静默切换模型会破坏基于该代理构建的任何向量存储。因此嵌入按**族(family)**(一个模型身份 + 维度)路由,故障转移仅在提供同一族的提供商之间进行。 ```python resp = client.embeddings.create( model="auto", # default family; or a family name like "bge-m3" input=["the quick brown fox", "pack my box with five dozen liquor jugs"], ) print(len(resp.data), "vectors of", len(resp.data[0].embedding), "dims") ``` ```bash curl http://localhost:3001/v1/embeddings \ -H "Authorization: Bearer freellmapi-your-unified-key" \ -H "Content-Type: application/json" \ -d '{"model": "auto", "input": "hello world"}' ``` `model` 接受 `auto`(配置的默认族)、族名称或提供商特定的模型 id(会解析到其所属族)。可用族: | 族(`model`) | 维度(Dims) | 提供商(故障转移顺序) | | --- | --- | --- | | `gemini-embedding-001` *(默认)* | 3072 | Google | | `text-embedding-3-large` | 3072 | GitHub Models | | `text-embedding-3-small` | 1536 | GitHub Models | | `embed-v4.0` | 1536 | Cohere | | `bge-m3` | 1024 | Cloudflare → Hugging Face | | `qwen3-embedding-0.6b` | 1024 | Cloudflare | | `nv-embedqa-e5-v5` | 1024 | NVIDIA | | `llama-nemotron-embed-1b-v2` | 2048 | NVIDIA | | `llama-nemotron-embed-vl-1b-v2` | 2048 | NVIDIA → OpenRouter | | `embeddinggemma-300m` | 768 | Cloudflare | 默认族、各提供商开关及优先级位于控制台的 **Models → Embeddings** 页面。为给定向量存储选定一个族后请坚持使用 — 这正是族模型的设计目的。 ### Anthropic / Claude 客户端 FreeLLMAPI 也支持 Anthropic 的 Messages API,因此任何为 Claude 构建的工具 — 包括 **Claude Code** 和官方 Anthropic SDK — 均可对接你的免费资源池。将客户端指向你服务器的 **origin**(Anthropic 客户端会自行追加 `/v1/messages`),并使用统一密钥进行认证。`x-api-key` 和 `Authorization: Bearer` 均可接受。 ```bash curl http://localhost:3001/v1/messages \ -H "x-api-key: freellmapi-your-unified-key" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-5", "max_tokens": 256, "messages": [{"role": "user", "content": "hi"}] }' ``` Claude 模型名称在 **Keys → Anthropic** 选项卡上映射到你的免费资源池:每个族(`default`、`opus`、`sonnet`、`haiku`)路由到 `auto`(路由器选取免费模型)或你固定的模型。`POST /v1/messages/count_tokens` 以及内容协商的 `GET /v1/models`(发送 `anthropic-version` 时为 Anthropic 形态)也已实现。流式传输、系统提示、工具使用与图像输入均通过同一路由器转换,与 OpenAI 端点一致。 **Claude Code** — 将其指向你的服务器并启动: *在 macOS / Linux(Bash)上:* ```bash export ANTHROPIC_BASE_URL=http://localhost:3001 export ANTHROPIC_AUTH_TOKEN=freellmapi-your-unified-key # NOT ANTHROPIC_API_KEY claude ``` *在 Windows(PowerShell)上:* ```powershell $env:ANTHROPIC_BASE_URL="http://localhost:3001" $env:ANTHROPIC_AUTH_TOKEN="freellmapi-your-unified-key" claude ``` > 使用 `ANTHROPIC_AUTH_TOKEN`(以 Bearer token 形式发送),**不要**使用 `ANTHROPIC_API_KEY` — Claude Code 会将已设置的 `ANTHROPIC_API_KEY` 视为冲突的第一方凭据并拒绝启动。 ## 截图 ### 密钥 管理提供商凭据,并获取应用连接时使用的统一 API 密钥。每个密钥会显示状态指示点及最近一次健康检查时间。 ![Keys 页面](repo-assets/keys.png) ### Playground 通过路由器发送聊天补全请求,查看由哪个提供商提供服务,模型 ID 和延迟会直接显示在消息上。 ![Playground 页面](repo-assets/playground.png) ### 分析 24 小时 / 7 天 / 30 天 / 90 天时间窗口内的请求量、成功率、输入/输出 token 数、平均延迟,以及按提供商的细分数据。 ![Analytics 页面](repo-assets/analytics.png) ## 工作原理 ``` ┌──────────────────┐ Bearer freellmapi-… ┌─────────────────────────┐ │ OpenAI SDK / │ ──────────────────────▶ │ Express proxy (:3001) │ │ curl / any │ ◀────────────────────── │ /v1/chat/completions │ │ OpenAI client │ streamed tokens └────────────┬────────────┘ └──────────────────┘ │ ▼ ┌────────────────────────────────────────────────┐ │ Router │ │ 1. Pick highest-priority model that │ │ (a) has a healthy key and │ │ (b) is under all its rate limits. │ │ 2. Decrypt key, call provider SDK. │ │ 3. On 429/5xx → cooldown + retry next model. │ └────────────────────────────────────────────────┘ │ ┌──────────────┬────────────┬──────────┴─────────┬─────────────┬──────────┐ ▼ ▼ ▼ ▼ ▼ ▼ Google Groq Cerebras OpenRouter HF …22 more ``` - **Router**(`server/src/services/router.ts`)— 按请求选择模型。 - **Rate-limit ledger**(速率限制账本,`server/src/services/ratelimit.ts`)— 由 SQLite 支撑的内存中 RPM/RPD/TPM/TPD 计数器,遇到 429 时进入冷却期。 - **Provider adapters**(提供商适配器,`server/src/providers/*.ts`)— 每个提供商一个文件,实现 `Provider` 基类:`chatCompletion()` 和 `streamChatCompletion()`。 - **Health service**(健康检查服务,`server/src/services/health.ts`)— 定期探测以保持密钥状态最新。 - **Dashboard**(仪表板,`client/`)— 基于 React + Vite + shadcn/ui 的管理界面。 - **Storage**(存储)— SQLite(`better-sqlite3`),对密钥采用 AES-256-GCM 信封加密。 ## 上下文交接(Context Handoff) 当 FreeLLMAPI 在对话中途切换到不同模型(配额、速率限制、冷却期)时,新模型并不知道自己在接手他人的任务。**Context handoff**(上下文交接)会在出站请求中添加一条紧凑的 `system` 消息,准确告知新模型这一情况: ``` FreeLLMAPI context handoff: You are taking over an ongoing conversation from another model (groq:llama-3 → google:gemini-flash). Continue the user's task using the conversation context already provided in this request. Do not restart the task, re-ask already answered setup questions, or discard prior tool results. Respect the user's latest message as the highest-priority instruction. Recent session summary: User: … Assistant: … ``` **在 `.env` 中启用:** ```env FREELLMAPI_CONTEXT_HANDOFF=on_model_switch ``` **工作原理:** - 每个会话的消息存储在内存中(TTL:3 小时)。 - 仅当给定会话键所选模型发生变化时才注入。 - 首次请求、同一模型继续对话,或已存在交接消息时不会注入。 - 会话键:若存在则使用 `X-Session-Id` 请求头,否则使用第一条用户消息的 SHA-1(与会话粘性相同)。 - 存储仅在内存中,不会写入磁盘或记录日志。 > **重要提示:** Context Handoff 可改善通过 FreeLLMAPI 路由的对话连续性。它无法恢复提供商内部的隐藏状态,或从未发送到代理的消息。 ## 局限性 叠加免费套餐存在真实的权衡。请诚实地面对它们: - **没有前沿模型。** 免费套餐目录上限大约在 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 或认证错误,直到目录更新送达——live-feed 安装可在数天内获得修复,免费安装走 30 天滞后通道。重新种子脚本位于 `server/src/scripts/`。 - **按定义没有 SLA。** 若需要可靠性,请使用有合同保障的付费提供商。 - **本地优先(Local-first)。** 没有多租户认证。仅供个人运行;不要将其暴露到公网。 ## 贡献 非常欢迎贡献者!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解开发循环、PR 期望,以及 AI/LLM 辅助贡献的政策(简而言之:欢迎,质量标准与其他 PR 相同)。适合新手的 PR: - **添加提供商** — 复制 `server/src/providers/openai-compat.ts` 作为模板,接入 `server/src/providers/index.ts`,在 `server/src/db/index.ts` 中种子化其模型,在 `server/src/__tests__/providers/` 中添加测试。 - **添加端点** — moderations 及其他 OpenAI 兼容接口。提供商基类可扩展新方法;适配器声明其支持的接口。 - **改进路由器** — 成本感知路由(最便宜-健康-最快权衡)、更好的延迟加权优先级、区域固定。 - **仪表板优化** — Analytics 页面图表、密钥轮换 UX、从 `.env` 批量导入密钥。 - **文档** — 更多示例、Go/Rust 等客户端库代码片段、Docker 或 Fly 部署方案。 **开发循环:** ```bash npm install npm run dev # server on :3001, dashboard on :5173, both with HMR npm test # server vitest; also runs client tests if the workspace adds them npm run build # compile server and dashboard ``` PR 应包含测试、保持现有测试套件通过,并符合仓库中已有的 `.editorconfig` / tsconfig 默认配置。完整贡献者工作流请参阅 [CONTRIBUTING.md](./CONTRIBUTING.md)。 ### 数据库迁移 在本地开发中,通过以下方式应用待处理的迁移: ```bash NODE_ENV=development npm run db:migration:up ``` 完整迁移 CLI 及工作流请参阅 [CONTRIBUTING.md](./CONTRIBUTING.md)。 ### 贡献者 @moaaz12-web @lukasulc @VinhPhamAI @deadc @zhangyu1324 @chongjiazhen @vjsai @long2ice @sadesguy @hodlmybeer69-bit @phoenixikkifullstack @jtbrennan-git @praveenkumarpranjal @nordbyte @mybropro @danscMax @jhash @JammyJames1234 @coffcoe @Sumit4codes @meliani @thedavidweng @bharvey42 @yuvrxj-afk @Tushar49 @nicyoong @Aldo-f @Tazrif-Raim @m1nuzz @LoneRifle @ita333 @barbotkonv @Naster17 @StealthTensor @EmranAhmed @itsfuad @RobinHoodO @hmm183 @duemilionidieuro-bot @hjhhoni @immanuelsavio @Slyker @wells1013 @evgkrsk @aaronjmars @Robs87 @dashitongzhi @QingJ01 @3215 @saifulaiub123 @PietFourie @mhmdkrmabd @DemeulemeesterxMaxime @HoodBlah @SeanPedersen @andersmmg @chirag127 @jasnoorgill @allababbot @johan-droid @redenfire @itzpingcat @kairwang01 @gongjurenzhangwei @jsonring @1029734570 @86TheCactus @AmiroKD @ecryptomillionaire-dev @4riful @cagedbird043 @fix2015 @iisyw @xsfhacg @noobix @nandukmelath @coffcoe ## 服务条款(ToS)审查 针对自托管、单用户、个人使用场景,已根据各服务商的服务条款(ToS)于 2026 年 5 月重新审查。摘要如下: | Provider | Verdict | Notes | |---|---|---| | Google Gemini | ⚠️ 谨慎 | 2026 年 3 月 ToS 将适用范围收窄为*"用于专业或商业目的,不得用于消费者用途"*——自托管开发者代理仍可合理解释,但该条款为新增内容。 | | Groq | ✅ 可能合规 | GroqCloud 服务协议允许客户应用(Customer Application)集成。 | | Cerebras | ✅ 可能合规 | 允许使用;明确禁止出售/转让 API 密钥。 | | Mistral | ✅ 可能合规 | API 允许用于个人/内部商业用途。 | | OpenRouter | ✅ 可能合规 | 2026 年 4 月 ToS 强化了禁止转售/禁止竞争服务的条款;私有单用户代理仍无问题。 | | Cloudflare Workers AI | ⚠️ 存疑 | 无反代理条款;适用一般自助订阅协议(Self-Serve Subscription Agreement)。 | | NVIDIA NIM | ⚠️ 谨慎 | 试用 ToS §1.2 / §1.4:*"仅限评估,不得用于生产环境。"* 免费访问为持续的 40 RPM 速率限制(2025 年积分体系已停用),但仅限评估的适用范围仍然有效。 | | GitHub Models | ⚠️ 谨慎 | 免费层明确限定为*"实验"*与*"原型开发"。* | | Cohere | ❌ 避免使用 | 条款 §14 仍禁止*"个人、家庭或家庭用途。"* | | Zhipu (open.bigmodel.cn) | ✅ 可能合规 | 平台文档中仍保留个人/非商业研究豁免条款。 | | Z.ai (api.z.ai) | ⚠️ 谨慎 | 新增条目——新加坡实体(与智谱中国不同)。§III.3(l) 反流量重定向条款可能被合理解读为针对代理;无明确个人用途豁免。 | | Ollama Cloud | ✅ 可能合规 | 新增条目——免费方案允许访问云模型(1 个并发、5 小时会话上限)。未发现反代理/反转售条款。*(集成追踪于 #14。)* | | OVH AI Endpoints | ✅ 可能合规 | 新增条目(2026 年 6 月)——官方文档支持匿名访问(每 IP 每模型 2 次/分钟)。OVH 保留引入 token/用量上限的权利。 | | AI Horde | ✅ 可能合规 | 新增条目(2026 年 6 月)——由 Haidra 非营利组织运营的免费社区公共平台;官方支持匿名使用(密钥 `0000000000`,队列优先级最低)。无反代理/反转售条款。OpenAI 代理为试点,可能受用量限制。*(集成 #345。)* | 让大多数服务商满意的经验法则:**每个服务商仅使用一个账号**、**不转售**、**不与他人共享你的端点**、**不要将免费层当作付费生产后端猛刷**。本内容仅供参考,不构成法律建议——请阅读各服务商的 ToS 并自行判断。 自 2026 年 4 月审查起已移除:Hugging Face、Moonshot 和 MiniMax 直连集成已从目录中删除(HF——工具调用格式问题;Moonshot——已转为仅付费;MiniMax——已被 OpenRouter `minimax/minimax-m2.5:free` 路由取代)。 ## 免责声明 **本项目仅供个人实验与学习,不得用于生产环境。** 免费层存在是为了让开发者在其上构建原型;它们并非稳定、受支持的推理基础设施,也不应被当作此类基础设施使用。若你在 FreeLLMAPI 之上构建真实产品,请在上线前替换为付费 API。你与各上游服务商的关系受你在创建账号时所接受条款的约束——流量经本项目代理时这些条款仍然适用,你有责任遵守它们。 ## License [MIT](./LICENSE)