TokTok - Token代理服务
Token代理服务,聚合多个云平台的大模型API,提供统一接口,支持按价格/可用性动态切换后端Provider,并支持Token共享银行功能。
功能特性
核心功能
- ✅ OpenAI兼容API接口
- ✅ 多Provider支持(智谱GLM、阿里Qwen、并行科技)
- ✅ 动态路由策略(价格优先/延迟优先/轮询)
- ✅ 健康检查与自动故障转移
- ✅ 请求级重试
- ✅ 模型别名映射
- ✅ 流式响应支持(SSE)
Token共享银行
- ✅ 统一Token账户系统
- ✅ 贡献API Key换取Token额度
- ✅ Token消耗统计与流水记录
- ✅ 人民币价值锚定显示
- ✅ API Key加密存储(AES-GCM)
- ✅ 余额不足预警
贡献Key管理
- ✅ Key有效性检测(每日定时)
- ✅ Key状态展示(有效/失效)
- ✅ Key使用统计(请求次数、Token消耗)
- ✅ 失效自动通知
消息通知系统
- ✅ 系统通知(用户级+全局)
- ✅ 余额预警通知
- ✅ Key失效通知
- ✅ 未读消息计数
- ✅ 一键标记已读
管理功能
- ✅ Web管理后台
- ✅ 用户端界面
- ✅ 用量统计与账单
- ✅ 告警通知(邮件/Webhook)
快速开始
环境要求
- Go 1.19+
- Node.js 18+ (前端开发)
- SQLite3
本地运行
# 克隆项目
git clone https://github.com/yourname/toktok.git
cd toktok
# 编译后端
go build -o toktok ./cmd/server
# 运行后端
./toktok
# 前端开发 (可选)
cd web
npm install
npm run dev
Docker部署
# 构建并启动
docker-compose up -d
# 查看日志
docker-compose logs -f
配置说明
编辑 config/config.yaml:
# Provider配置
providers:
zhipu:
enabled: true
api_key: "你的智谱API Key"
base_url: "https://open.bigmodel.cn/api/paas/v4"
models:
- name: "glm-4"
pricing:
input: 0.1 # 元/千token
output: 0.1
paratera:
enabled: true
api_key: "你的并行科技API Key"
base_url: "https://llmapi.paratera.com"
models:
- name: "GLM-5"
pricing:
input: 0.08
output: 0.08
# 模型映射
model_mapping:
"gpt-4":
targets: ["GLM-5", "qwen-plus"]
strategy: "price_first"
# Token定价配置
token_pricing:
base_rate: 12500 # 1元 = 12500 Token
contribution_pricing:
GLM-5: 500000
glm-4: 400000
qwen-plus: 300000
default_contribution: 200000
# 认证配置
auth:
admin_key: "sk-admin-xxx"
secret_key: "your-32-byte-secret-key" # API Key加密密钥
# 告警配置
alert:
balance_alert:
enabled: true
threshold: 10000 # 余额低于1万Token时预警
API使用
聊天请求(OpenAI兼容)
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "GLM-5",
"messages": [{"role": "user", "content": "你好"}],
"max_tokens": 100
}'
流式请求(SSE)
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "GLM-5",
"messages": [{"role": "user", "content": "写一首诗"}],
"stream": true
}'
响应格式:
data: {"id":"xxx","object":"chat.completion.chunk","choices":[{"delta":{"content":"春"}}]}
data: {"id":"xxx","object":"chat.completion.chunk","choices":[{"delta":{"content":"风"}}]}
data: [DONE]
Python调用
from openai import OpenAI
client = OpenAI(
api_key="your-api-key",
base_url="http://localhost:8080/v1"
)
# 非流式
response = client.chat.completions.create(
model="GLM-5",
messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)
# 流式
stream = client.chat.completions.create(
model="GLM-5",
messages=[{"role": "user", "content": "写一首诗"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
贡献API Key
curl -X POST http://localhost:8080/user/contribute \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"provider": "paratera",
"api_key": "你的API Key",
"model": "GLM-5"
}'
查询账户
curl http://localhost:8080/user/account \
-H "Authorization: Bearer your-api-key"
Web界面
访问地址
登录账号
用户登录:
- 输入任意API Key即可登录(首次自动创建账户)
管理员登录:
- 用户名:
admin
- 密码:配置文件中的
auth.admin_key
用户界面功能
| 页面 |
功能 |
| 仪表盘 |
Token消耗、账户余额、费用统计 |
| Token流水 |
Token收支流水记录 |
| 贡献管理 |
贡献API Key、查看贡献记录、Key状态、使用统计 |
| 用量统计 |
详细使用记录查询 |
| 账单中心 |
按模型/按天账单统计 |
| 通知中心 |
余额预警、Key失效通知、系统公告 |
管理员界面功能
| 页面 |
功能 |
| 仪表盘 |
Provider状态、总消耗、活跃用户 |
| Provider管理 |
查看状态、健康检查 |
| 用户管理 |
查看用户、调整额度 |
| 路由策略 |
切换价格优先/延迟优先/轮询 |
| 用量统计 |
按Provider/模型/用户分组统计 |
| 告警配置 |
邮件/Webhook通知配置 |
Token账户系统
统一账户模型
所有用户使用统一的Token账户:
用户账户
├── Token余额(主账户)
│ ├── 来源:贡献Key
│ ├── 来源:充值
│ └── 来源:奖励
├── ≈ 人民币价值(仅展示)
└── 贡献记录
Token定价
| 项目 |
数值 |
| 基准汇率 |
1元 = 12,500 Token |
| 显示格式 |
1 Token ≈ ¥0.00008 |
贡献奖励
| 模型 |
Token奖励 |
| GLM-5 |
500,000 |
| glm-4 |
400,000 |
| qwen-plus |
300,000 |
| 默认 |
200,000 |
充值档位(预留)
| 金额 |
Token |
赠送 |
| ¥10 |
125,000 |
- |
| ¥100 |
1,250,000 |
50,000 |
| ¥500 |
6,250,000 |
500,000 |
支持的Provider
| Provider |
状态 |
支持模型 |
流式支持 |
| 并行科技 |
✅ 已适配 |
GLM-5, glm-4, qwen-plus |
✅ |
| 智谱 |
✅ 已适配 |
glm-4, glm-3-turbo |
✅ |
| 阿里云 |
✅ 已适配 |
qwen-plus, qwen-turbo |
✅ |
| 百度 |
🚧 待适配 |
ernie-bot-4 |
- |
| 字节 |
🚧 待适配 |
doubao-pro |
- |
项目结构
toktok/
├── cmd/server/ # 入口
├── internal/
│ ├── api/ # HTTP处理器
│ │ ├── handler.go # 核心API
│ │ ├── admin.go # 管理接口
│ │ ├── user.go # 用户接口
│ │ └── middleware.go # 中间件
│ ├── provider/ # Provider适配
│ │ ├── provider.go # 接口定义
│ │ ├── zhipu.go # 智谱
│ │ ├── aliyun.go # 阿里云
│ │ ├── paratera.go # 并行科技
│ │ └── manager.go # Provider管理
│ ├── router/ # 路由引擎
│ ├── health/ # 健康检查
│ ├── contribution/ # 贡献Key检测
│ ├── models/ # 数据模型
│ ├── store/ # 数据存储
│ └── alert/ # 告警通知
├── pkg/
│ ├── config/ # 配置管理
│ └── crypto/ # 加密工具
├── web/ # 前端
│ ├── src/
│ │ ├── views/ # 页面组件
│ │ ├── components/ # 通用组件
│ │ ├── api/ # API接口
│ │ ├── utils/ # 工具函数
│ │ ├── router/ # 路由配置
│ │ └── stores/ # 状态管理
│ ├── Dockerfile
│ └── nginx.conf
├── config/config.yaml # 配置文件
├── Dockerfile
├── docker-compose.yaml
├── Makefile
└── go.mod
路由策略
| 策略 |
说明 |
| price_first |
选择价格最低的Provider |
| latency_first |
选择延迟最低的Provider |
| round_robin |
轮询所有可用Provider |
API接口
用户接口
POST /user/login # 用户登录
GET /user/account # 账户信息
GET /user/dashboard # 用户仪表盘
POST /user/contribute # 贡献Key
GET /user/contributions # 贡献记录
GET /user/contribution-stats # Key使用统计
GET /user/transactions # Token流水
GET /user/usage # 用量记录
GET /user/bills # 账单
GET /user/notifications # 通知列表
GET /user/notifications/unread # 未读数量
PUT /user/notifications/:id/read # 标记已读
PUT /user/notifications/read-all # 全部已读
核心接口
POST /v1/chat/completions # 聊天请求(支持流式)
GET /v1/usage # 用量查询
GET /v1/user # 用户信息
管理接口
POST /admin/login # 管理员登录
GET /admin/dashboard # 仪表盘数据
GET /admin/providers # Provider列表
GET /admin/users # 用户列表
PUT /admin/users/:id # 更新用户
GET /admin/statistics # 详细统计
POST /admin/router/strategy # 切换路由策略
开发计划
License
MIT