深夜的烂笔头
技术 9 次浏览 4 分钟阅读

自动化生成架构

整体架构设计

# ============================================
# 项目结构
# ============================================
"""
tutorial-generator/
├── app/
│   ├── __init__.py
│   ├── main.py                 # FastAPI应用
│   ├── config.py               # 配置
│   └── database.py             # 数据库
│
├── core/
│   ├── llm/
│   │   ├── client.py           # LLM客户端(带重试)
│   │   ├── prompt_template.py  # 提示词模板引擎
│   │   └── rate_limiter.py     # 速率限制
│   │
│   ├── generators/
│   │   ├── text_generator.py
│   │   └── image_generator.py
│   │
│   ├── executor/
│   │   ├── parallel_executor.py  # 并行执行器
│   │   └── retry_handler.py      # 重试机制
│   │
│   └── validators/
│       └── content_validator.py   # 内容验证
│
├── pipelines/
│   ├── base_pipeline.py
│   └── batch_tutorial_pipeline.py  # 批量教程Pipeline
│
├── templates/                   # Jinja2模板
│   ├── base.html
│   ├── task_create.html
│   ├── task_monitor.html
│   └── preview.html
│
├── static/
│   ├── css/
│   └── js/
│
├── prompts/                     # 提示词模板
│   ├── system/
│   │   ├── tutorial_writer.jinja2
│   │   └── code_expert.jinja2
│   └── user/
│       ├── chapter_text.jinja2
│       └── chapter_image.jinja2
│
└── requirements.txt
"""

架构设计方案

一、系统架构图

┌─────────────────────────────────────────────────────────────┐
│                        前端层 (Web UI)                        │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │ 任务创建页面  │  │ 执行监控页面  │  │ 预览发布页面  │      │
│  │ (Alpine.js)  │  │ (WebSocket)  │  │ (Markdown)   │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
└─────────────────────────────────────────────────────────────┘
                            ↕ HTTP/WebSocket
┌─────────────────────────────────────────────────────────────┐
│                    API层 (FastAPI)                           │
│  ┌────────────┐  ┌────────────┐  ┌────────────┐            │
│  │ 任务管理API │  │ 执行API    │  │ 发布API    │            │
│  │ CRUD       │  │ Execute    │  │ GitHub     │            │
│  └────────────┘  └────────────┘  └────────────┘            │
└─────────────────────────────────────────────────────────────┘
                            ↕
┌─────────────────────────────────────────────────────────────┐
│                   业务逻辑层 (Core)                           │
│  ┌──────────────────────────────────────────────────────┐  │
│  │          Pipeline 编排引擎                            │  │
│  │  • 选择Pipeline • 协调执行 • 状态管理               │  │
│  └──────────────────────────────────────────────────────┘  │
│                            ↕                                 │
│  ┌──────────────────────────────────────────────────────┐  │
│  │         并行执行引擎 (Executor)                       │  │
│  │  • 任务队列 • 并发控制 • 进度追踪 • 结果聚合        │  │
│  └──────────────────────────────────────────────────────┘  │
│         ↙          ↓          ↓          ↘                  │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐      │
│  │重试机制  │ │速率限制  │ │内容验证  │ │错误处理  │      │
│  │Handler   │ │Limiter   │ │Validator │ │Handler   │      │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘      │
└─────────────────────────────────────────────────────────────┘
                            ↕
┌─────────────────────────────────────────────────────────────┐
│                    原子能力层 (Generators)                    │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │ 文本生成器    │  │ 图片生成器    │  │ 格式化器      │      │
│  │ TextGen      │  │ ImageGen     │  │ Formatter    │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
│          ↓                 ↓                                 │
│  ┌──────────────────────────────────────────────────────┐  │
│  │            提示词模板引擎 (Jinja2)                    │  │
│  │  • 系统提示词 • 用户提示词 • 上下文注入              │  │
│  └──────────────────────────────────────────────────────┘  │
│          ↓                 ↓                                 │
│  ┌──────────────┐  ┌──────────────┐                        │
│  │ Claude Client│  │ OpenAI Client│                        │
│  │ (重试+超时)  │  │ (重试+超时)  │                        │
│  └──────────────┘  └──────────────┘                        │
└─────────────────────────────────────────────────────────────┘
                            ↕
