# 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) ```python 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 │ │ 已退还 │ └─────────┘ ```