Skip to content

Latest commit

 

History

268 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Metapi Go

Metapi Go

中转站的中转站 — 将分散的 AI API 站点聚合为一个统一网关

把你在各处注册的 New API / One API / OneHub / Sub2API 等站点,
汇聚成 一个 API Key、一个入口,自动发现模型、智能路由、成本最优。

中文 · English

CI Release Docker Go License


界面预览

仪表盘
仪表盘 — 余额分布、签到与定时任务健康
模型市场
模型市场 — 跨站模型覆盖、品牌与实测指标
智能路由
智能路由 — 多通道概率分配、成本优先选路
账号管理
账号管理 — 多站点多账号、健康状态追踪
站点管理
站点管理 — 上游站点配置与状态一览
使用日志
使用日志 — 代理请求日志与成本明细
模型操练场
模型操练场 — 在线对比不同通道输出
系统设置
系统设置 — 全局参数、主题与安全配置

介绍

现在 AI 生态里有越来越多基于 New API / One API 系列的聚合中转站,要管理多个站点的余额、模型列表和 API 密钥,往往既分散又费时。

Metapi 作为这些中转站之上的元聚合层(Meta-Aggregation Layer),把多个站点统一到 一个入口(可按项目配置多个下游 API Key)——下游所有工具(Cursor、Claude Code、Codex、Open WebUI 等)即可无感接入全部模型。当前支持的上游范围:

  • 聚合面板:New API、One API、OneHub、DoneHub、Veloera、AnyRouter、Sub2API
  • 通用兼容接口:OpenAI / Claude / Gemini 兼容端点,以及 cliproxyapi / CPA
  • OAuth 连接:Codex、Claude、Gemini CLI、Antigravity
