LLMIO 是一个基于 Go 的 LLM 负载均衡网关,为你的 LLM 客户端 ( claude code / codex / gemini cli / cherry studio / open webui ) 提供统一的 REST API、权重调度、日志记录与现代化管理界面,帮助你在一个服务中整合 OpenAI、Anthropic、Gemini 等不同模型能力。
- 统一 API:兼容 OpenAI Chat Completions、OpenAI Responses 、Gemini Native 与 Anthropic Messages 格式,支持透传流式与非流式响应。
- 权重调度:
balancers/提供两种调度策略(根据权重大小随机/根据权重高低优先),可按工具调用、结构化输出、多模态能力做智能分发。 - 可视化管理后台:Web UI(React + TypeScript + Tailwind + Vite)覆盖提供商、模型、关联、日志与指标。
- 速率与失败处理:内建速率限制兜底与提供商连通性检测,保证故障隔离。
- 本地持久化:通过纯 Go 实现的 SQLite (
db/llmio.db) 保存配置和调用记录,开箱即用。
services:
llmio:
image: atopos31/llmio:latest
ports:
- 7070:7070
volumes:
- ./db:/app/db
environment:
- GIN_MODE=release
- TOKEN=<YOUR_TOKEN>
- TZ=Asia/Shanghaidocker compose up -ddocker run -d \
--name llmio \
-p 7070:7070 \
-v $(pwd)/db:/app/db \
-e GIN_MODE=release \
-e TOKEN=<YOUR_TOKEN> \
-e TZ=Asia/Shanghai \
atopos31/llmio:latest前往 releases 下载对应操作系统及cpu架构的压缩包(版本大于0.5.13),这里以 linux amd64 为例。
wget https://github.com/atopos31/llmio/releases/download/v0.5.13/llmio_0.5.13_linux_amd64.tar.gz解压
tar -xzf ./llmio_0.5.13_linux_amd64.tar.gz启动
GIN_MODE=release TOKEN=<YOUR_TOKEN> ./llmio运行后会自动在当前目录下创建 ./db/llmio.db 作为 sqlite 持久化数据文件。
| 变量 | 说明 | 默认值 | 备注 |
|---|---|---|---|
TOKEN |
控制台登录与 /openai /anthropic /gemini /v1 等 API 鉴权凭证 |
无 | 公网访问必填 |
GIN_MODE |
控制 Gin 运行模式 | debug |
线上请设置为 release 获得最佳性能 |
LLMIO_SERVER_PORT |
服务监听端口 | 7070 |
服务监听端口 |
TZ |
时区设置,用于日志与任务调度 | 宿主机默认值 | 建议在容器环境中显式指定,如 Asia/Shanghai |
DB_VACUUM |
启动时执行 SQLite VACUUM 回收空间 | 不执行 | 设置为 true 启用,用于优化数据库存储 |
克隆项目
git clone https://github.com/atopos31/llmio.git
cd llmio编译前端(需要 pnpm 环境)
make webui运行后端(需要 go 版本 > 1.25.0)
TOKEN=<YOUR_TOKEN> make run访问入口webui:http://localhost:7070/
LLMIO 提供多供应商兼容的 REST API,支持以下端点:
| 供应商 | 端点路径 | 方法 | 功能 | 认证方式 |
|---|---|---|---|---|
| OpenAI | /openai/v1/models |
GET | 获取可用模型列表 | Bearer Token |
| OpenAI | /openai/v1/chat/completions |
POST | 创建聊天完成 | Bearer Token |
| OpenAI | /openai/v1/responses |
POST | 创建响应 | Bearer Token |
| Anthropic | /anthropic/v1/models |
GET | 获取可用模型列表 | x-api-key |
| Anthropic | /anthropic/v1/messages |
POST | 创建消息 | x-api-key |
| Anthropic | /anthropic/v1/messages/count_tokens |
POST | 计算Token数量 | x-api-key |
| Gemini | /gemini/v1beta/models |
GET | 获取可用模型列表 | x-goog-api-key |
| Gemini | /gemini/v1beta/models/{model}:generateContent |
POST | 生成内容 | x-goog-api-key |
| Gemini | /gemini/v1beta/models/{model}:streamGenerateContent |
POST | 流式生成内容 | x-goog-api-key |
| 通用 | /v1/models |
GET | 获取模型列表(兼容) | Bearer Token |
| 通用 | /v1/chat/completions |
POST | 创建聊天完成(兼容) | Bearer Token |
| 通用 | /v1/responses |
POST | 创建响应(兼容) | Bearer Token |
| 通用 | /v1/messages |
POST | 创建消息(兼容) | x-api-key |
| 通用 | /v1/messages/count_tokens |
POST | 计算Token数量(兼容) | x-api-key |
LLMIO 根据端点类型使用不同的认证方式:
适用于:/openai/v1/* 和 /v1/* 中的 OpenAI 兼容端点
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:7070/openai/v1/models适用于:/anthropic/v1/* 和 /v1/* 中的 Anthropic 兼容端点
curl -H "x-api-key: YOUR_TOKEN" http://localhost:7070/anthropic/v1/messages适用于:/gemini/v1beta/* 中的 Gemini 原生端点
curl -H "x-goog-api-key: YOUR_TOKEN" http://localhost:7070/gemini/v1beta/models对于cc或者codex, 使用如下环境变量接入鉴权
export OPENAI_API_KEY=<YOUR_TOKEN>
export ANTHROPIC_API_KEY=<YOUR_TOKEN>
export GEMINI_API_KEY=<YOUR_TOKEN>注意:
/v1/*路径为兼容性保留,建议使用新的供应商特定路径。
.
├─ main.go # HTTP 服务入口与路由注册
├─ handler/ # REST 接口层
├─ service/ # 业务逻辑与负载均衡调用
├─ middleware/ # 鉴权、速率限制与流式响应中间件
├─ providers/ # 多模型供应商适配实现
├─ balancers/ # 权重与调度策略
├─ models/ # GORM 实体定义与数据库初始化
├─ common/ # 通用工具与响应辅助方法
├─ webui/ # React + TypeScript 管理前端
└─ docs/ # 运维与使用说明
本项目基于 MIT License 发布。