526 lines
43 KiB
Markdown
526 lines
43 KiB
Markdown
# TravelContentCreator 架构重设计方案
|
||
|
||
## 一、现状架构图 (As-Is)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────────────────┐
|
||
│ zwy_picture (Java Spring Boot) │
|
||
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────────────────┐ │
|
||
│ │ PosterGenerateQueue │ │ NoteCreatorQueue │ │ KeywordParseQueueConsumer │ │
|
||
│ │ Consumer/Producer │ │ Consumer/Producer │ │ │ │
|
||
│ └──────────┬──────────┘ └──────────┬──────────┘ └────────────────┬────────────────┘ │
|
||
│ │ │ │ │
|
||
│ └────────────────────────┼──────────────────────────────┘ │
|
||
│ │ │
|
||
│ ┌───────────▼───────────┐ │
|
||
│ │ ExternalServiceClient │ HTTP Calls │
|
||
│ └───────────┬───────────┘ │
|
||
└──────────────────────────────────────┼───────────────────────────────────────────────────┘
|
||
│
|
||
═══════════════════╪═══════════════════ Network Boundary
|
||
│
|
||
┌──────────────────────────────────────▼───────────────────────────────────────────────────┐
|
||
│ TravelContentCreator (Python FastAPI) │
|
||
│ │
|
||
│ ┌────────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ api/main.py (FastAPI App) │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ /tweet/* │ │ /poster/* │ │ /prompt/* │ │ /document/* │ │/integration/│ │ │
|
||
│ │ │ Router │ │ Router │ │ Router │ │ Router │ │ Router │ │ │
|
||
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │
|
||
│ └─────────┼───────────────┼───────────────┼───────────────┼───────────────┼──────────┘ │
|
||
│ │ │ │ │ │ │
|
||
│ ┌─────────▼───────────────▼───────────────▼───────────────▼───────────────▼──────────┐ │
|
||
│ │ api/services/ (服务层 - 问题区域) │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ tweet.py (757行) poster.py (3032行!) integration_service.py (796行) │ │ │
|
||
│ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────────┐│ │ │
|
||
│ │ │ │ TweetService │ │ PosterService │ │ IntegrationService ││ │ │
|
||
│ │ │ │ - TopicGen │ │ - 模板管理 │ │ - XHS搜索 ││ │ │
|
||
│ │ │ │ - ContentGen │ │ - 图片处理 │ │ - 文档整合 ││ │ │
|
||
│ │ │ │ - ContentJudge │ │ - LLM调用 │ │ - Cookie管理 ││ │ │
|
||
│ │ │ │ - ID映射 │ │ - PSD生成 │ │ ││ │ │
|
||
│ │ │ │ │ │ - Fabric.js生成 │ │ ││ │ │
|
||
│ │ │ │ │ │ - 装饰图生成 │ │ ││ │ │
|
||
│ │ │ └─────────────────┘ └─────────────────┘ └─────────────────────────────┘│ │ │
|
||
│ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ database_service.py (39KB! - 所有表的CRUD混在一起) │ │ │
|
||
│ │ │ prompt_service.py (27KB) prompt_builder.py (18KB) │ │ │
|
||
│ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │
|
||
│ └────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌────────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ core/ (核心算法层) │ │
|
||
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │
|
||
│ │ │ ai/ │ │ config/ │ │ document/ │ │ xhs_spider/ │ │ │
|
||
│ │ │ - AIAgent │ │ - Manager │ │ - Extractor │ │ - Data_Spider │ │ │
|
||
│ │ │ │ │ - Models │ │ - Integrator │ │ - XHS_Apis │ │ │
|
||
│ │ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
|
||
│ │ │ xhs_adapter │ │ doc_adapter │ │ cookie_mgr │ │ │
|
||
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
|
||
│ └────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌────────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ tweet/ (文案生成算法) │ │
|
||
│ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │
|
||
│ │ │ TopicGenerator │ │ ContentGenerator │ │ ContentJudger │ │ │
|
||
│ │ │ (149行) │ │ (142行) │ │ (212行) │ │ │
|
||
│ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ │
|
||
│ └────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌────────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ poster/ (海报生成算法) │ │
|
||
│ │ ┌──────────────────┐ ┌─────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ PosterGenerator │ │ templates/ │ │ │
|
||
│ │ │ (121行) │ │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ │ │
|
||
│ │ │ │ │ │VibrantTemplate│ │BusinessTemplate│ │CollageTemplate│ │ │ │
|
||
│ │ │ │ │ │(1757行!) │ │(16KB) │ │(4KB) │ │ │ │
|
||
│ │ └──────────────────┘ │ └───────────────┘ └───────────────┘ └───────────────┘ │ │ │
|
||
│ │ └─────────────────────────────────────────────────────────┘ │ │
|
||
│ └────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌────────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ utils/ (工具层) │ │
|
||
│ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │
|
||
│ │ │ file_io.py │ │ image_processor │ │ prompts.py │ │ │
|
||
│ │ │ (7KB) │ │ (11KB) │ │ (18KB) │ │ │
|
||
│ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ │
|
||
│ └────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
└──────────────────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 二、核心问题诊断
|
||
|
||
### 2.1 架构问题
|
||
|
||
| 问题类型 | 具体表现 | 影响 |
|
||
|---------|---------|------|
|
||
| **God Object** | `poster.py` 3032行,承担7+职责 | 难以维护、测试、扩展 |
|
||
| **职责混乱** | `api/services/` 同时包含业务逻辑和算法调用 | 层次不清 |
|
||
| **重复代码** | `tweet.py` 和 `poster.py` 都有ID映射、数据库调用 | DRY违反 |
|
||
| **依赖混乱** | Service内部直接new DatabaseService | 无法测试、无法替换 |
|
||
| **同步阻塞** | async函数中调用同步DB操作 | 性能瓶颈 |
|
||
| **缺乏抽象** | 模板直接硬编码渲染逻辑 | 扩展困难 |
|
||
|
||
### 2.2 与 zwy_picture 对接问题
|
||
|
||
| 问题 | 现状 | 影响 |
|
||
|-----|------|------|
|
||
| 无批量接口 | Java端自己实现并发 | 网络开销大 |
|
||
| 无任务状态 | 长任务无法追踪 | 用户体验差 |
|
||
| 无重试机制 | 失败即终止 | 可靠性低 |
|
||
| 响应格式不统一 | 各接口格式不同 | 对接复杂 |
|
||
|
||
---
|
||
|
||
## 三、目标架构图 (To-Be)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────────────────┐
|
||
│ zwy_picture (Java Spring Boot) │
|
||
│ ┌─────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Task Queue Layer (已有,保持) │ │
|
||
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │
|
||
│ │ │ PosterGenQueue │ │ NoteCreatorQueue│ │ KeywordParseQueue│ │ │
|
||
│ │ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │ │
|
||
│ └───────────┼────────────────────┼────────────────────┼────────────────────────────┘ │
|
||
│ └────────────────────┼────────────────────┘ │
|
||
│ │ │
|
||
│ ┌───────────▼───────────┐ │
|
||
│ │ AIGCServiceClient │ 统一的AIGC服务客户端 │
|
||
│ │ - submitTask() │ (新增:支持批量、状态查询) │
|
||
│ │ - getTaskStatus() │ │
|
||
│ │ - cancelTask() │ │
|
||
│ └───────────┬───────────┘ │
|
||
└───────────────────────────────────┼──────────────────────────────────────────────────────┘
|
||
│
|
||
═══════════════════╪═══════════════════ Network Boundary
|
||
│
|
||
┌───────────────────────────────────▼──────────────────────────────────────────────────────┐
|
||
│ TravelContentCreator (Python FastAPI) - 重构后 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
|
||
│ │ API Gateway Layer (网关层) │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ api/main.py │ │ │
|
||
│ │ │ - 统一异常处理中间件 │ │ │
|
||
│ │ │ - 请求日志中间件 │ │ │
|
||
│ │ │ - 认证中间件 (可选) │ │ │
|
||
│ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
|
||
│ │ │ /v2/task/* │ │ /v2/content/│ │ /v2/poster/*│ │ /v2/data/* │ │ /v2/spider/*│ │ │
|
||
│ │ │ 任务管理 │ │ 内容生成 │ │ 海报生成 │ │ 基础数据 │ │ 爬虫服务 │ │ │
|
||
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │
|
||
│ └─────────┼───────────────┼───────────────┼───────────────┼───────────────┼──────────┘ │
|
||
│ │ │ │ │ │ │
|
||
│ ┌─────────▼───────────────▼───────────────▼───────────────▼───────────────▼──────────┐ │
|
||
│ │ Application Service Layer (应用服务层) │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │
|
||
│ │ │ TaskOrchestrator │ │ ContentService │ │ PosterService │ │ │
|
||
│ │ │ (新增) │ │ (精简) │ │ (精简) │ │ │
|
||
│ │ │ - 任务调度 │ │ - 协调内容生成 │ │ - 协调海报生成 │ │ │
|
||
│ │ │ - 状态管理 │ │ - 调用算法层 │ │ - 调用算法层 │ │ │
|
||
│ │ │ - 进度通知 │ │ │ │ │ │ │
|
||
│ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
|
||
│ │ │ SpiderService │ │ DataService │ │ │
|
||
│ │ │ - XHS搜索协调 │ │ - 基础数据CRUD │ │ │
|
||
│ │ └──────────────────┘ └──────────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ┌───────────────────────────────────────▼─────────────────────────────────────────────┐ │
|
||
│ │ Domain Layer (领域层 - 核心算法) │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ content/ (内容生成领域) │ │ │
|
||
│ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │
|
||
│ │ │ │TopicEngine │ │ContentEngine │ │JudgeEngine │ │PromptEngine │ │ │ │
|
||
│ │ │ │- 选题生成 │ │- 内容生成 │ │- 内容审核 │ │- 提示词构建 │ │ │ │
|
||
│ │ │ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │
|
||
│ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ poster/ (海报生成领域) │ │ │
|
||
│ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │
|
||
│ │ │ │TemplateEngine│ │RenderEngine │ │ExportEngine │ │ImageEngine │ │ │ │
|
||
│ │ │ │- 模板管理 │ │- PNG渲染 │ │- PSD导出 │ │- 图片处理 │ │ │ │
|
||
│ │ │ │- 模板选择 │ │- JSON渲染 │ │- Fabric导出 │ │- 尺寸调整 │ │ │ │
|
||
│ │ │ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │
|
||
│ │ │ │ │ │
|
||
│ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │
|
||
│ │ │ │ templates/ (模板实现) │ │ │ │
|
||
│ │ │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │ │
|
||
│ │ │ │ │ Vibrant │ │ Business │ │ Collage │ │ Custom... │ │ │ │ │
|
||
│ │ │ │ │ (拆分后) │ │ (拆分后) │ │ │ │ │ │ │ │ │
|
||
│ │ │ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │ │ │
|
||
│ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │
|
||
│ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────────────────────┐ │ │
|
||
│ │ │ spider/ (爬虫领域) │ │ │
|
||
│ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │
|
||
│ │ │ │ XHSCrawler │ │ CookiePool │ │ MediaDownload│ │ │ │
|
||
│ │ │ │ - 搜索 │ │ - Cookie轮换 │ │ - 图片下载 │ │ │ │
|
||
│ │ │ │ - 详情获取 │ │ - 有效性检测 │ │ - 视频下载 │ │ │ │
|
||
│ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │
|
||
│ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ┌───────────────────────────────────────▼─────────────────────────────────────────────┐ │
|
||
│ │ Infrastructure Layer (基础设施层) │ │
|
||
│ │ │ │
|
||
│ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │
|
||
│ │ │ ai/ │ │ database/ │ │ storage/ │ │ │
|
||
│ │ │ ┌──────────────┐ │ │ ┌──────────────┐ │ │ ┌──────────────┐ │ │ │
|
||
│ │ │ │ LLMClient │ │ │ │ AsyncDBPool │ │ │ │ FileStorage │ │ │ │
|
||
│ │ │ │ (OpenAI等) │ │ │ │ (aiomysql) │ │ │ │ (本地/S3) │ │ │ │
|
||
│ │ │ └──────────────┘ │ │ └──────────────┘ │ │ └──────────────┘ │ │ │
|
||
│ │ │ ┌──────────────┐ │ │ ┌──────────────┐ │ │ ┌──────────────┐ │ │ │
|
||
│ │ │ │ TokenCounter │ │ │ │ Repositories │ │ │ │ CacheStorage │ │ │ │
|
||
│ │ │ └──────────────┘ │ │ │ - ScenicSpot │ │ │ │ (Redis可选) │ │ │ │
|
||
│ │ └──────────────────┘ │ │ - Product │ │ │ └──────────────┘ │ │ │
|
||
│ │ │ │ - Style │ │ └──────────────────┘ │ │
|
||
│ │ ┌──────────────────┐ │ │ - Template │ │ │ │
|
||
│ │ │ config/ │ │ └──────────────┘ │ ┌──────────────────┐ │ │
|
||
│ │ │ - ConfigLoader │ └──────────────────┘ │ http/ │ │ │
|
||
│ │ │ - EnvManager │ │ - HTTPClient │ │ │
|
||
│ │ └──────────────────┘ │ - RetryPolicy │ │ │
|
||
│ │ └──────────────────┘ │ │
|
||
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
|
||
└──────────────────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 四、详细模块设计
|
||
|
||
### 4.1 任务管理系统 (新增核心)
|
||
|
||
```python
|
||
# domain/task/task_manager.py
|
||
from enum import Enum
|
||
from dataclasses import dataclass
|
||
from datetime import datetime
|
||
from typing import Optional, Dict, Any
|
||
|
||
class TaskStatus(Enum):
|
||
PENDING = "pending"
|
||
RUNNING = "running"
|
||
COMPLETED = "completed"
|
||
FAILED = "failed"
|
||
CANCELLED = "cancelled"
|
||
|
||
class TaskType(Enum):
|
||
TOPIC_GENERATION = "topic_generation"
|
||
CONTENT_GENERATION = "content_generation"
|
||
CONTENT_JUDGE = "content_judge"
|
||
POSTER_GENERATION = "poster_generation"
|
||
XHS_SEARCH = "xhs_search"
|
||
CONTENT_INTEGRATION = "content_integration"
|
||
|
||
@dataclass
|
||
class Task:
|
||
task_id: str
|
||
task_type: TaskType
|
||
status: TaskStatus
|
||
progress: int # 0-100
|
||
params: Dict[str, Any]
|
||
result: Optional[Dict[str, Any]] = None
|
||
error_message: Optional[str] = None
|
||
created_at: datetime = None
|
||
updated_at: datetime = None
|
||
|
||
class TaskOrchestrator:
|
||
"""任务编排器 - 统一管理所有AIGC任务"""
|
||
|
||
async def submit_task(self, task_type: TaskType, params: Dict) -> str:
|
||
"""提交任务,返回task_id"""
|
||
|
||
async def get_task_status(self, task_id: str) -> Task:
|
||
"""获取任务状态"""
|
||
|
||
async def cancel_task(self, task_id: str) -> bool:
|
||
"""取消任务"""
|
||
|
||
async def submit_batch(self, tasks: List[Dict]) -> List[str]:
|
||
"""批量提交任务"""
|
||
```
|
||
|
||
### 4.2 海报生成领域重构
|
||
|
||
```
|
||
poster/
|
||
├── __init__.py
|
||
├── engines/
|
||
│ ├── __init__.py
|
||
│ ├── template_engine.py # 模板管理和选择
|
||
│ ├── render_engine.py # PNG渲染引擎
|
||
│ ├── fabric_engine.py # Fabric.js JSON生成
|
||
│ ├── psd_engine.py # PSD导出引擎
|
||
│ └── image_engine.py # 图片处理引擎
|
||
├── templates/
|
||
│ ├── __init__.py
|
||
│ ├── base.py # 模板基类
|
||
│ ├── vibrant/
|
||
│ │ ├── __init__.py
|
||
│ │ ├── layout.py # 布局计算
|
||
│ │ ├── effects.py # 特效(毛玻璃等)
|
||
│ │ └── renderer.py # 渲染实现
|
||
│ ├── business/
|
||
│ │ └── ...
|
||
│ └── collage/
|
||
│ └── ...
|
||
├── models/
|
||
│ ├── __init__.py
|
||
│ ├── content.py # 海报内容模型
|
||
│ ├── layout.py # 布局模型
|
||
│ └── export.py # 导出结果模型
|
||
└── poster_service.py # 对外服务接口(精简)
|
||
```
|
||
|
||
### 4.3 内容生成领域重构
|
||
|
||
```
|
||
content/
|
||
├── __init__.py
|
||
├── engines/
|
||
│ ├── __init__.py
|
||
│ ├── topic_engine.py # 选题生成引擎
|
||
│ ├── content_engine.py # 内容生成引擎
|
||
│ ├── judge_engine.py # 内容审核引擎
|
||
│ └── prompt_engine.py # 提示词构建引擎
|
||
├── models/
|
||
│ ├── __init__.py
|
||
│ ├── topic.py # 选题模型
|
||
│ ├── article.py # 文章模型
|
||
│ └── prompt.py # 提示词模型
|
||
├── parsers/
|
||
│ ├── __init__.py
|
||
│ ├── topic_parser.py # 选题解析器
|
||
│ └── content_parser.py # 内容解析器
|
||
└── content_service.py # 对外服务接口(精简)
|
||
```
|
||
|
||
### 4.4 基础设施层重构
|
||
|
||
```
|
||
infrastructure/
|
||
├── __init__.py
|
||
├── ai/
|
||
│ ├── __init__.py
|
||
│ ├── llm_client.py # LLM客户端抽象
|
||
│ ├── openai_client.py # OpenAI实现
|
||
│ └── token_counter.py # Token计数器
|
||
├── database/
|
||
│ ├── __init__.py
|
||
│ ├── connection.py # 异步连接池
|
||
│ └── repositories/
|
||
│ ├── __init__.py
|
||
│ ├── base.py # Repository基类
|
||
│ ├── scenic_spot_repo.py
|
||
│ ├── product_repo.py
|
||
│ ├── style_repo.py
|
||
│ ├── audience_repo.py
|
||
│ └── template_repo.py
|
||
├── storage/
|
||
│ ├── __init__.py
|
||
│ ├── file_storage.py # 文件存储
|
||
│ └── cache_storage.py # 缓存存储
|
||
└── config/
|
||
├── __init__.py
|
||
├── settings.py # 配置加载
|
||
└── constants.py # 常量定义
|
||
```
|
||
|
||
---
|
||
|
||
## 五、工作拆分计划
|
||
|
||
### Phase 1: 基础设施重构 (Week 1-2)
|
||
|
||
| 任务 | 优先级 | 预估工时 | 依赖 |
|
||
|-----|--------|---------|------|
|
||
| 1.1 创建异步数据库连接池 | P0 | 4h | - |
|
||
| 1.2 拆分DatabaseService为独立Repository | P0 | 8h | 1.1 |
|
||
| 1.3 统一异常处理中间件 | P0 | 4h | - |
|
||
| 1.4 统一响应格式 | P1 | 4h | 1.3 |
|
||
| 1.5 配置管理重构 | P1 | 4h | - |
|
||
|
||
### Phase 2: 任务管理系统 (Week 2-3)
|
||
|
||
| 任务 | 优先级 | 预估工时 | 依赖 |
|
||
|-----|--------|---------|------|
|
||
| 2.1 设计Task模型和状态机 | P0 | 4h | - |
|
||
| 2.2 实现TaskOrchestrator | P0 | 8h | 2.1 |
|
||
| 2.3 实现任务状态持久化 | P0 | 4h | 2.2, 1.2 |
|
||
| 2.4 实现批量任务提交接口 | P0 | 4h | 2.2 |
|
||
| 2.5 实现任务进度回调机制 | P1 | 4h | 2.2 |
|
||
|
||
### Phase 3: 海报生成领域重构 (Week 3-4)
|
||
|
||
| 任务 | 优先级 | 预估工时 | 依赖 |
|
||
|-----|--------|---------|------|
|
||
| 3.1 提取ImageEngine | P0 | 4h | - |
|
||
| 3.2 提取RenderEngine | P0 | 8h | 3.1 |
|
||
| 3.3 提取FabricEngine | P0 | 8h | 3.2 |
|
||
| 3.4 提取PSDEngine | P1 | 4h | 3.2 |
|
||
| 3.5 重构VibrantTemplate | P0 | 8h | 3.2, 3.3 |
|
||
| 3.6 精简PosterService | P0 | 4h | 3.1-3.5 |
|
||
|
||
### Phase 4: 内容生成领域重构 (Week 4-5)
|
||
|
||
| 任务 | 优先级 | 预估工时 | 依赖 |
|
||
|-----|--------|---------|------|
|
||
| 4.1 提取PromptEngine | P0 | 4h | - |
|
||
| 4.2 重构TopicEngine | P0 | 4h | 4.1 |
|
||
| 4.3 重构ContentEngine | P0 | 4h | 4.1 |
|
||
| 4.4 重构JudgeEngine | P1 | 4h | 4.1 |
|
||
| 4.5 精简ContentService | P0 | 4h | 4.1-4.4 |
|
||
|
||
### Phase 5: API层重构 (Week 5-6)
|
||
|
||
| 任务 | 优先级 | 预估工时 | 依赖 |
|
||
|-----|--------|---------|------|
|
||
| 5.1 设计V2 API规范 | P0 | 4h | 2.1 |
|
||
| 5.2 实现/v2/task/* 接口 | P0 | 8h | 2.2, 5.1 |
|
||
| 5.3 实现/v2/poster/* 接口 | P0 | 4h | 3.6, 5.1 |
|
||
| 5.4 实现/v2/content/* 接口 | P0 | 4h | 4.5, 5.1 |
|
||
| 5.5 V1 API兼容层 | P1 | 4h | 5.2-5.4 |
|
||
|
||
### Phase 6: Java端对接优化 (Week 6)
|
||
|
||
| 任务 | 优先级 | 预估工时 | 依赖 |
|
||
|-----|--------|---------|------|
|
||
| 6.1 更新AIGCServiceClient | P0 | 4h | 5.2 |
|
||
| 6.2 适配批量任务提交 | P0 | 4h | 6.1 |
|
||
| 6.3 实现任务状态轮询 | P0 | 4h | 6.1 |
|
||
| 6.4 集成测试 | P0 | 8h | 6.1-6.3 |
|
||
|
||
---
|
||
|
||
## 六、关键接口设计
|
||
|
||
### 6.1 统一任务API
|
||
|
||
```yaml
|
||
# POST /api/v2/task/submit
|
||
Request:
|
||
task_type: "poster_generation" | "content_generation" | "topic_generation" | ...
|
||
params:
|
||
# 根据task_type不同而不同
|
||
callback_url: "http://..." # 可选,完成后回调
|
||
|
||
Response:
|
||
code: 0
|
||
data:
|
||
task_id: "task_xxx"
|
||
status: "pending"
|
||
message: "success"
|
||
|
||
# GET /api/v2/task/{task_id}/status
|
||
Response:
|
||
code: 0
|
||
data:
|
||
task_id: "task_xxx"
|
||
status: "running" | "completed" | "failed"
|
||
progress: 75
|
||
result: {...} # 完成时有值
|
||
error: "..." # 失败时有值
|
||
message: "success"
|
||
|
||
# POST /api/v2/task/batch
|
||
Request:
|
||
tasks:
|
||
- task_type: "poster_generation"
|
||
params: {...}
|
||
- task_type: "poster_generation"
|
||
params: {...}
|
||
|
||
Response:
|
||
code: 0
|
||
data:
|
||
task_ids: ["task_1", "task_2", ...]
|
||
message: "success"
|
||
```
|
||
|
||
### 6.2 统一响应格式
|
||
|
||
```python
|
||
@dataclass
|
||
class ApiResponse(Generic[T]):
|
||
code: int = 0 # 0=成功, 其他=错误码
|
||
data: Optional[T] = None
|
||
message: str = "success"
|
||
request_id: str = "" # 请求追踪ID
|
||
timestamp: int = 0 # 时间戳
|
||
```
|
||
|
||
---
|
||
|
||
## 七、迁移策略
|
||
|
||
1. **渐进式重构**: 新旧代码并存,通过Feature Flag切换
|
||
2. **V1/V2 API共存**: V1保持兼容,V2为新架构
|
||
3. **数据库无迁移**: Repository层只是代码重构,不改表结构
|
||
4. **测试先行**: 每个Phase完成后进行集成测试
|
||
|
||
---
|
||
|
||
## 八、预期收益
|
||
|
||
| 指标 | 现状 | 目标 |
|
||
|-----|------|------|
|
||
| 最大文件行数 | 3032行 | <500行 |
|
||
| 单元测试覆盖率 | ~0% | >60% |
|
||
| API响应一致性 | 低 | 100% |
|
||
| 任务可追踪性 | 无 | 100% |
|
||
| 批量任务支持 | 无 | 支持 |
|
||
| 代码重复率 | 高 | <10% |
|