# CODEX 执行文档 ## 0. 任务标题 为图片生产系统实现 FastAPI + Temporal MVP 骨架 ## 1. 任务目标 在现有仓库中搭建一个可运行的最小版本,满足以下目标: - 提供 FastAPI 服务 - 提供 Temporal workflow 和 worker - 支持两条流程: - 低端客户:全自动 `auto_basic` - 中端客户:半自动 `semi_pro` - 提供最小接口: - 创建订单 - 查询订单 - 查询订单资产 - 提交审核结果 - 代码应可本地启动,结构清晰,便于后续扩展 ## 2. 背景说明 这是一个图片生产流水线系统,面向两类客户: ### 低端客户 要求批量、快速、低成本。 流程为: 1. 选择模特和固定姿势 2. 换装 3. 换场景 4. 基础质检 5. 导出结果 ### 中端客户 要求成图质量更高,允许人工轻审核。 流程为: 1. 选择模特和姿势 2. 换装 3. 换场景 4. 衣服材质增强 5. 面部增强 6. 面部融合 7. 自动质检 8. 等待人工审核 9. 通过后导出,或从指定步骤重跑 ## 3. 本次范围 只实现 **MVP 骨架**,不要求接入真实 AI 平台。 本次只需要: - FastAPI 项目结构 - Temporal workflow / activity / worker 结构 - Pydantic 请求响应模型 - 先用 mock activity 代替真实图像处理 - 数据层先可用 SQLite + SQLAlchemy - 资产先用本地路径或假 URI - review signal 可跑通 本次不需要: - 真正的换装算法 - 真正的图像增强 - 真实对象存储 - 权限系统 - 完整后台页面 - 第三方平台集成 ## 4. 技术栈要求 - Python 3.11+ - FastAPI - Uvicorn - SQLAlchemy 2.x - Pydantic v2 - Temporal Python SDK - Alembic - pytest ## 5. 目录结构要求 严格按以下目录创建: ```text app/ main.py config/ settings.py api/ routers/ health.py orders.py assets.py reviews.py workflows.py schemas/ order.py asset.py review.py workflow.py application/ services/ order_service.py workflow_service.py review_service.py asset_service.py domain/ enums.py models/ order.py asset.py review_task.py workflow_run.py workflow_step.py infra/ db/ base.py session.py models/ order.py asset.py review_task.py workflow_run.py workflow_step.py temporal/ client.py task_queues.py workers/ runner.py workflows/ types.py low_end_pipeline.py mid_end_pipeline.py activities/ tryon_activities.py scene_activities.py texture_activities.py face_activities.py fusion_activities.py qc_activities.py export_activities.py review_activities.py tests/ ``` ## 6. 代码风格要求 - 使用类型注解 - 使用 async 风格 - 保持模块边界清晰 - route 中不要写业务逻辑 - workflow 中不要直接访问数据库 - activity 中允许 I/O 和 mock 处理 - 所有核心函数写 docstring - 所有枚举统一放在 `domain/enums.py` ## 7. 核心业务枚举 实现以下枚举: - `CustomerLevel`: `low`, `mid` - `ServiceMode`: `auto_basic`, `semi_pro` - `OrderStatus`: `created`, `running`, `waiting_review`, `succeeded`, `failed`, `cancelled` - `WorkflowStepName`: `prepare_model`, `tryon`, `scene`, `texture`, `face`, `fusion`, `qc`, `export`, `review` - `ReviewDecision`: `approve`, `rerun_scene`, `rerun_face`, `rerun_fusion`, `reject` ## 8. 数据模型要求 ### orders 字段至少包含: - id - customer_level - service_mode - status - model_id - pose_id - garment_asset_id - scene_ref_asset_id - final_asset_id - created_at - updated_at ### assets 字段至少包含: - id - order_id - asset_type - step_name - uri - metadata_json - created_at ### review_tasks 字段至少包含: - id - order_id - status - decision - reviewer_id - selected_asset_id - comment - created_at - updated_at ### workflow_runs 字段至少包含: - id - order_id - workflow_id - workflow_type - status - current_step - created_at - updated_at ### workflow_steps 字段至少包含: - id - workflow_run_id - step_name - step_status - input_json - output_json - error_message - started_at - ended_at ## 9. API 需求 ### 9.1 健康检查 `GET /healthz` 返回: ```json {"status":"ok"} ``` ### 9.2 创建订单 `POST /api/v1/orders` 请求体: ```json { "customer_level": "low", "service_mode": "auto_basic", "model_id": 101, "pose_id": 3, "garment_asset_id": 9001, "scene_ref_asset_id": 8001 } ``` 行为: - 创建订单 - 创建 workflow_run - 启动 Temporal workflow - 返回 order_id 和 workflow_id ### 9.3 查询订单详情 `GET /api/v1/orders/{order_id}` 返回: - 基本订单信息 - 当前状态 - 当前步骤 - 最终资产(如果有) ### 9.4 查询订单资产 `GET /api/v1/orders/{order_id}/assets` 返回该订单相关所有资产列表。 ### 9.5 查询待审核列表 `GET /api/v1/reviews/pending` 返回所有 `waiting_review` 的订单。 ### 9.6 提交审核结果 `POST /api/v1/reviews/{order_id}/submit` 请求体示例: ```json { "decision": "approve", "reviewer_id": 77, "selected_asset_id": 1001, "comment": "通过" } ``` 或: ```json { "decision": "rerun_face", "reviewer_id": 77, "comment": "面部不自然,重跑 face" } ``` 行为: - 记录 review_task - 向对应 workflow 发送 signal ### 9.7 查询工作流状态 `GET /api/v1/workflows/{order_id}` 返回: - workflow_id - workflow_status - current_step - step 列表 ## 10. Workflow 需求 ### 10.1 低端流程 `LowEndPipelineWorkflow` 顺序如下: 1. prepare_model 2. tryon 3. scene 4. qc 5. export 要求: - 每一步都调用 activity - 每一步都记录 step 状态 - qc 不通过时可直接标记失败 - export 完成后写订单成功状态 ### 10.2 中端流程 `MidEndPipelineWorkflow` 顺序如下: 1. prepare_model 2. tryon 3. scene 4. texture 5. face 6. fusion 7. qc 8. wait for review signal 9. approve 后 export 10. rerun_face 时回到 face 11. rerun_fusion 时回到 fusion 12. rerun_scene 时回到 scene 要求: - 使用 workflow signal 实现人工审核回流 - 在等待审核时,订单状态应更新为 `waiting_review` - 最终通过后导出 ## 11. Activity 需求 先全部实现为 mock 版本,统一返回假结果。 ### tryon 输入: - order_id - source asset refs 输出: - 新 asset uri - step result ### scene 输入: - 上一步结果 输出: - 场景替换后 asset ### texture 输入: - 上一步结果 输出: - 材质增强 asset ### face 输入: - 上一步结果 输出: - 面部增强 asset ### fusion 输入: - 主图 + face 输出 输出: - 融合后的 asset ### qc 输入: - 当前图 输出: - score - pass/fail - candidate assets 可先只返回一张 ### export 输入: - 最终通过的 asset 输出: - final asset ## 12. Temporal 实现要求 - workflow 输入使用 dataclass - workflow id 使用 `order-{order_id}` - task queue 至少拆成: - `image-pipeline-control` - `image-pipeline-image-gen` - `image-pipeline-post-process` - `image-pipeline-qc` - `image-pipeline-export` - activity 配置合理的 `start_to_close_timeout` - 为常见 activity 加 retry policy ## 13. Mock 策略 为了让系统可运行,所有 activity 先返回固定结构,例如: ```json { "step_name": "tryon", "success": true, "asset_id": 10001, "uri": "mock://orders/1/tryon/result.png", "score": 0.95, "message": "mock success" } ``` 资产可直接写入数据库,不要求真实文件存在。 ## 14. 验收标准 完成后应满足: 1. `uvicorn app.main:app --reload` 可以启动 2. Temporal worker 可以启动 3. 创建低端订单后,workflow 能跑到成功 4. 创建中端订单后,workflow 能停在 `waiting_review` 5. 提交 `approve` 后,中端流程可以继续到成功 6. 提交 `rerun_face` 后,中端流程会回到 `face` 7. 所有 API 有基础错误处理 8. 代码能通过基础 lint 和测试 ## 15. 输出要求 请按以下顺序产出: 1. 先创建项目目录和核心文件 2. 再实现 domain enums 和 db models 3. 再实现 API schemas 和 routers 4. 再实现 application services 5. 再实现 Temporal client / workflows / activities / worker 6. 最后补充 README,写明本地启动方法 ## 16. README 至少包含 - 环境要求 - 安装依赖 - 启动 FastAPI - 启动 Temporal server - 启动 worker - 调用示例 - 中端审核 signal 示例 ## 17. 不要做的事 - 不要擅自改目录结构 - 不要引入额外复杂框架 - 不要接入真实第三方 AI 平台 - 不要写前端页面 - 不要把所有逻辑塞到一个文件 - 不要省略测试 - 不要跳过中端审核 signal ## 18. 开发优先级 优先级从高到低: 1. 项目骨架 2. 低端 workflow 跑通 3. 中端 workflow + review signal 跑通 4. API 完整 5. README 和测试 ## 19. 建议实现顺序 建议你按以下顺序提交代码: - 第 1 批:目录、配置、枚举、数据库模型 - 第 2 批:订单 API、创建订单 service、workflow 启动 - 第 3 批:低端 workflow + mock activities - 第 4 批:中端 workflow + signal - 第 5 批:审核 API、README、测试 ## 20. 交付物 最终需要包含: - 可运行源码 - Alembic 初始迁移 - 示例 `.env.example` - README - 基础测试 --- ## 给 Codex 的附加执行指令 请按以下工作方式执行: 1. 先阅读整个任务文档,再开始编码。 2. 先输出一个简短实施计划,再开始改动文件。 3. 每完成一个阶段,就更新一次当前进展。 4. 遇到不明确处时,优先采用最小可运行方案,不要过度设计。 5. 保持每个提交块职责单一,便于审查。 6. 若某一步无法完整实现,先给出可运行的 stub,不要阻塞整体流程。 7. 所有 mock 返回值结构保持一致。 8. 所有关键函数都加类型注解。 9. 尽量保持文件短小,单文件不要过度膨胀。 10. 先保证能跑通,再考虑优雅性。 --- ## 适合直接发给 Codex 的首条消息 ```md 请在当前仓库中实现一个 FastAPI + Temporal 的 MVP 图片流水线系统。 目标: - 支持低端全自动 auto_basic - 支持中端半自动 semi_pro - 提供创建订单、查询订单、查询资产、提交审核、查询 workflow 状态接口 - 使用 SQLite + SQLAlchemy + FastAPI + Temporal Python SDK - 真实图像处理先全部 mock 要求: - 严格按我提供的目录结构创建文件 - route 不写业务逻辑 - workflow 只做编排 - activity 做 mock 执行 - 中端流程必须支持 review signal,并支持 rerun_face / rerun_fusion / rerun_scene - 输出 README、.env.example、alembic 初始迁移、基础测试 交付标准: - API 可启动 - worker 可启动 - 低端流程可跑通 - 中端流程可停在 waiting_review,审核后可继续 ```