┌─────────────────────────────────────────────────────────────┐
│                    基础设施层                                 │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │ 数据库        │  │ 文件存储      │  │ GitHub API   │      │
│  │ SQLite/PG    │  │ Local FS     │  │ Publisher    │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
└─────────────────────────────────────────────────────────────┘

二、数据流设计

2.1 任务创建流程

用户输入配置
    ↓
验证配置完整性
    ↓
选择Pipeline
    ↓
保存到数据库(状态:DRAFT)
    ↓
返回任务ID

2.2 任务执行流程

点击执行按钮
    ↓
加载任务配置 + Pipeline
    ↓
Pipeline预处理(构建任务DAG)
    ↓
┌─────────────────────────────────────┐
│      并行执行引擎启动                 │
│                                      │
│  1. 构建任务列表(文本+图片)        │
│  2. 按依赖关系分组                   │
│  3. 使用信号量控制并发数             │
│                                      │
│  执行循环:                          │
│  ┌────────────────────────────┐   │
│  │ while 有待执行任务:         │   │
│  │   取一批任务(并发限制内)   │   │
│  │   ↓                        │   │
│  │   调用LLM(带重试)         │   │
│  │   ↓                        │   │
│  │   验证结果                 │   │
│  │   ↓                        │   │
│  │   保存结果/错误            │   │
│  │   ↓                        │   │
│  │   更新进度(WebSocket推送) │   │
│  │   ↓                        │   │
│  │   继续下一批               │   │
│  └────────────────────────────┘   │
└─────────────────────────────────────┘
    ↓
聚合结果(成功+失败)
    ↓
生成Markdown文件
    ↓
更新任务状态(COMPLETED/PARTIAL)
    ↓
通知前端完成

2.3 预览和发布流程

任务执行完成
    ↓
前端加载生成的Markdown
    ↓
用户预览(可编辑)
    ↓
用户确认
    ↓
点击发布按钮
    ↓
合并所有章节
    ↓
提交到GitHub(PR或直接Push)
    ↓
更新任务状态(PUBLISHED)

三、关键模块设计

3.1 并行执行引擎(核心)

设计要点:

  1. 任务分组策略
    • 按章节依赖关系构建DAG
    • 无依赖的章节可完全并行
    • 有依赖的章节按层级执行
  2. 并发控制
    • 使用asyncio.Semaphore限制同时进行的请求数
    • 文本和图片生成可以并行
    • 同一章节的多张图片可以并行
  3. 任务队列
   待执行队列 → 执行中队列 → 完成队列
                     ↓
                  失败队列(重试)
  1. 进度追踪
    • 实时计算:已完成/总任务数
    • 通过WebSocket推送进度到前端
    • 记录每个任务的状态、耗时、重试次数

3.2 重试机制

三层重试策略:

层级处理对象重试条件策略L1: LLM客户端单个API调用速率限制、超时、网络错误指数退避(2s, 4s, 8s)L2: 生成器单个任务返回内容验证失败立即重试3次L3: 执行器批次任务整体失败率>30%暂停并报警

错误分类:

python

可重试错误:
- RateLimitError(速率限制)
- TimeoutError(超时)
- InvalidResponseError(内容不符合预期)

不可重试错误:
- AuthenticationError(API密钥错误)
- InvalidConfigError(配置错误)
- SystemError(系统错误)

3.3 内容验证机制

验证层级:

1. 基础验证(快速)
   - 非空检查
   - 最小长度检查
   - 格式检查(是否为Markdown)

2. 结构验证(中速)
   - 标题层级是否正确
   - 是否包含必需的代码块
   - 图片链接是否有效

3. 质量验证(慢速,可选)
   - 内容相关性(使用Embedding)
   - 术语一致性
   - 逻辑连贯性

3.4 提示词模板系统

目录结构:

prompts/
├── system/                    # 系统提示词
│   ├── tutorial_writer.jinja2
│   ├── code_expert.jinja2
│   └── image_designer.jinja2
├── user/                      # 用户提示词
│   ├── chapter_text.jinja2
│   ├── chapter_code.jinja2
│   └── chapter_image.jinja2
└── includes/                  # 可复用片段
    ├── terminology.jinja2
    ├── style_guide.jinja2
    └── reference_docs.jinja2

