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

AI 服务流程图

日期: 2026-01-30
版本: 1.0

目录

  1. 整体架构
  2. 图片生成流程
  3. 任务状态流转
  4. 积分系统集成
  5. 文件存储流程
  6. 错误处理流程

整体架构

┌─────────────────────────────────────────────────────────────────────┐
│                           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 │
│ 已退还   │
└─────────┘