目录

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界面

访问地址

入口 地址 说明
用户中心 http://localhost:3000/#/user/login 用户登录
管理后台 http://localhost:3000/#/login 管理员登录

登录账号

用户登录

  • 输入任意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   # 切换路由策略

开发计划

  • 流式响应支持(SSE)
  • 贡献Key有效性检测
  • 消息通知中心
  • 贡献Key收益统计
  • 更多Provider适配(百度、字节)
  • 分布式部署支持
  • 在线充值功能

License

MIT

关于
313.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号