网站首页 > 知识剖析 正文
以下是一个基于PHP PhalApi框架的AI Token计费系统的完整设计方案,分为产品方案和技术实现方案两部分:
一、产品方案设计
1. 核心功能模块
1.1 用户账户体系
- 用户注册/登录(手机/邮箱)
- 账户余额(支持充值/消费)
- Token实时统计(总获取/已消耗/剩余)
- 分级权限管理(普通用户/管理员)
1.2 服务计费管理
- 多AI服务支持(文本生成/图像生成等)
- 动态费率配置(不同服务独立定价)
- Token计算引擎(文本长度/图片分辨率等)
- 实时扣费与消费记录
1.3 订单支付系统
- 充值订单管理(支付宝/微信支付)
- 消费明细查询
- 月度账单生成
- 发票申请接口
1.4 监控统计
- 实时用量仪表盘
- 服务调用统计报表
- 用户消费行为分析
- 异常消费预警系统
2. 业务流程设计
二、技术实现方案
1. 系统架构
客户端 → PhalApi接口层 → 业务逻辑层 → 数据存储层
↓ ↓
计费中心 AI服务引擎
2. 数据库设计(MySQL示例)
2.1 用户表 (user)
sql语句,
CREATE TABLE `user` (
`id` INT(11) UNSIGNED AUTO_INCREMENT,
`username` VARCHAR(50) UNIQUE,
`balance` DECIMAL(12,4) DEFAULT 0.0000,
`total_tokens` INT DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.2 服务配置表 (service_config)
sql语句,
CREATE TABLE `service_config` (
`service_id` VARCHAR(32) PRIMARY KEY,
`token_rate` DECIMAL(10,6) COMMENT '每token价格',
`calc_method` ENUM('CHAR_COUNT','WORD_COUNT','CUSTOM')
) ENGINE=InnoDB;
2.3 消费记录表 (token_record)
sql语句,
CREATE TABLE `token_record` (
`record_id` BIGINT UNSIGNED AUTO_INCREMENT,
`user_id` INT(11),
`service_id` VARCHAR(32),
`tokens` INT,
`cost` DECIMAL(10,4),
`request_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_user_service` (`user_id`,`service_id`)
) ENGINE=InnoDB;
3. 关键代码实现
3.1 计费中间件(PhalApi插件)
php代码,
class TokenBillingPlugin {
public function afterApi(&$data) {
// 获取本次请求的token消耗
$tokens = $this->calcTokens($data['response']);
// 执行扣费操作
$billingService = new BillingService();
$billingResult = $billingService->deduct(
$this->userId,
$this->serviceId,
$tokens
);
// 返回余额信息
$data['balance'] = $billingResult['balance'];
$data['remaining_tokens'] = $billingResult['tokens'];
}
private function calcTokens($content) {
// 根据服务类型计算token
$serviceConfig = ServiceModel::getConfig($this->serviceId);
switch($serviceConfig['calc_method']) {
case 'CHAR_COUNT':
return mb_strlen($content);
case 'WORD_COUNT':
return count(explode(' ', $content));
// 其他自定义计算方式
}
}
}
3.2 原子化扣费服务
php代码,
class BillingService {
public function deduct($userId, $serviceId, $tokens) {
try {
// 开启数据库事务
DI()->database->beginTransaction();
// 获取服务费率
$rate = ServiceModel::getRate($serviceId);
// 计算实际费用
$cost = bcmul($tokens, $rate, 4);
// 更新用户余额
UserModel::query()
->where('id', $userId)
->setDec('balance', $cost)
->setInc('total_tokens', $tokens)
->update();
// 记录消费日志
TokenRecordModel::create([
'user_id' => $userId,
'service_id' => $serviceId,
'tokens' => $tokens,
'cost' => $cost
]);
DI()->database->commit();
return ['code' => 200, 'balance' => $newBalance];
} catch (Exception $e) {
DI()->database->rollBack();
throw new BusinessException('扣费失败: '.$e->getMessage());
}
}
}
4. 安全增强措施
- 余额操作使用数据库事务保证原子性
- 敏感操作记录详细审计日志
- 采用Redis分布式锁防止并发扣费
- 接口调用频率限制(TokenBucket算法)
5. 监控方案
php代码,
// 在PhalApi中增加统计钩子
DI()->hook->addHook('after_api', function(){
$statsData = [
'api_name' => DI()->request->getService(),
'response_time' => DI()->response->getCostTime(),
'token_usage' => $lastTokenUsage
];
StatsClient::send($statsData);
});
三、扩展设计建议
- 混合计费模式:支持按token计费+按次计费组合模式
- 套餐包系统:推出预付费token套餐包
- 开发者API:开放余额查询/消费记录接口
- 沙盒模式:测试环境免计费功能
- 流量控制:按用户等级设置QPS限制
该方案采用模块化设计,核心计费逻辑与业务逻辑解耦,可通过PhalApi的插件机制灵活扩展。数据库设计考虑高并发场景,关键操作使用事务保证数据一致性,适合日均百万级调用量的场景。
猜你喜欢
- 2025-04-30 WordPress使用CDN后显示评论真实IP
- 2025-04-30 webman 事务回滚失效问题记录(事务回滚指令rollback执行的结果是)
- 2025-04-30 如何在WordPress文章分页中添加阅读全文按钮
- 2025-04-30 提权之disable_functions(三)(提权分为哪几个种类)
- 2025-04-30 ThinkPHP后台入口地址查找(thinkphp .htaccess)
- 2025-04-30 Thinkphp3.2.3及以下版本漏洞整理
- 2025-04-30 「某CMS漏洞」SQL注入漏洞分析(sql注入漏洞代码)
- 2025-04-30 php实现一个基本的 MVC 框架(php的mvc设计模式)
- 2025-04-30 PHP漏洞之跨网站请求伪造(php伪造来路跨域跳转)
- 2025-04-30 习惯了各种框架的文件上传,php原生上传图片你还记得吗?
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)