- 认证:双 Token JWT 方案,支持邮箱/手机号登录 - 组织:多对多关系(品牌方↔代理商↔达人) - 文件:阿里云 OSS 直传,分片上传,最大 500MB - AI:全部走中转服务商 - 审核:终审默认开启,代理商默认有强制通过权 - 技术:PostgreSQL + Redis + SSE Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.1 KiB
5.1 KiB
项目约定与设计决策
本文档记录容易被误解的设计决策,确保开发一致性。
AI 服务配置
重要:系统使用 AI 中转服务商,不直连 AI 厂商!
- 使用 OneAPI / OneInAll / OpenRouter 等中转服务商
- 中转服务商统一了不同 AI 厂商(豆包、通义、DeepSeek 等)的接口
- 只需配置中转服务商的 API Key 和 Base URL
- 具体使用哪个底层模型,由中转服务商的模型名称决定
# 正确 ✓
AI_PROVIDER = "oneapi"
AI_API_BASE_URL = "https://api.oneinall.ai/v1"
# 错误 ✗ - 不直接配置 AI 厂商
AI_PROVIDER = "doubao"
用户认证
登录方式
支持两种登录方式(二选一):
- 邮箱 + 密码
- 手机号 + 验证码
注册流程
- 自助注册,支持邮箱注册或手机号注册
- 邮箱注册后,可在设置中绑定手机号,之后可用手机号登录
- 手机号注册后,可在设置中绑定邮箱,之后可用邮箱登录
- 两种登录方式关联同一账号
JWT 双 Token 方案
后端设计:
// POST /api/v1/auth/login 返回
{
"accessToken": "xxx", // 有效期 15 分钟
"refreshToken": "xxx", // 有效期 7 天
"user": {
"id": "user-001",
"name": "张三",
"email": "zhang@example.com",
"phone": "138****8888",
"role": "agency",
"tenantId": "tenant-001",
"tenantName": "美妆品牌A"
}
}
// POST /api/v1/auth/refresh 刷新 Token
// 请求:{ "refreshToken": "xxx" }
// 返回:{ "accessToken": "新的 accessToken" }
前端设计(Axios 拦截器):
- Token 存入 localStorage
- 请求拦截器:自动添加
Authorization: Bearer {accessToken} - 响应拦截器:
- 监听 401 错误
- 触发后暂停后续请求
- 调用
/refresh接口换新 Token - 更新本地存储
- 自动重发失败的原请求
- 若刷新也失败,清空存储并跳转登录页
多租户与组织关系
租户定义
- 租户 = 品牌方
- 数据隔离按品牌方划分(品牌方 A 看不到品牌方 B 的数据)
组织关系(多对多)
品牌方 ←→ 代理商(多对多)
代理商 ←→ 达人(多对多)
- 一个品牌方可以有多个代理商
- 一个代理商可以服务多个品牌方
- 一个代理商可以有多个达人
- 一个达人可以服务多个代理商
注册与邀请流程
- 品牌方:自助注册
- 代理商:自助注册 → 被品牌方邀请加入
- 达人:自助注册 → 被代理商邀请加入
任务分配流程
品牌方发布项目
↓
分配给多个代理商
↓
代理商选择达人并分配任务(可多次选同一达人)
↓
达人收到任务:宣传任务(1)、宣传任务(2)...
↓
达人只能接受/完成任务,不能自己创建任务
语义化 ID
- 代理商 ID:
AG+ 6位数字,如AG123456 - 达人 ID:
CR+ 6位数字,如CR123456 - 品牌方 ID:
BR+ 6位数字,如BR123456
文件存储
存储服务
- 阿里云 OSS
- 公开访问(无需签名 URL)
上传方式
- 前端直传 OSS
- 后端提供 STS 临时凭证或签名
- 前端使用阿里云 OSS SDK 直传
文件大小限制
- 最大 500MB
- 采用分片上传(Multipart Upload)
- 适应达人上传高清原片的需求
支持的文件类型
| 类型 | 格式 |
|---|---|
| 脚本 | .docx, .pdf, .xlsx, .txt, .pptx |
| 视频 | .mp4, .mov, .webm |
| 图片 | .jpg, .png, .gif |
AI 审核能力
统一走中转
所有 AI 能力都通过中转服务商调用,不单独接入其他服务:
| 能力 | 实现方式 |
|---|---|
| 文本分析 | 中转 LLM |
| 语音转文字 (ASR) | 中转(如 Whisper) |
| 字幕识别 (OCR) | 中转视觉模型 |
| Logo/画面检测 | 中转视觉模型 + Brief/规则 |
模型列表
- 从后端动态获取(后端可从中转商 API 拉取可用模型)
- 前端不硬编码模型列表
Logo 检测逻辑
- 将 Brief 中的竞品信息 + 平台规则传给 AI
- AI 分析视频画面,识别是否出现竞品 Logo
- 不需要自训练模型,依赖多模态 AI 的理解能力
审核流程
品牌方终审
- 默认开启
- 品牌方可在设置中关闭
强制通过权
- 代理商默认拥有
- 品牌方可按代理商关闭此权限
申诉机制
- 每个任务初始 1 次 申诉机会
- 用完后可向代理商申请增加
- 代理商可同意/拒绝申请
Brief 与规则
平台规则库
- 抖音/小红书/B站等平台规则
- 手动录入,后台管理
- 规则更新需人工维护
Brief 解析
- AI 自动解析 Brief 文档
- 提取:卖点、违禁词、品牌调性要求
- 支持格式:PDF/Word/Excel/PPT/图片
技术选型
| 项目 | 选择 |
|---|---|
| 数据库 | PostgreSQL |
| 缓存 | Redis |
| 消息推送 | SSE(Server-Sent Events) |
| 邮件/短信 | 暂不实现 |
| 文件存储 | 阿里云 OSS |
| AI 服务 | 中转服务商(OneAPI 等) |
其他约定
(后续添加)