模板变量设计:

jinja2

{# 全局变量 #}
{{ tutorial_theme }}          # 教程主题
{{ target_audience }}         # 目标读者
{{ difficulty_level }}        # 难度等级

{# 上下文变量 #}
{{ previous_chapters }}       # 前文章节摘要
{{ terminology }}             # 术语表
{{ code_dependencies }}       # 代码依赖关系

{# 章节变量 #}
{{ chapter.title }}
{{ chapter.level }}
{{ chapter.core_content }}
{{ chapter.key_points }}

{# 参考资料 #}
{{ reference_docs }}          # 参考文档列表
{{ style_guide }}             # 写作规范

四、Pipeline设计模式

4.1 Pipeline基类接口

python

class BasePipeline(ABC):
    """所有Pipeline必须实现的接口"""
    
    @abstractmethod
    async def execute(self, task_config: Dict) -> Dict:
        """执行Pipeline,返回生成结果"""
        pass
    
    @abstractmethod
    def get_metadata(self) -> Dict:
        """返回Pipeline元数据(用于前端展示)"""
        pass
    
    @abstractmethod
    def validate_config(self, config: Dict) -> bool:
        """验证配置是否符合此Pipeline的要求"""
        pass
    
    def pre_process(self, config: Dict) -> Dict:
        """预处理:构建任务DAG"""
        pass
    
    def post_process(self, results: Dict) -> Dict:
        """后处理:整合结果、生成目录"""
        pass

4.2 Pipeline类型设计

Pipeline名称适用场景特点并行策略SimplePipeline纯文本教程只生成文本,无图片章节间完全并行StandardPipeline标准教程文本+少量图片文本和图片并行RichPipeline富媒体教程文本+大量图片+代码按章节分批,批内并行APIPipelineAPI文档结构化强,模板驱动按接口并行生成

4.3 Pipeline参数化

python

pipeline_params = {
    "concurrency": {
        "max_concurrent_chapters": 5,    # 最多同时生成5个章节
        "max_concurrent_images": 10,     # 最多同时生成10张图片
    },
    "retry": {
        "max_retries": 3,
        "retry_delay": 2.0,
    },
    "validation": {
        "enable_quality_check": True,
        "min_word_count": 800,
    },
    "llm": {
        "text_model": "claude-sonnet-4-5",
        "image_model": "dall-e-3",
        "temperature": 0.7,
    }
}

五、前端交互设计

5.1 页面流转

1. 任务创建页 (/)
   - 输入基本信息
   - 配置章节列表
   - 配置提示词模板
   - 选择Pipeline
   ↓
2. 执行监控页 (/tasks/{id}/monitor)
   - 实时显示进度条
   - 显示各章节状态
   - 显示错误信息
   - 支持暂停/继续
   ↓
3. 预览页 (/tasks/{id}/preview)
   - 章节列表(树形结构)
   - Markdown预览(可编辑)
   - 下载按钮
   ↓
4. 发布页 (/tasks/{id}/publish)
   - 配置GitHub仓库
   - 选择提交方式(PR/Push)
   - 确认发布

5.2 WebSocket实时通信

消息格式:

json

{
  "type": "progress_update",
  "task_id": "task_123",
  "data": {
    "total": 100,
    "completed": 45,
    "failed": 2,
    "current": "chapter_05_text",
    "status": "running"
  }
}

{
  "type": "task_complete",
  "task_id": "task_123",
  "data": {
    "status": "success",
    "output_path": "/output/task_123",
    "stats": {...}
  }
}

{
  "type": "error",
  "task_id": "task_123",
  "data": {
    "chapter_id": "chapter_03",
    "error_message": "Rate limit exceeded",
    "retry_count": 2
  }
}

六、数据库设计

sql

-- 任务表
CREATE TABLE tasks (
    id VARCHAR(50) PRIMARY KEY,
    name VARCHAR(200),
    config TEXT,              -- JSON格式的完整配置
    pipeline VARCHAR(50),
    status VARCHAR(20),       -- draft, running, completed, failed, published
    progress INT DEFAULT 0,   -- 0-100
    output_path VARCHAR(500),
    error_message TEXT,
    created_at TIMESTAMP,
    updated_at TIMESTAMP,
    completed_at TIMESTAMP
);

-- 章节结果表
CREATE TABLE chapter_results (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    task_id VARCHAR(50),
    chapter_id VARCHAR(100),
    status VARCHAR(20),       -- pending, running, success, failed
    content TEXT,             -- 生成的Markdown内容
    error_message TEXT,
    retries INT DEFAULT 0,
    duration FLOAT,           -- 生成耗时(秒)
    created_at TIMESTAMP,
    FOREIGN KEY (task_id) REFERENCES tasks(id)
);

-- 执行日志表
CREATE TABLE execution_logs (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    task_id VARCHAR(50),
    level VARCHAR(10),        -- info, warning, error
    message TEXT,
    timestamp TIMESTAMP,
    FOREIGN KEY (task_id) REFERENCES tasks(id)
);

七、文件组织结构

tutorial-generator/
├── app/
│   ├── main.py                    # FastAPI应用入口
│   ├── config.py                  # 配置管理
│   ├── database.py                # 数据库连接
│   └── websocket.py               # WebSocket管理
│
├── core/
│   ├── llm/
│   │   ├── base_client.py         # 基础客户端(重试、超时)
│   │   ├── claude_client.py
│   │   ├── openai_client.py
│   │   └── rate_limiter.py        # 速率限制器
│   │
│   ├── templates/
│   │   └── prompt_engine.py       # Jinja2模板引擎
│   │
│   ├── generators/
│   │   ├── text_generator.py      # 文本生成(原子能力)
│   │   ├── image_generator.py     # 图片生成(原子能力)
│   │   └── formatter.py           # Markdown格式化
│   │
│   ├── executor/
│   │   ├── parallel_executor.py   # 并行执行引擎
│   │   ├── task_queue.py          # 任务队列管理
│   │   └── progress_tracker.py    # 进度追踪
│   │
│   ├── validators/
│   │   ├── content_validator.py   # 内容验证
│   │   └── config_validator.py    # 配置验证
│   │
│   └── handlers/
│       ├── retry_handler.py       # 重试处理
│       └── error_handler.py       # 错误处理
│
├── pipelines/
│   ├── base.py                    # Pipeline基类
│   ├── registry.py                # Pipeline注册器
│   ├── simple_pipeline.py
│   ├── standard_pipeline.py
│   └── rich_pipeline.py
│
├── api/
│   ├── tasks.py                   # 任务CRUD API
│   ├── execution.py               # 执行控制API
│   ├── preview.py                 # 预览API
│   └── publish.py                 # 发布API
│
├── models/                        # SQLAlchemy模型
│   ├── task.py
│   ├── chapter_result.py
│   └── execution_log.py
│
├── schemas/                       # Pydantic Schema
│   ├── task_schema.py
│   ├── chapter_schema.py
│   └── pipeline_schema.py
│
├── templates/                     # Jinja2 HTML模板
│   ├── base.html
│   ├── task_create.html
│   ├── task_monitor.html
│   ├── preview.html
│   └── publish.html
│
├── prompts/                       # LLM提示词模板
│   ├── system/
│   ├── user/
│   └── includes/
│
├── static/
│   ├── css/
│   │   └── main.css
│   └── js/
│       ├── alpine-components.js   # Alpine.js组件
│       └── websocket-client.js    # WebSocket客户端
│
├── output/                        # 生成文件输出
│   └── tasks/
│
├── tests/
│   ├── test_executor/
│   ├── test_pipelines/
│   └── test_validators/
│
├── requirements.txt
├── .env.example
└── README.md

八、技术栈总结

层级技术选型理由Web框架FastAPI异步支持、类型安全、自动文档模板引擎Jinja2强大、灵活、与FastAPI集成好前端框架Alpine.js轻量、易学、适合渐进增强数据库SQLite → PostgreSQL开发用SQLite,生产用PGORMSQLAlchemy成熟、功能全面异步库asyncio + aiohttpPython原生、性能好LLM SDKanthropic + openai官方SDK重试库tenacity灵活的重试策略提示词模板Jinja2复用HTML模板引擎进度通信WebSocket实时双向通信任务队列(可选)Celery + Redis如需分布式

0

  1. 此文章尚无评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注