Skip to content

TokenDanceLab/metapi-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MetAPI Go

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

MetAPI 的 Go 语言重写版。单二进制部署,与原 TypeScript 版功能对等。

中文 | English

CI Go Docker License


介绍

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

MetAPI 作为中转站之上的元聚合层,把多个站点统一到一个入口,下游所有工具(Cursor、Claude Code、Codex、Open WebUI 等)即可无感接入全部模型。当前支持的上游范围不止传统聚合面板,还包括:

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

Go 版有什么不同

和原 TypeScript 版功能完全一致,换个运行时:

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-token \
  -e TZ=Asia/Shanghai \
  -v ./data:/app/data \
  --restart unless-stopped \
  ghcr.io/tokendancelab/metapi-go:latest

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

请务必修改 AUTH_TOKENPROXY_TOKEN,不要使用默认值。数据存储在 ./data 目录,升级不会丢失。

Docker Compose

mkdir metapi && cd metapi

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

export AUTH_TOKEN=your-admin-token
export PROXY_TOKEN=your-proxy-token
docker compose up -d

从源码

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

核心功能

统一代理网关

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

智能路由引擎

自动发现所有上游站点的可用模型,零配置生成路由表。多通道概率分摊,基于成本、余额、使用率加权分配。失败通道自动冷却与避让,请求失败自动重试切到其他可用通道。

多平台聚合管理

平台 适配器 说明
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 openapi / claude / gemini 标准兼容接口

各平台适配器覆盖模型枚举、余额查询、Token 管理、代理接入等通用能力。

账号与 Token 管理

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

自动签到

Cron 定时执行(默认每日 08:00),智能解析奖励金额,签到失败自动通知。按账号启用/禁用控制,完整签到日志与历史查询。

余额管理

定时余额刷新(默认每小时),批量更新所有活跃账号。收入追踪:每日/累计收入与消费趋势分析。凭证过期自动重新登录。

告警通知

支持五种通知渠道:Webhook、Bark、Server酱、Telegram Bot、SMTP 邮件。告警场景包括余额不足预警、站点/账号异常、签到失败、代理请求失败、Token 过期提醒、每日摘要报告。

轻量部署

单 Docker 容器,默认本地数据目录部署,支持外接 PostgreSQL 运行时数据库。Go 单二进制,15MB 镜像,启动即时。数据完整导入导出,迁移无忧。


配置

所有环境变量与原 TypeScript 版完全一致,无缝替换。

变量 默认值 说明
AUTH_TOKEN change-me-admin-token 管理员令牌
PROXY_TOKEN change-me-proxy-sk-token 代理 API Key
PROXY_MAX_BUFFERED_RESPONSE_BYTES 20971520 非流式上游响应的最大缓冲字节数,默认 20 MiB,超限返回 502
METAPI_ENABLE_PROXY_STUB 测试/演示用本地代理 stub 开关;生产保持为空,未配置上游转发时返回 503
PORT 4000 监听端口
DB_TYPE sqlite 数据库类型(sqlite / postgres);提供 PostgreSQL URL 时可自动推断为 postgres
DATABASE_URL / DB_URL PostgreSQL 连接串或 SQLite 文件路径;DB_URL 优先,DATABASE_URL 用于兼容部署平台
DB_SSLMODE PostgreSQL TLS 模式;支持 disableallowpreferrequireverify-caverify-full;非空时覆盖连接串中的 sslmode
TRUSTED_PROXY_CIDRS 允许提供 X-Forwarded-For / X-Real-IP 的反向代理 CIDR CSV;默认忽略 forwarded headers
ADMIN_CORS_ALLOWED_ORIGINS 允许跨域访问 /api/* 管理接口的精确 http(s) origin CSV;默认只支持同源管理 UI,禁止 *
CHECKIN_CRON 0 8 * * * 签到时间
BALANCE_REFRESH_CRON 0 * * * * 余额刷新频率

当前运行时支持两种数据库形态:单进程 SQLite;PostgreSQL 生产部署。PostgreSQL 模式下,产生外部请求、通知、上传、清理或同步副作用的后台任务使用 PG advisory lock,避免多副本重复执行同一批任务。Redis 尚未集成:没有 REDIS_URL 配置、Redis 客户端或分布式缓存。

代理转发没有配置路由和上游依赖时,生产默认返回 HTTP 503。METAPI_ENABLE_PROXY_STUB=1 只用于测试或演示,避免把本地假响应误当成真实上游调用。

.env.example 中有完整的环境变量清单。

运维健康检查

  • GET /health 是 liveness,只确认 HTTP 进程存活。
  • GET /ready 是 readiness,会检查数据库;数据库不可用或进程正在关停时返回 HTTP 503。
  • Docker 默认执行 metapi healthcheck,等价于探测 http://127.0.0.1:${PORT}/ready
  • 可用 METAPI_HEALTHCHECK_URLMETAPI_HEALTHCHECK_PATH 覆盖容器健康检查目标。

技术栈

技术
后端 chi 路由 + net/http
语言 Go 1.26.4
数据库 SQLite / PostgreSQL + sqlx,无 Redis 运行时依赖
定时任务 robfig/cron
容器化 Docker(Alpine,15MB 镜像)
前端 React 18 + Vite + Tailwind CSS v4(内嵌)

数据与隐私

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


从 TypeScript 版迁移

数据库 Schema 完全一致,Go 版启动时自动执行幂等 migration。停止旧服务,用同样的环境变量启动 Go 版即可。


开发

make build    # 构建
make test     # 运行全部测试
make vet      # go vet
make lint     # 代码检查
make vuln     # govulncheck 漏洞扫描
make bench-routing  # 路由权重选择 benchmark
make verify   # 本地发布门禁
make docker-verify  # 构建完整 Docker 镜像(需要 Docker)

相关项目


许可证

MIT

About

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

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors