31 KiB
AI 算力积分计费系统方案
文档版本:v1.0
创建日期:2025-01-15
最后更新:2025-01-15
目录
方案概述
背景
Jointo视频工作台采用 AI 算力积分 作为唯一的计费方式,取消传统的订阅层级(免费版/专业版/企业版)。用户通过充值获得积分,使用 AI 功能时消耗相应积分。
核心目标
- 成本可控:确保积分定价覆盖 API 成本 + 合理利润空间(30-50%)
- 用户友好:新用户获得足够积分体验核心功能,降低使用门槛
- 激励充值:通过阶梯式优惠鼓励用户大额充值
- 灵活调整:支持根据市场变化和成本波动灵活调整定价
设计原则
- 透明定价:每项服务的积分消耗清晰明确
- 按需付费:用户只为实际使用的功能付费
- 公平合理:高成本服务(视频生成)消耗更多积分,低成本服务(字幕生成)消耗较少
- 用户体验优先:避免过度复杂的计费规则
积分体系设计
基础兑换比例
标准比例:1 元人民币 = 10 积分
选择理由:
- 计算简单,用户心理接受度高
- 便于后期调整单项服务的积分消耗
- 与主流平台(如阿里云、腾讯云)的积分体系接近
积分类型
| 积分类型 | 获取方式 | 有效期 | 说明 |
|---|---|---|---|
| 充值积分 | 用户付费充值 | 永久有效 | 主要积分来源,不过期 |
| 赠送积分 | 新用户注册、活动奖励 | 1 个月 | 激励用户使用平台 |
| 活动积分 | 限时活动、推广任务 | 30-90 天 | 短期运营活动 |
积分消耗优先级
当用户同时拥有多种类型积分时,按以下顺序扣除:
- 即将过期的积分(按过期时间排序)
- 赠送积分
- 充值积分
充值套餐方案
套餐列表
| 套餐名称 | 充值金额 | 获得积分 | 单价(元/积分) | 额外赠送 | 推荐度 |
|---|---|---|---|---|---|
| 体验套餐 | ¥10 | 100 | ¥0.100 | - | ⭐⭐⭐ |
| 进阶套餐 | ¥50 | 550 | ¥0.091 | +10% | ⭐⭐⭐⭐ |
| 高级套餐 | ¥100 | 1,200 | ¥0.083 | +20% | ⭐⭐⭐⭐⭐ |
| 专业套餐 | ¥500 | 6,500 | ¥0.077 | +30% | ⭐⭐⭐⭐⭐ |
套餐使用场景
体验套餐(¥10 = 100 积分)
适合人群:新用户、轻度使用者
可使用次数:
- 生成 50 张图片
- 生成 1 个 5 秒视频
- 生成 5 个 10 秒音效
- 配音 10,000 字
- 生成 100 分钟字幕
进阶套餐(¥50 = 550 积分)
适合人群:中度使用者、内容创作者
可使用次数:
- 生成 275 张图片
- 生成 5 个 5 秒视频
- 生成 27 个 10 秒音效
- 混合使用多种功能
高级套餐(¥100 = 1,200 积分)⭐ 推荐
适合人群:重度使用者、专业创作者
可使用次数:
- 生成 600 张图片
- 生成 12 个 5 秒视频
- 生成 60 个 10 秒音效
- 混合使用多种功能
专业套餐(¥500 = 6,500 积分)
适合人群:企业用户、工作室
可使用次数:
- 生成 3,250 张图片
- 生成 65 个 5 秒视频
- 生成 325 个 10 秒音效
- 大规模内容生产
服务积分消耗标准
图片生成服务
基础定价:2 积分/张
| 分辨率 | 积分消耗 | 说明 |
|---|---|---|
| 512x512 | 1 积分 | 低分辨率,快速预览 |
| 1024x1024 | 2 积分 | 标准分辨率(推荐) |
| 1024x1792 | 3 积分 | 竖屏高清 |
| 1792x1024 | 3 积分 | 横屏高清 |
| 2048x2048 | 4 积分 | 超高清(如果支持) |
模型差异:
- Stable Diffusion:标准价格
- DALL-E 3:标准价格 × 1.5
- Midjourney:标准价格 × 2(如果接入)
视频生成服务
基础定价:100 积分/5秒
| 视频类型 | 时长 | 积分消耗 | 说明 |
|---|---|---|---|
| 文本转视频 | 5秒 | 100 积分 | 基础视频生成 |
| 文本转视频 | 10秒 | 200 积分 | 长视频 |
| 图片转视频 | 5秒 | 100 积分 | 图片动画化 |
| 图片转视频 | 10秒 | 200 积分 | 长动画 |
| 关键帧动画 | 5秒 | 150 积分 | 多关键帧插值 |
| 视频融合 | 5秒 | 120 积分 | 两段视频融合 |
| 视频替换 | 5秒 | 80 积分 | 局部替换 |
分辨率加成:
- 720p:标准价格
- 1080p:标准价格 × 1.5
- 4K:标准价格 × 3
帧率加成:
- 24fps:标准价格
- 30fps:标准价格 × 1.2
- 60fps:标准价格 × 1.5
音效生成服务
基础定价:20 积分/10秒
| 时长 | 积分消耗 | 说明 |
|---|---|---|
| 5秒 | 10 积分 | 短音效 |
| 10秒 | 20 积分 | 标准音效 |
| 30秒 | 50 积分 | 长音效 |
| 60秒 | 90 积分 | 背景音乐 |
音质加成:
- 标准音质(44.1kHz):标准价格
- 高音质(48kHz):标准价格 × 1.2
- 无损音质(96kHz):标准价格 × 1.5
配音生成服务(TTS)
基础定价:1 积分/100字
| 字数 | 积分消耗 | 说明 |
|---|---|---|
| 0-100字 | 1 积分 | 最小计费单位 |
| 101-500字 | 5 积分 | 短文本 |
| 501-1000字 | 10 积分 | 中等文本 |
| 1001-5000字 | 50 积分 | 长文本 |
语音类型:
- 标准语音:标准价格
- 情感语音:标准价格 × 1.5
- 名人声音克隆:标准价格 × 3(如果支持)
语言加成:
- 中文/英文:标准价格
- 小语种:标准价格 × 1.2
字幕生成服务(STT)
基础定价:1 积分/分钟
| 时长 | 积分消耗 | 说明 |
|---|---|---|
| 0-1分钟 | 1 积分 | 最小计费单位 |
| 1-10分钟 | 10 积分 | 短视频 |
| 10-30分钟 | 30 积分 | 中等视频 |
| 30-60分钟 | 60 积分 | 长视频 |
功能加成:
- 基础转写:标准价格
- 智能断句:标准价格 × 1.2
- 多语言识别:标准价格 × 1.5
- 说话人分离:标准价格 × 2
成本分析
API 成本估算
基于主流 AI 服务提供商的定价(2025年1月):
| 服务类型 | API 成本(USD) | API 成本(CNY) | 积分消耗 | 积分价值(CNY) | 利润率 |
|---|---|---|---|---|---|
| 图片生成(1024x1024) | $0.02 | ¥0.14 | 2 积分 | ¥0.20 | 43% |
| 视频生成(5秒) | $1.00 | ¥7.00 | 100 积分 | ¥10.00 | 43% |
| 音效生成(10秒) | $0.20 | ¥1.40 | 20 积分 | ¥2.00 | 43% |
| 配音生成(100字) | $0.0015 | ¥0.01 | 1 积分 | ¥0.10 | 900% |
| 字幕生成(1分钟) | $0.006 | ¥0.04 | 1 积分 | ¥0.10 | 150% |
汇率:1 USD = 7 CNY(参考汇率)
积分价值:1 积分 = ¥0.10(基础套餐)
利润空间分析
高成本服务(图片、视频、音效)
- 目标利润率:30-50%
- 实际利润率:43%
- 评估:✅ 符合预期,可持续运营
低成本服务(配音、字幕)
- 目标利润率:100-500%
- 实际利润率:150-900%
- 评估:✅ 高利润率,但用户感知价值高,定价合理
成本优化策略
- 批量采购:与 AI 服务商谈判批量折扣(预计可降低 10-20% 成本)
- 自建模型:对于高频服务(如图片生成),考虑自建 Stable Diffusion 集群
- 缓存机制:相同参数的生成结果可复用,降低重复调用成本
- 动态定价:根据 API 成本波动,季度调整积分消耗标准
用户福利政策
新用户注册福利
赠送积分:100 积分
有效期:1 个月
使用限制:无限制,可用于任何 AI 功能
体验能力:
- 生成 50 张标准图片
- 生成 1 个 5 秒视频
- 生成 5 个 10 秒音效
- 配音 10,000 字
- 生成 100 分钟字幕
首次充值奖励
条件:用户首次充值任意金额
奖励:额外赠送 20% 积分
示例:首次充值 ¥50,获得 550 + 110 = 660 积分
邀请奖励
邀请人奖励:被邀请人首次充值后,邀请人获得 10% 返利积分
被邀请人奖励:注册后额外获得 50 积分
示例:
- 用户 A 邀请用户 B
- 用户 B 注册获得 100 + 50 = 150 积分
- 用户 B 充值 ¥100,获得 1,200 积分
- 用户 A 获得 120 积分返利
会员日活动
时间:每月 15 日
优惠:充值额外赠送 10%
叠加规则:可与套餐赠送叠加
示例:会员日充值 ¥100 高级套餐
- 基础积分:1,000
- 套餐赠送(+20%):200
- 会员日赠送(+10%):100
- 总计:1,400 积分
积分有效期规则
充值积分
有效期:永久有效
说明:用户付费购买的积分不设过期时间,保障用户权益
赠送积分
有效期:1 个月
说明:包括新用户注册赠送、首次充值奖励、邀请奖励等
过期提醒:
- 过期前 7 天:邮件 + 站内信提醒
- 过期前 3 天:邮件 + 站内信 + 短信提醒
- 过期前 1 天:邮件 + 站内信 + 短信提醒
活动积分
有效期:30-90 天(根据活动规则)
说明:限时活动、推广任务获得的积分
积分冻结规则
冻结场景:
- 用户账号异常(如刷单、作弊)
- 充值退款纠纷期间
- 系统检测到异常消耗行为
解冻条件:
- 账号安全验证通过
- 纠纷解决
- 异常行为排查完成
数据库设计
credit_transactions(积分交易记录表)
CREATE TABLE credit_transactions (
transaction_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,
-- 交易信息
transaction_type TEXT NOT NULL CHECK (transaction_type IN ('recharge', 'consume', 'refund', 'gift', 'reward')),
amount INTEGER NOT NULL, -- 正数为增加,负数为减少
balance_after INTEGER NOT NULL, -- 交易后余额
-- 积分类型
credit_type TEXT NOT NULL CHECK (credit_type IN ('paid', 'gift', 'activity')),
expires_at TIMESTAMPTZ, -- 积分过期时间(充值积分为 NULL)
-- 关联信息
order_id BIGINT REFERENCES orders(order_id) ON DELETE SET NULL, -- 充值订单
ai_job_id BIGINT REFERENCES ai_jobs(job_id) ON DELETE SET NULL, -- AI 任务
description TEXT, -- 交易描述
metadata JSONB, -- 额外信息
-- 时间戳
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
-- 索引
CONSTRAINT credit_transactions_amount_check CHECK (amount != 0)
);
-- 索引
CREATE INDEX idx_credit_transactions_user_id ON credit_transactions (user_id, created_at DESC);
CREATE INDEX idx_credit_transactions_type ON credit_transactions (transaction_type, created_at DESC);
CREATE INDEX idx_credit_transactions_order_id ON credit_transactions (order_id) WHERE order_id IS NOT NULL;
CREATE INDEX idx_credit_transactions_ai_job_id ON credit_transactions (ai_job_id) WHERE ai_job_id IS NOT NULL;
CREATE INDEX idx_credit_transactions_expires_at ON credit_transactions (expires_at) WHERE expires_at IS NOT NULL;
credit_packages(充值套餐表)
CREATE TABLE credit_packages (
package_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
-- 套餐信息
package_name TEXT NOT NULL, -- 套餐名称
amount NUMERIC(10, 2) NOT NULL, -- 充值金额(元)
credits INTEGER NOT NULL, -- 获得积分
bonus_credits INTEGER NOT NULL DEFAULT 0, -- 额外赠送积分
-- 显示信息
description TEXT, -- 套餐描述
display_order INTEGER NOT NULL DEFAULT 0, -- 显示顺序
is_recommended BOOLEAN NOT NULL DEFAULT false, -- 是否推荐
-- 状态
is_active BOOLEAN NOT NULL DEFAULT true, -- 是否启用
-- 时间戳
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- 索引
CREATE INDEX idx_credit_packages_active ON credit_packages (is_active, display_order);
-- 触发器
CREATE TRIGGER update_credit_packages_updated_at
BEFORE UPDATE ON credit_packages
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
credit_pricing(服务定价表)
CREATE TABLE credit_pricing (
pricing_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
-- 服务信息
service_type TEXT NOT NULL, -- 服务类型:image, video, sound, voice, subtitle
service_name TEXT NOT NULL, -- 服务名称
-- 定价信息
base_credits INTEGER NOT NULL, -- 基础积分消耗
unit TEXT NOT NULL, -- 计费单位:per_image, per_second, per_minute, per_100_chars
-- 参数配置
parameters JSONB, -- 服务参数(分辨率、时长等)
multiplier NUMERIC(3, 2) DEFAULT 1.0, -- 价格倍数
-- 状态
is_active BOOLEAN NOT NULL DEFAULT true,
-- 时间戳
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
-- 唯一约束
CONSTRAINT credit_pricing_unique UNIQUE (service_type, service_name, parameters)
);
-- 索引
CREATE INDEX idx_credit_pricing_service_type ON credit_pricing (service_type, is_active);
-- 触发器
CREATE TRIGGER update_credit_pricing_updated_at
BEFORE UPDATE ON credit_pricing
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
初始化数据
-- 插入充值套餐
INSERT INTO credit_packages (package_name, amount, credits, bonus_credits, description, display_order, is_recommended) VALUES
('体验套餐', 10.00, 100, 0, '适合新用户体验', 1, false),
('进阶套餐', 50.00, 500, 50, '额外赠送10%', 2, false),
('高级套餐', 100.00, 1000, 200, '额外赠送20%,推荐', 3, true),
('专业套餐', 500.00, 5000, 1500, '额外赠送30%', 4, false);
-- 插入服务定价
INSERT INTO credit_pricing (service_type, service_name, base_credits, unit, parameters) VALUES
-- 图片生成
('image', '标准图片生成', 2, 'per_image', '{"resolution": "1024x1024", "model": "stable_diffusion"}'),
('image', '低分辨率图片', 1, 'per_image', '{"resolution": "512x512", "model": "stable_diffusion"}'),
('image', '高清图片生成', 3, 'per_image', '{"resolution": "1024x1792", "model": "stable_diffusion"}'),
-- 视频生成
('video', '标准视频生成', 100, 'per_5_seconds', '{"resolution": "720p", "fps": 24, "type": "text2video"}'),
('video', '图片转视频', 100, 'per_5_seconds', '{"resolution": "720p", "fps": 24, "type": "img2video"}'),
-- 音效生成
('sound', '标准音效生成', 20, 'per_10_seconds', '{"quality": "standard"}'),
-- 配音生成
('voice', '标准配音', 1, 'per_100_chars', '{"voice_type": "standard", "language": "zh-CN"}'),
-- 字幕生成
('subtitle', '标准字幕生成', 1, 'per_minute', '{"language": "zh"}');
API 接口设计
1. 查询充值套餐
GET /api/v1/credits/packages
响应:
{
"packages": [
{
"package_id": 1,
"package_name": "体验套餐",
"amount": 10.0,
"credits": 100,
"bonus_credits": 0,
"total_credits": 100,
"description": "适合新用户体验",
"is_recommended": false
},
{
"package_id": 3,
"package_name": "高级套餐",
"amount": 100.0,
"credits": 1000,
"bonus_credits": 200,
"total_credits": 1200,
"description": "额外赠送20%,推荐",
"is_recommended": true
}
]
}
2. 创建充值订单
POST /api/v1/credits/recharge
请求体:
{
"package_id": 3
}
响应:
{
"order_id": 123456,
"amount": 100.0,
"credits": 1200,
"payment_url": "https://pay.example.com/...",
"expires_at": "2025-01-15T12:00:00Z"
}
3. 查询积分余额
GET /api/v1/credits/balance
响应:
{
"total_balance": 1500,
"paid_credits": 1200,
"gift_credits": 300,
"expiring_soon": [
{
"amount": 100,
"expires_at": "2025-02-15T00:00:00Z",
"days_left": 31
}
]
}
4. 查询积分交易记录
GET /api/v1/credits/transactions?page=1&limit=20&type=consume
响应:
{
"transactions": [
{
"transaction_id": 789,
"transaction_type": "consume",
"amount": -100,
"balance_after": 1400,
"description": "视频生成(5秒)",
"ai_job_id": 456,
"created_at": "2025-01-15T10:30:00Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 50
}
}
5. 查询服务定价
GET /api/v1/credits/pricing?service_type=video
响应:
{
"pricing": [
{
"service_type": "video",
"service_name": "标准视频生成",
"base_credits": 100,
"unit": "per_5_seconds",
"parameters": {
"resolution": "720p",
"fps": 24,
"type": "text2video"
}
}
]
}
6. 计算服务费用
POST /api/v1/credits/calculate
请求体:
{
"service_type": "video",
"parameters": {
"duration": 10,
"resolution": "1080p",
"fps": 30
}
}
响应:
{
"estimated_credits": 360,
"breakdown": {
"base_credits": 200,
"resolution_multiplier": 1.5,
"fps_multiplier": 1.2,
"total": 360
},
"sufficient_balance": true,
"current_balance": 1500
}
业务流程
充值流程
sequenceDiagram
participant User as 用户
participant Frontend as 前端
participant API as API 服务
participant Payment as 支付网关
participant DB as 数据库
User->>Frontend: 选择充值套餐
Frontend->>API: POST /api/v1/credits/recharge
API->>DB: 创建订单记录
API->>Payment: 生成支付链接
Payment-->>API: 返回支付 URL
API-->>Frontend: 返回订单信息
Frontend->>User: 跳转支付页面
User->>Payment: 完成支付
Payment->>API: 支付回调通知
API->>DB: 更新订单状态
API->>DB: 增加用户积分
API->>DB: 记录积分交易
API-->>Payment: 确认收到通知
Payment->>User: 支付成功提示
Frontend->>API: 轮询订单状态
API-->>Frontend: 返回充值成功
Frontend->>User: 显示积分到账
消耗流程
sequenceDiagram
participant User as 用户
participant Frontend as 前端
participant API as API 服务
participant CreditService as 积分服务
participant AIService as AI 服务
participant DB as 数据库
User->>Frontend: 发起 AI 生成请求
Frontend->>API: POST /api/v1/ai/generate-*
API->>CreditService: 计算所需积分
CreditService->>DB: 查询用户余额
alt 余额不足
CreditService-->>API: 余额不足错误
API-->>Frontend: 返回错误提示
Frontend->>User: 提示充值
else 余额充足
CreditService->>DB: 预扣积分(冻结)
CreditService-->>API: 预扣成功
API->>AIService: 提交 AI 任务
AIService-->>API: 返回任务 ID
API-->>Frontend: 返回任务信息
AIService->>AIService: 执行 AI 生成
alt 生成成功
AIService->>CreditService: 确认消耗积分
CreditService->>DB: 正式扣除积分
CreditService->>DB: 记录消耗交易
AIService->>DB: 保存生成结果
AIService-->>Frontend: 推送完成通知
Frontend->>User: 显示生成结果
else 生成失败
AIService->>CreditService: 退还积分
CreditService->>DB: 解冻积分
AIService-->>Frontend: 推送失败通知
Frontend->>User: 显示错误信息
end
end
过期积分清理流程
sequenceDiagram
participant Cron as 定时任务
participant CreditService as 积分服务
participant DB as 数据库
participant Notification as 通知服务
Cron->>CreditService: 每日凌晨执行
CreditService->>DB: 查询即将过期积分(30天内)
DB-->>CreditService: 返回用户列表
loop 遍历用户
CreditService->>Notification: 发送过期提醒
Notification->>User: 邮件/站内信/短信
end
CreditService->>DB: 查询已过期积分
DB-->>CreditService: 返回过期记录
loop 遍历过期记录
CreditService->>DB: 扣除过期积分
CreditService->>DB: 记录过期交易
CreditService->>Notification: 发送过期通知
end
CreditService-->>Cron: 清理完成
运营策略建议
定价策略
1. 动态定价
目标:根据成本波动和市场竞争调整定价
实施方案:
- 每季度评估 API 成本变化
- 监控竞品定价策略
- 根据用户反馈调整积分消耗标准
- 保持充值比例稳定(1元 = 10积分)
2. 差异化定价
目标:针对不同用户群体提供差异化服务
实施方案:
- 个人用户:标准定价
- 企业用户:批量采购折扣(充值 ≥ ¥5,000,额外赠送 40%)
- 教育用户:学生认证后,充值额外赠送 20%
- 开发者:API 调用模式,按量计费
3. 心理定价
目标:提高用户充值意愿
实施方案:
- 套餐定价采用 ¥9.9、¥49.9、¥99.9(而非整数)
- 突出"推荐套餐"标签,引导用户选择高价值套餐
- 显示"节省金额",强化优惠感知
促销活动
1. 限时充值活动
时间:每月 15 日(会员日)、双 11、618 等
优惠:
- 充值额外赠送 10-20%
- 限时套餐(如:¥88 = 1,500 积分)
- 满减活动(充值 ≥ ¥200,立减 ¥20)
2. 新用户专享
目标:提高新用户转化率
优惠:
- 注册赠送 100 积分
- 首次充值额外赠送 20%
- 新手任务奖励(完成教程获得 50 积分)
3. 老用户回馈
目标:提高用户留存率
优惠:
- 连续充值奖励(连续 3 个月充值,额外赠送 10%)
- VIP 等级制度(累计充值达到阈值,享受永久折扣)
- 生日福利(生日当月充值额外赠送 15%)
4. 邀请裂变
目标:获取新用户
机制:
- 邀请人:被邀请人首次充值后,获得 10% 返利积分
- 被邀请人:注册额外获得 50 积分
- 阶梯奖励:邀请 10 人,额外奖励 500 积分
用户分层运营
1. 新用户(注册 ≤ 7 天)
策略:降低使用门槛,快速体验核心功能
动作:
- 赠送 100 积分(有效期 1 个月)
- 推送新手教程
- 首次充值额外赠送 20%
2. 活跃用户(月消耗 ≥ 500 积分)
策略:提高充值频次和金额
动作:
- 推送充值优惠活动
- 提供专属客服支持
- 邀请参与内测新功能
3. 沉睡用户(30 天未使用)
策略:唤醒用户,重新激活
动作:
- 赠送 50 积分(有效期 7 天)
- 推送新功能介绍
- 发送限时优惠券
4. 流失用户(90 天未使用)
策略:挽回用户
动作:
- 赠送 100 积分(有效期 30 天)
- 问卷调查(了解流失原因)
- 提供专属优惠(充值 5 折)
数据监控指标
1. 充值相关
- 充值转化率:充值用户数 / 注册用户数
- ARPU(Average Revenue Per User):总充值金额 / 活跃用户数
- 充值频次:用户平均充值次数
- 套餐分布:各套餐的选择占比
2. 消耗相关
- 日均消耗积分:每日消耗积分总量
- 服务使用分布:各 AI 服务的使用占比
- 积分利用率:已消耗积分 / 已充值积分
- 过期积分占比:过期积分 / 总赠送积分
3. 用户行为
- 首次充值时间:注册到首次充值的平均天数
- 复购率:二次充值用户数 / 首次充值用户数
- 用户生命周期价值(LTV):用户累计充值金额
- 流失率:30 天未使用用户占比
风险控制
1. 刷单风险
风险描述:恶意用户通过虚假充值、退款等方式获取积分
防控措施:
- 充值订单实名认证
- 异常充值行为监控(如:短时间内多次小额充值)
- 退款冷静期(充值后 24 小时内不可使用,退款不扣手续费)
- 积分冻结机制(可疑账号积分冻结 7 天)
2. 积分滥用
风险描述:用户通过漏洞或作弊手段获取大量积分
防控措施:
- API 调用频率限制
- 异常消耗行为监控(如:短时间内大量生成相同内容)
- 账号风控评分系统
- 人工审核机制
3. 成本失控
风险描述:AI API 成本突然上涨,导致亏损
防控措施:
- 与 AI 服务商签订长期合同,锁定价格
- 建立成本预警机制(月成本超过预算 20% 时告警)
- 动态调整积分消耗标准
- 自建模型降低依赖
4. 用户投诉
风险描述:积分扣除争议、生成失败不退款等
防控措施:
- 明确服务条款和退款政策
- 生成失败自动退还积分
- 提供申诉渠道
- 建立客服响应机制(24 小时内回复)
技术实现要点
1. 积分扣除原子性
问题:并发请求可能导致积分重复扣除或余额不足仍扣除
解决方案:使用数据库事务 + 乐观锁
async def consume_credits(user_id: int, amount: int) -> bool:
async with db.transaction():
# 使用 SELECT FOR UPDATE 锁定用户记录
user = await db.execute(
"SELECT * FROM users WHERE user_id = $1 FOR UPDATE",
user_id
)
if user.ai_credits_balance < amount:
raise InsufficientCreditsError("积分余额不足")
# 扣除积分
await db.execute(
"UPDATE users SET ai_credits_balance = ai_credits_balance - $1 WHERE user_id = $2",
amount, user_id
)
# 记录交易
await db.execute(
"INSERT INTO credit_transactions (user_id, amount, transaction_type) VALUES ($1, $2, 'consume')",
user_id, -amount
)
return True
2. 积分过期处理
问题:如何高效处理大量过期积分
解决方案:定时任务 + 批量处理
@celery.task
async def expire_credits():
# 查询今天过期的积分
expired_records = await db.execute(
"SELECT user_id, SUM(amount) as total FROM credit_transactions "
"WHERE expires_at::date = CURRENT_DATE AND credit_type IN ('gift', 'activity') "
"GROUP BY user_id"
)
for record in expired_records:
async with db.transaction():
# 扣除过期积分
await db.execute(
"UPDATE users SET ai_credits_balance = ai_credits_balance - $1 WHERE user_id = $2",
record.total, record.user_id
)
# 记录过期交易
await db.execute(
"INSERT INTO credit_transactions (user_id, amount, transaction_type, description) "
"VALUES ($1, $2, 'expire', '积分过期')",
record.user_id, -record.total
)
3. 积分消耗优先级
问题:用户有多种类型积分时,如何按优先级扣除
解决方案:分类查询 + 按序扣除
async def consume_credits_with_priority(user_id: int, amount: int):
# 查询用户所有可用积分(按过期时间排序)
available_credits = await db.execute(
"SELECT transaction_id, amount, credit_type, expires_at "
"FROM credit_transactions "
"WHERE user_id = $1 AND amount > 0 "
"ORDER BY expires_at NULLS LAST, credit_type DESC",
user_id
)
remaining = amount
consumed_records = []
for credit in available_credits:
if remaining <= 0:
break
consume_amount = min(credit.amount, remaining)
consumed_records.append({
'transaction_id': credit.transaction_id,
'amount': consume_amount
})
remaining -= consume_amount
if remaining > 0:
raise InsufficientCreditsError("积分余额不足")
# 批量扣除
async with db.transaction():
for record in consumed_records:
await db.execute(
"UPDATE credit_transactions SET amount = amount - $1 WHERE transaction_id = $2",
record['amount'], record['transaction_id']
)
附录
A. 竞品对比
| 平台 | 计费方式 | 充值比例 | 图片生成 | 视频生成 | 优势 |
|---|---|---|---|---|---|
| Jointo | 积分制 | 1元 = 10积分 | 2积分/张 | 100积分/5秒 | 灵活、透明 |
| Midjourney | 订阅制 | $10/月 | 无限生成 | 不支持 | 图片质量高 |
| Runway | 积分制 | $12 = 625积分 | 5积分/张 | 5积分/秒 | 视频专业 |
| 剪映 | 会员制 | ¥30/月 | 有限次数 | 有限次数 | 集成度高 |
B. 术语表
| 术语 | 英文 | 说明 |
|---|---|---|
| 积分 | Credits | 平台虚拟货币,用于消费 AI 服务 |
| 充值 | Recharge | 用户购买积分的行为 |
| 消耗 | Consume | 使用 AI 服务扣除积分 |
| 赠送积分 | Gift Credits | 平台赠送的积分,有有效期 |
| 充值积分 | Paid Credits | 用户付费购买的积分,永久有效 |
| ARPU | Average Revenue Per User | 平均每用户收入 |
| LTV | Lifetime Value | 用户生命周期价值 |
C. 更新日志
| 版本 | 日期 | 更新内容 |
|---|---|---|
| v1.0 | 2025-01-15 | 初始版本,完整的积分计费系统方案 |
文档版本:v1.0
创建日期:2025-01-15
最后更新:2025-01-15
维护人员:产品团队 & 技术团队