痛点 Metapi 怎么解决
每个站点一个 Key,下游工具配置一堆 统一代理入口 + 多下游 Key 策略,模型自动聚合到 /v1/*
不知道哪个站点用某个模型最便宜 智能路由自动按成本、余额、使用率选最优通道
某个站点挂了,手动切换好麻烦 自动故障转移,一个通道失败自动冷却并切到下一个
余额分散在各处,不知道还剩多少 集中看板一目了然,余额不足自动告警
每天得去各站签到领额度 自动签到定时执行,奖励自动追踪
不知道哪个站有什么模型 自动模型发现,上游新增模型零配置出现在你的模型列表里

Go 版有什么不同

这是 Metapi(TypeScript 版) 的 Go 重写,客户端可见行为保持兼容,运行时更轻:

Node.js(原版) Go(本版)
内存占用 ~85 MB ~20 MB
Docker 镜像 ~250 MB ~15 MB
启动时间 5-10 秒 即时
部署方式 需要 Node 运行时 单个二进制文件

快速开始

Docker(推荐)

docker run -d --name metapi \
  -p 4000:4000 \
  -e AUTH_TOKEN=your-admin-token \
  -e PROXY_TOKEN=your-proxy-sk-token \
  -e ACCOUNT_CREDENTIAL_SECRET=$(openssl rand -hex 32) \
  -e TZ=Asia/Shanghai \
  -v metapi_data:/app/data \
  --restart unless-stopped \
  ghcr.io/deliciousbuding/metapi-go:latest

启动后访问 http://localhost:4000,用 AUTH_TOKEN 登录即可。

Important

请务必修改 AUTH_TOKENPROXY_TOKEN,不要使用默认值。 ACCOUNT_CREDENTIAL_SECRET 用于加密存储的账号凭据,建议生成独立的 32+ 字节随机串(不设置时会回退为 AUTH_TOKEN,过短会直接启动失败)。 数据建议用命名卷(如上 metapi_data)存放,容器以非 root 用户(uid 1001)运行,命名卷会自动继承属主、无需额外授权;若改用 ./data:/app/data 这类 bind mount,需先在宿主机执行 chown -R 1001:1001 ./data。 生产环境建议把镜像固定到具体版本标签(如 ghcr.io/deliciousbuding/metapi-go:v0.16.2),而不是 latest(升级步骤见 迁移指南)。

Docker Compose

mkdir metapi && cd metapi

cat > docker-compose.yml << 'EOF'
services:
  metapi:
    image: ghcr.io/deliciousbuding/metapi-go:latest
    ports:
      - "4000:4000"
    volumes:
      - metapi_data:/app/data
    environment:
      AUTH_TOKEN: ${AUTH_TOKEN:?AUTH_TOKEN is required}
      PROXY_TOKEN: ${PROXY_TOKEN:?PROXY_TOKEN is required}
      ACCOUNT_CREDENTIAL_SECRET: ${ACCOUNT_CREDENTIAL_SECRET:-}
      CHECKIN_CRON: "0 8 * * *"
      BALANCE_REFRESH_CRON: "0 * * * *"
      PORT: ${PORT:-4000}
      DATA_DIR: /app/data
      TZ: ${TZ:-Asia/Shanghai}
    restart: unless-stopped

volumes:
  metapi_data:
EOF

export AUTH_TOKEN=your-admin-token
export PROXY_TOKEN=your-proxy-sk-token
export ACCOUNT_CREDENTIAL_SECRET=$(openssl rand -hex 32)
docker compose up -d

如需从旧的 TypeScript 版迁移数据,改用 bind mount 指向原 data 目录,并先在宿主机执行 chown -R 1001:1001 ./data(详见 迁移指南)。

Compose、反向代理、PostgreSQL 与升级细节见 部署指南;从安装到发出第一个代理请求的完整 walkthrough 见 快速上手

从源码

git clone https://github.com/DeliciousBuding/metapi-go.git
cd metapi-go
go build -o metapi ./cmd/server
AUTH_TOKEN=your-admin-token PROXY_TOKEN=your-proxy-sk-token ./metapi

Windows 本地运行且未设置 HOST 时,默认仅监听 127.0.0.1,避免反复触发入站防火墙提示;需要局域网访问时显式设置 HOST=0.0.0.0


第一个代理请求

登录后在「下游密钥」里创建一把 Key(或直接使用 PROXY_TOKEN),然后像调用 OpenAI 一样调用 Metapi:

curl http://localhost:4000/v1/chat/completions \
  -H "Authorization: Bearer $PROXY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-3-5-sonnet",
    "messages": [{ "role": "user", "content": "hello" }]
  }'

Metapi 会自动在所有上游站点中选择成本最优、状态健康的通道;失败时自动冷却该通道并重试下一个。Claude 原生格式(/v1/messages)、Responses、Embeddings、Images、/v1/models/v1/files 同样支持,完整端点清单见 HTTP API,客户端接入(Cursor / Claude Code / Codex / Open WebUI)见 客户端接入


核心功能

统一代理网关

兼容 OpenAIClaude 下游格式,对接所有主流客户端。支持 Chat Completions、Responses、Messages、Completions(Legacy)、Embeddings、Images、Models,以及标准 /v1/files 文件接口。完整的 SSE 流式传输,自动格式转换(OpenAI ⇄ Claude)。

智能路由引擎

  • 自动发现所有上游站点的可用模型,零配置生成路由表
  • 四级成本信号:实测成本 → 账号配置成本 → 目录参考价(models.dev)→ 默认兜底
  • 多通道概率分摊,基于成本、余额、使用率加权分配
  • 失败通道自动冷却与避让,请求失败自动重试切到其他可用通道
  • 运行时熔断器 + half-open 探测,恢复中的通道可受控重新进入候选集

多平台聚合管理

平台 适配器 说明
New API new-api 新一代大模型网关
One API one-api 经典 OpenAI 接口聚合
OneHub onehub One API 增强分支
DoneHub done-hub OneHub 增强分支
Veloera veloera API 网关平台
AnyRouter anyrouter 通用路由平台
Sub2API sub2api 订阅制中转平台
OpenAI / Claude / Gemini openai / claude / gemini 标准兼容接口

16 个适配器,覆盖模型枚举、余额查询、Token 管理、代理接入等通用能力;登录、签到、用户信息等能力按平台而异。

账号与 Token 管理

多站点多账号,每个账号可持有多个 API Token。healthy / unhealthy / degraded / disabled 四级状态机;凭证加密存储在本地数据库中;Token 过期自动重新登录获取新凭证;禁用站点自动级联禁用所有关联账号。

模型广场与操练场

跨站模型覆盖总览:哪些模型可用、多少账号覆盖、各站定价对比;延迟与成功率实测指标;交互式模型操练场可强制指定通道对比输出,保留真实状态与延迟。

自动签到与余额

Cron 定时签到(默认每日 08:00),智能解析奖励金额,失败自动通知,并发锁防重复;定时余额刷新(默认每小时),收入追踪与每日/累计消费趋势分析。

告警通知

九种通知渠道:Webhook、Bark、Server酱、Telegram Bot、SMTP 邮件、飞书(HMAC 加签)、钉钉(HMAC 加签)、企业微信、ntfy。告警场景覆盖余额不足、站点/账号异常、签到失败、代理请求失败、Token 过期与每日摘要,可按类型逐项静音,冷却机制防重复通知。

运营与审计

管理操作审计日志(写入留痕);实时 QPS / 成功率运维面板(WebSocket 推流、断线自动重连);批量模型验证、模型倍率总览与行内编辑、模型重定向映射、账号/站点标签;仪表盘快照 PNG 导出。

轻量部署

单 Docker 容器 + 本地数据目录即可运行,也可外接 PostgreSQL;SQLite 与 PostgreSQL 双 dialect,启动自动执行幂等 schema 升级。Go 单二进制,~15 MB 镜像,启动即时。数据完整导入导出,迁移无忧。


配置

只需两个必填环境变量即可启动:

变量 说明
AUTH_TOKEN 管理后台登录令牌
PROXY_TOKEN 下游客户端调用 /v1/* 的 Key

其余常用项:

变量 默认值 说明
PORT 4000 监听端口
HOST 平台相关 Windows 默认 127.0.0.1,其他 0.0.0.0;容器固定 0.0.0.0
DATABASE_URL PostgreSQL 连接串;留空使用 SQLite
CHECKIN_CRON 0 8 * * * 签到时间
BALANCE_REFRESH_CRON 0 * * * * 余额刷新频率

完整环境变量清单(含 PostgreSQL 池预设、代理限额、CORS、可信代理 CIDR 等)见 配置参考.env.example

运维健康检查

  • GET /health:liveness,只确认 HTTP 进程存活
  • GET /ready:readiness,检查数据库;不可用或关停中返回 503
  • Docker 默认执行 metapi healthcheck,等价探测 http://127.0.0.1:${PORT}/ready

从 TypeScript 版迁移

数据库 Schema 完全一致,Go 版启动时自动执行幂等迁移:停止旧服务,用同样的环境变量启动 Go 版即可。Go 镜像以非 root 用户(uid 1001)运行,若数据目录是 bind mount(如 ./data:/app/data)且由旧版以 root 写入,需先在宿主机执行 chown -R 1001:1001 ./data(命名卷则无需处理)。迁移路径按旧版数据库分三种:SQLite / PostgreSQL 库停止旧服务后由 Go 直接接管(首次启动自动补列);MySQL 库需先在 TypeScript 版管理界面「设置 → 数据库」用其内置迁移功能迁到 SQLite 或 PostgreSQL,再按前两种方式接管。三种场景的完整步骤、metapi-migrate 工具参考、镜像版本锁定与回滚方案见 迁移指南


文档导航

文档 用途
docs/getting-started.md 快速上手:安装到第一个代理请求
docs/deployment.md 部署 / 反向代理 / PostgreSQL
docs/configuration.md 环境变量完整参考
docs/client-integration.md 客户端接入(Cursor / Claude Code / Codex / Open WebUI)
docs/api.md HTTP API 端点清单
docs/migration.md TS → Go 迁移(SQLite / PG / MySQL)
docs/faq.md 常见问题
docs/architecture.md 包结构与请求路径(开发者)
docs/README.md 文档地图(含维护者文档索引)
CHANGELOG.md 版本变更

开发

后端(Go)

make build    # 构建
make test     # 运行全部测试(含 -race)
make vet      # go vet
make lint     # golangci-lint
make vuln     # govulncheck 漏洞扫描

前端(web/,Bun)

cd web
bun install
bun run dev         # 本地开发(/api /v1 代理到后端 :4000)
bun run typecheck   # tsgo 类型检查
bun run test        # vitest 全量
bun run build       # rsbuild 构建(产物经 go:embed 打包进 Go 二进制)

贡献流程(分支模型、PR 门禁)见 CONTRIBUTING.md


贡献与安全


相关项目


隐私说明

Metapi 完全自托管:所有数据(账号、令牌、路由、日志)存储在你自己的部署环境中,不向任何第三方上报;代理请求仅在你的服务器与上游站点之间直连传输。


许可证

MIT

About

MetAPI Go rewrite — meta-layer management and unified proxy for AI API aggregation platforms

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages