You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
20 KiB
20 KiB
AI 服务流程图
日期: 2026-01-30
版本: 1.0
目录
整体架构
┌─────────────────────────────────────────────────────────────────────┐
│ AI 服务架构 │
└─────────────────────────────────────────────────────────────────────┘
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Client │─────▶│ FastAPI │─────▶│ Celery │─────▶│ AI │
│ │ │ API │ │ Worker │ │ Provider │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ DB │ │ RabbitMQ │ │ MinIO │
│PostgreSQL│ │ Queue │ │ Storage │
└──────────┘ └──────────┘ └──────────┘
图片生成流程
完整流程图
┌─────────────────────────────────────────────────────────────────────┐
│ 图片生成完整流程 │
└─────────────────────────────────────────────────────────────────────┘
客户端 API 层 服务层 任务层 AI Provider 文件存储
│ │ │ │ │ │
│ 1. POST /ai/ │ │ │ │ │
│ generate-image │ │ │ │ │
├───────────────────▶│ │ │ │ │
│ │ │ │ │ │
│ │ 2. 验证请求 │ │ │ │
│ │ & 认证 │ │ │ │
│ │ │ │ │ │
│ │ 3. 调用 AI │ │ │ │
│ │ Service │ │ │ │
│ ├──────────────────▶│ │ │ │
│ │ │ │ │ │
│ │ │ 4. 预扣积分 │ │ │
│ │ │ (Credit Service) │ │ │
│ │ │ │ │ │
│ │ │ 5. 创建 AI Job │ │ │
│ │ │ (status=PENDING) │ │ │
│ │ │ │ │ │
│ │ │ 6. 提交 Celery │ │ │
│ │ │ 任务 │ │ │
│ │ ├──────────────────▶│ │ │
│ │ │ │ │ │
│ 7. 返回 Job ID │ │ │ │ │
│ & Task ID │ │ │ │ │
│◀───────────────────┤ │ │ │ │
│ │ │ │ │ │
│ │ │ │ 8. Worker 接收任务 │ │
│ │ │ │ 创建独立 Event Loop │ │
│ │ │ │ │ │
│ │ │ │ 9. 更新状态 │ │
│ │ │ │ (PROCESSING, 10%) │ │
│ │ │ │ │ │
│ │ │ │ 10. 获取 Job 信息 │ │
│ │ │ │ (consumption_log_id)│ │
│ │ │ │ │ │
│ │ │ │ 11. 创建 AI Provider│ │
│ │ │ │ (OpenAIProvider) │ │
│ │ │ │ │ │
│ │ │ │ 12. 更新状态 │ │
│ │ │ │ (PROCESSING, 30%) │ │
│ │ │ │ │ │
│ │ │ │ 13. 调用 DALL-E 3 │ │
│ │ │ ├─────────────────────▶│ │
│ │ │ │ │ │
│ │ │ │ 14. 返回图片 URL │ │
│ │ │ │◀─────────────────────┤ │
│ │ │ │ │ │
│ │ │ │ 15. 更新状态 │ │
│ │ │ │ (PROCESSING, 70%) │ │
│ │ │ │ │ │
│ │ │ │ 16. 下载图片 │ │
│ │ │ │ (3MB+) │ │
│ │ │ ├─────────────────────▶│ │
│ │ │ │◀─────────────────────┤ │
│ │ │ │ │ │
│ │ │ │ 17. 上传到 MinIO │ │
│ │ │ ├──────────────────────────────────────▶│
│ │ │ │ │ │
│ │ │ │ 18. 返回文件元数据 │ │
│ │ │ │◀──────────────────────────────────────┤
│ │ │ │ │ │
│ │ │ │ 19. 更新状态 │ │
│ │ │ │ (COMPLETED, 100%) │ │
│ │ │ │ + output_data │ │
│ │ │ │ │ │
│ │ │ │ 20. 确认积分消耗 │ │
│ │ │ │ (Credit Service) │ │
│ │ │ │ │ │
│ 21. 轮询查询 │ │ │ │ │
│ GET /ai/jobs/{id} │ │ │ │ │
├───────────────────▶│ │ │ │ │
│ │ │ │ │ │
│ 22. 返回完整结果 │ │ │ │ │
│ (status, progress,│ │ │ │ │
│ output_data) │ │ │ │ │
│◀───────────────────┤ │ │ │ │
│ │ │ │ │ │
关键步骤说明
1. API 请求(步骤 1-3)
POST /api/v1/ai/generate-image
Authorization: Bearer {token}
Content-Type: application/json
{
"prompt": "A beautiful sunset over the ocean",
"width": 1024,
"height": 1024,
"model": "dall-e-3"
}
2. 积分预扣(步骤 4)
- 根据模型和参数计算所需积分
- 创建
consumption_log记录(status=PENDING) - 从用户账户预扣积分
3. 任务创建(步骤 5-6)
- 创建
ai_jobs记录(status=PENDING) - 关联
consumption_log_id - 提交到 Celery 队列
4. 异步执行(步骤 8-20)
- Celery Worker 接收任务
- 创建独立的 Event Loop(避免冲突)
- 调用 AI Provider 生成图片
- 下载并上传到自有存储
- 更新任务状态和结果
5. 积分确认(步骤 20)
- 任务成功:确认积分消耗(status=CONFIRMED)
- 任务失败:退还积分(status=REFUNDED)
任务状态流转
┌─────────────────────────────────────────────────────────────────────┐
│ 任务状态流转图 │
└─────────────────────────────────────────────────────────────────────┘
┌──────────┐
│ PENDING │ (1) 任务创建
│ 待处理 │
└─────┬────┘
│
│ Worker 接收
▼
┌──────────┐
│PROCESSING│ (2) 任务执行中
│ 处理中 │ Progress: 0% → 100%
└─────┬────┘
│
┌─────────┴─────────┐
│ │
成功 ▼ ▼ 失败
┌──────────┐ ┌──────────┐
│COMPLETED │ │ FAILED │ (4) 任务失败
│ 已完成 │ (3) │ 失败 │
└──────────┘ └──────────┘
│ │
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 确认积分 │ │ 退还积分 │
└──────────┘ └──────────┘
状态码说明:
- 1 (PENDING): 任务已创建,等待执行
- 2 (PROCESSING): 任务执行中
- 3 (COMPLETED): 任务成功完成
- 4 (FAILED): 任务执行失败
- 5 (CANCELLED): 任务被取消
- 6 (TIMEOUT): 任务超时
积分系统集成
┌─────────────────────────────────────────────────────────────────────┐
│ 积分系统流程 │
└─────────────────────────────────────────────────────────────────────┘
用户请求 AI Service Credit Service 数据库
│ │ │ │
│ 1. 生成图片请求 │ │ │
├───────────────────────▶│ │ │
│ │ │ │
│ │ 2. 预扣积分 │ │
│ ├─────────────────────▶│ │
│ │ │ │
│ │ │ 3. 检查余额 │
│ │ ├───────────────────▶│
│ │ │ │
│ │ │ 4. 创建消费记录 │
│ │ │ (status=PENDING) │
│ │ ├───────────────────▶│
│ │ │ │
│ │ 5. 返回 │ │
│ │ consumption_log_id │ │
│ │◀─────────────────────┤ │
│ │ │ │
│ │ 6. 创建任务 │ │
│ │ (关联 consumption) │ │
│ ├──────────────────────────────────────────▶│
│ │ │ │
│ 7. 返回 Job ID │ │ │
│◀───────────────────────┤ │ │
│ │ │ │
│ │ │ │
│ ... 任务执行中 ... │ │ │
│ │ │ │
│ │ │ │
│ 8. 任务完成/失败 │ │ │
│ │ │ │
│ │ 9. 确认/退还积分 │ │
│ ├─────────────────────▶│ │
│ │ │ │
│ │ │ 10. 更新消费记录 │
│ │ │ (CONFIRMED/ │
│ │ │ REFUNDED) │
│ │ ├───────────────────▶│
│ │ │ │
│ │ 11. 完成 │ │
│ │◀─────────────────────┤ │
│ │ │ │
积分状态流转:
┌─────────┐ 任务成功 ┌───────────┐
│ PENDING ├──────────────▶│ CONFIRMED │
│ 待确认 │ │ 已确认 │
└────┬────┘ └───────────┘
│
│ 任务失败
▼
┌─────────┐
│REFUNDED │
│ 已退还 │
└─────────┘