API Key 计费功能使用指南
概述
本系统实现了完整的 API Key 计费功能,包括:
- 余额管理
- 使用量记录
- 费用计算
- 充值功能
- 使用统计
数据库表结构
1. sys_api_key (API Key 表)
新增字段:
balance: 账户余额(人民币)quota_limit: 配额限制(人民币),为空表示无限制total_usage: 累计使用金额(人民币)total_tokens: 累计使用 tokens
2. sys_billing (充值记录表)
字段:
api_key_id: 关联的 API Key IDamount: 充值金额status: 支付状态(待支付、已支付、已取消、已退款)order_no: 订单号payment_method: 支付方式payment_time: 支付时间remark: 备注
3. sys_usage (使用记录表)
字段:
api_key_id: 关联的 API Key IDmodel: 使用的模型prompt_tokens: 输入 tokenscompletion_tokens: 输出 tokenstotal_tokens: 总 tokenscost: 本次调用费用request_path: 请求路径request_method: 请求方法status_code: 响应状态码error_message: 错误信息
API 接口
1. 获取使用量统计
GET /api/v1/usage/stats?days=30
Headers:
X-API-Key: sk-{your_api_key}
响应:
{
"code": 200,
"data": {
"balance": 100.0,
"quota_limit": null,
"total_usage": 25.5,
"total_tokens": 123456,
"total_requests": 500,
"avg_cost": 0.051,
"by_model": [
{
"model": "gpt-4",
"count": 100,
"tokens": 50000,
"cost": 15.5
}
]
}
}
2. 获取使用历史
GET /api/v1/usage/history?page=1&page_size=20
Headers:
X-API-Key: sk-{your_api_key}
3. 手动记录使用量
POST /api/v1/usage/record
Headers:
X-API-Key: sk-{your_api_key}
Content-Type: application/json
{
"model": "gpt-4",
"prompt_tokens": 100,
"completion_tokens": 50,
"request_path": "/api/v1/chat/completions",
"request_method": "POST"
}
4. 充值余额
POST /api/v1/billing/recharge
Authorization: Bearer {admin_token}
Content-Type: application/json
{
"api_key_id": 1,
"amount": 100.0,
"payment_method": "支付宝",
"remark": "充值100元"
}
5. 获取充值历史
GET /api/v1/billing/history?api_key_id=1&page=1&page_size=20
Authorization: Bearer {admin_token}
价格配置
当前价格配置(人民币/1K tokens):
| 模型 | 输入 tokens | 输出 tokens |
|---|---|---|
| gpt-4 | ¥0.21 | ¥0.42 |
| gpt-4-turbo | ¥0.07 | ¥0.14 |
| gpt-3.5-turbo | ¥0.01 | ¥0.02 |
| text-embedding-ada-002 | ¥0.0007 | ¥0 |
可在 backlin/module_saas/billing_utils.py 中的 PRICING 字典修改价格。
使用流程
1. 创建 API Key
通过管理后台创建 API Key,默认余额为 0。
2. 充值
管理员为 API Key 充值:
curl -X POST http://localhost:8000/api/v1/billing/recharge \
-H "Authorization: Bearer {admin_token}" \
-H "Content-Type: application/json" \
-d '{
"api_key_id": 1,
"amount": 100.0,
"payment_method": "支付宝"
}'
3. 使用 API
调用 API 时,系统会:
- 验证 API Key 有效性
- 检查余额是否充足
- 检查是否超出配额限制
- 调用成功后自动扣费并记录使用量
4. 查看统计
用户可以查看自己的使用统计和历史记录。
余额和配额检查
余额检查
- 每次 API 调用前会检查余额是否充足
- 余额不足时返回 402 Payment Required 错误
配额限制
- 可为 API Key 设置配额限制(
quota_limit) - 累计使用金额超过配额时禁止使用
- 配额为
null表示无限制
手动记录使用量
在某些场景下(如代理其他 API),可能无法自动拦截响应并记录使用量。此时可以使用手动记录接口:
# 在你的代理逻辑中
response = requests.post(
"https://api.openai.com/v1/chat/completions",
headers={"Authorization": f"Bearer {openai_key}"},
json=payload
)
# 提取 token 使用量
usage = response.json().get("usage", {})
# 手动记录
requests.post(
"http://localhost:8000/api/v1/usage/record",
headers={"X-API-Key": user_api_key},
json={
"model": payload["model"],
"prompt_tokens": usage.get("prompt_tokens", 0),
"completion_tokens": usage.get("completion_tokens", 0),
"total_tokens": usage.get("total_tokens", 0)
}
)
管理员操作
查看所有 API Key
GET /system/apikey/page
查看所有充值记录
GET /system/billing/page
查看所有使用记录
GET /system/usage/page