Go to file
Q.Sui 81e58a8384 feat: 完善用户自定义定价机制 + 更新文档
定价机制:
- 用户共享 Key 时自定义 input_price/output_price(Tok/千token)
- 系统全局选择价格最低的共享 Key 优先使用
- 共享 Key 直接按 Tok 计费,平台 Key 按元转 Tok

核心改动:
- models: Contribution 新增 InputPrice/OutputPrice 字段
- router: 按价格排序选择最便宜的共享 Key
- handler: 使用 pkg/pricing 统一计费逻辑
- store: 事务中增加余额检查,防止并发超扣
- 新增 pkg/pricing 包:Tok/RMB 转换、费用计算

测试覆盖:
- router_test: 定价选择逻辑测试
- store_test: 并发扣款测试
- handler_test: 费用计算测试
- pricing_test: 定价工具函数测试

文档更新:
- API.md: 更新 /user/contribute 接口参数
- DATABASE.md: 更新表结构、术语统一
- ARCHITECTURE.md: 新增计费流程图
- DEPLOYMENT.md: 更新配置项
- USER_GUIDE.md: 新增法律风险声明章节

术语调整:
- 贡献 → 共享,分成 → 收益
- 余额 → 可用额度,Token → Tok
- Tok 明确为"平台积分"而非货币

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 00:40:11 +08:00
cmd/server feat: 完善用户自定义定价机制 + 更新文档 2026-04-05 00:40:11 +08:00
config feat: 完善用户自定义定价机制 + 更新文档 2026-04-05 00:40:11 +08:00
docs feat: 完善用户自定义定价机制 + 更新文档 2026-04-05 00:40:11 +08:00
internal feat: 完善用户自定义定价机制 + 更新文档 2026-04-05 00:40:11 +08:00
pkg feat: 完善用户自定义定价机制 + 更新文档 2026-04-05 00:40:11 +08:00
web feat: TokTok Token代理服务初始版本 2026-04-03 13:57:44 +08:00
.gitignore feat: TokTok Token代理服务初始版本 2026-04-03 13:57:44 +08:00
Dockerfile feat: TokTok Token代理服务初始版本 2026-04-03 13:57:44 +08:00
Makefile feat: TokTok Token代理服务初始版本 2026-04-03 13:57:44 +08:00
README.md feat: TokTok Token代理服务初始版本 2026-04-03 13:57:44 +08:00
docker-compose.yaml feat: TokTok Token代理服务初始版本 2026-04-03 13:57:44 +08:00
go.mod feat: TokTok Token代理服务初始版本 2026-04-03 13:57:44 +08:00
go.sum feat: TokTok Token代理服务初始版本 2026-04-03 13:57:44 +08:00

README.md

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