TravelContentCreator/docs/PROJECT_OVERVIEW.md

391 lines
12 KiB
Markdown
Raw Normal View History

2025-12-10 10:07:40 +08:00
# TravelContentCreator 项目总览
> 更新日期: 2024-12-10
> 版本: 2.3.0
---
## 一、项目简介
TravelContentCreator 是一个 **旅游内容自动创作系统** 的 Python 后端服务,主要功能包括:
- **选题生成** - 基于热点、节日、目标人群生成小红书选题
- **内容生成** - 生成小红书风格的图文笔记正文
- **海报生成** - 自动生成配图海报
- **热点数据** - 多平台热点数据采集
### 技术栈
| 组件 | 技术 |
|-----|------|
| Web 框架 | FastAPI |
| AI 模型 | OpenAI GPT-4 |
| 模板引擎 | Jinja2 |
| 配置格式 | YAML / JSON |
| 图像处理 | Pillow |
| 爬虫 | aiohttp / MediaCrawler |
---
## 二、目录结构
```
TravelContentCreator/
├── api/ # FastAPI 应用层
│ ├── main.py # 应用入口
│ ├── routers/ # API 路由
│ │ ├── aigc.py # V2 AIGC 统一接口
│ │ ├── hotspot.py # 热点数据 API
│ │ ├── prompt.py # Prompt 管理 API
│ │ └── reference.py # 参考文献 API
│ ├── models/ # 请求/响应模型
│ └── services/ # 服务层 (部分已迁移)
├── domain/ # 领域层 (核心业务逻辑)
│ ├── aigc/ # AIGC 引擎
│ │ ├── engines/ # 引擎实现
│ │ │ ├── base.py # 引擎基类
│ │ │ ├── topic_generate_v2.py
│ │ │ ├── content_generate_v2.py
│ │ │ └── poster_generate_v2.py
│ │ ├── engine_registry.py # 引擎注册
│ │ ├── engine_executor.py # 引擎执行器
│ │ └── shared/ # 共享组件
│ │ └── llm_client.py # LLM 客户端
│ │
│ ├── hotspot/ # 热点数据模块
│ │ ├── crawlers/ # 爬虫实现
│ │ │ ├── base.py # 爬虫基类
│ │ │ ├── baidu.py # 百度热搜
│ │ │ ├── bing.py # Bing 搜索
│ │ │ ├── calendar.py # 节日日历
│ │ │ ├── weibo.py # 微博热搜
│ │ │ ├── xiaohongshu.py # 小红书
│ │ │ └── mediacrawler/ # MediaCrawler 桥接
│ │ ├── manager.py # 热点管理器
│ │ └── models.py # 数据模型
│ │
│ ├── prompt/ # Prompt 管理
│ │ ├── registry.py # PromptRegistry
│ │ └── reference_manager.py # 参考文献管理
│ │
│ ├── poster/ # 海报领域
│ │ ├── poster_service.py # 海报服务
│ │ ├── poster_renderer.py # 渲染器
│ │ ├── template_manager.py # 模板管理
│ │ └── fabric_generator.py # Fabric.js JSON
│ │
│ ├── content/ # 内容领域
│ │ ├── topic_engine.py # 选题引擎
│ │ ├── content_engine.py # 内容引擎
│ │ └── judge_engine.py # 评判引擎
│ │
│ └── container.py # 依赖注入容器
├── prompts/ # Prompt 模板 (YAML)
│ ├── topic_generate/ # 选题生成 Prompt
│ ├── content_generate/ # 内容生成 Prompt
│ ├── content_judge/ # 内容评判 Prompt
│ └── reference/ # 参考文献库
│ ├── titles.yaml # 标题范例
│ └── contents.yaml # 正文范例
├── poster/ # 海报模板
│ ├── templates/ # 模板实现
│ │ ├── vibrant_template.py # 活力风格
│ │ ├── business_template.py # 商务风格
│ │ └── collage_template.py # 拼图风格
│ └── utils.py # 图像处理工具
├── config/ # 配置文件
│ ├── ai_model.json # AI 模型配置
│ ├── engines.json # 引擎配置
│ ├── poster_gen.json # 海报生成配置
│ └── ...
├── libs/ # 外部库
│ └── MediaCrawler/ # 社交媒体爬虫
├── core/ # 核心模块 (部分遗留)
├── docs/ # 文档
└── tests/ # 测试
```
---
## 三、核心模块
### 3.1 AIGC 引擎 (`domain/aigc/`)
统一的 AIGC 引擎框架,支持选题、内容、海报生成。
#### 引擎列表
| 引擎 | 类 | 状态 | 说明 |
|-----|-----|------|------|
| `topic_generate` | `TopicGenerateEngineV2` | ✅ | 选题生成 |
| `content_generate` | `ContentGenerateEngineV2` | ✅ | 内容生成 |
| `poster_generate` | `PosterGenerateEngineV2` | ✅ | 海报生成 |
#### 架构设计
```
EngineRegistry (引擎注册)
EngineExecutor (引擎执行)
BaseEngine (引擎基类)
├── TopicGenerateEngineV2
├── ContentGenerateEngineV2
└── PosterGenerateEngineV2
```
#### API 调用
```bash
POST /api/v2/aigc/execute
{
"engine": "topic_generate",
"params": {
"style_id": "travel_casual",
"audience_id": "young_couple",
"hot_topics": {...}
}
}
```
---
### 3.2 热点数据模块 (`domain/hotspot/`)
多平台热点数据采集和管理。
#### 爬虫列表
| 爬虫 | 类 | 状态 | 说明 |
|-----|-----|------|------|
| 百度热搜 | `BaiduCrawler` | ✅ | 实时热点 + 旅游榜 |
| 节日日历 | `CalendarCrawler` | ✅ | 预设节日数据 |
| 小红书 | `XiaohongshuCrawler` | ✅ | MediaCrawler 集成 |
| Bing | `BingCrawler` | ✅ | 搜索建议 |
| 微博 | `WeiboCrawler` | ⚠️ | 需要优化 |
#### 架构设计
```
HotspotManager (热点管理器)
├── BaiduCrawler
├── BingCrawler
├── CalendarCrawler
├── XiaohongshuCrawler (→ XHSCrawlerBridge → MediaCrawler)
└── WeiboCrawler
```
#### API 路由
| 方法 | 路径 | 说明 |
|-----|------|------|
| GET | `/api/v2/hotspot/all` | 获取所有来源 |
| GET | `/api/v2/hotspot/baidu` | 百度热搜 |
| GET | `/api/v2/hotspot/bing` | Bing 搜索 |
| GET | `/api/v2/hotspot/calendar` | 节日日历 |
| GET | `/api/v2/hotspot/xiaohongshu` | 小红书热门 |
| GET | `/api/v2/hotspot/travel` | 旅游相关聚合 |
| GET | `/api/v2/hotspot/trending` | 热门话题 |
---
### 3.3 Prompt 管理 (`domain/prompt/`)
YAML 格式的 Prompt 版本管理系统。
#### 核心组件
| 组件 | 说明 |
|-----|------|
| `PromptRegistry` | Prompt 加载、版本管理、模板渲染 |
| `ReferenceManager` | 参考文献库管理 (标题/正文范例) |
#### Prompt YAML 结构
```yaml
meta:
name: topic_generate
version: "2.0.0"
description: "选题生成"
model:
temperature: 0.2
top_p: 0.3
variables:
- name: style
type: object
required: true
system_prompt: |
你是一个小红书内容策划专家...
user_prompt: |
请根据以下信息生成选题:
风格: {{ style.name }}
```
#### 参考文献库
位置: `prompts/reference/`
| 文件 | 说明 |
|-----|------|
| `titles.yaml` | 55+ 爆款标题模板 |
| `contents.yaml` | 10+ 完整正文范例 |
| `index.yaml` | 配置索引 |
---
### 3.4 海报模块 (`domain/poster/` + `poster/`)
自动生成配图海报。
#### 组件
| 组件 | 说明 |
|-----|------|
| `PosterServiceV2` | 轻量服务,无数据库依赖 |
| `PosterRenderer` | 渲染引擎 |
| `TemplateManager` | 模板管理 |
| `FabricGenerator` | Fabric.js JSON 输出 |
#### 模板
| 模板 | 说明 |
|-----|------|
| `vibrant` | 活力风格 |
| `business` | 商务风格 |
| `collage` | 拼图风格 |
---
### 3.5 MediaCrawler 集成 (`libs/MediaCrawler/`)
第三方社交媒体爬虫项目。
- **来源**: https://github.com/NanmiCoder/MediaCrawler
- **支持平台**: 小红书、抖音、微博、B站、快手、知乎、贴吧
- **桥接器**: `domain/hotspot/crawlers/mediacrawler/xhs_crawler.py`
---
## 四、API 概览
### V2 API (主要使用)
| 路由前缀 | 说明 |
|---------|------|
| `/api/v2/aigc` | AIGC 统一接口 |
| `/api/v2/hotspot` | 热点数据 |
| `/api/v2/reference` | 参考文献管理 |
### V1 API (部分保留)
| 路由前缀 | 状态 |
|---------|------|
| `/api/v1/prompt` | ✅ 可用 |
| `/api/v1/tweet` | ❌ 已禁用 |
| `/api/v1/poster` | ❌ 已禁用 |
---
## 五、配置文件
| 文件 | 说明 |
|-----|------|
| `config/ai_model.json` | AI 模型配置 (API Key, Model) |
| `config/engines.json` | 引擎配置 |
| `config/poster_gen.json` | 海报生成配置 |
| `config/paths.json` | 路径配置 |
| `config/database.json` | 数据库配置 (遗留) |
---
## 六、快速启动
```bash
# 安装依赖
pip install -r requirements.txt
# 启动服务
cd /root/TravelContentCreator
PYTHONPATH=. uvicorn api.main:app --host 0.0.0.0 --port 8001
# 测试
curl http://localhost:8001/
curl http://localhost:8001/api/v2/hotspot/baidu?limit=10
```
---
## 七、文档索引
| 文档 | 说明 |
|-----|------|
| `PROJECT_OVERVIEW.md` | 项目总览 (本文档) |
| `PROJECT_STATUS.md` | 详细项目状态 |
| `HOTSPOT_MODULE.md` | 热点模块文档 |
| `NEXT_PHASE_PLAN.md` | 下阶段计划 |
| `POSTER_REFACTOR_PLAN.md` | 海报重构计划 |
| `TECHNICAL_DEBT.md` | 技术债务分析 |
| `JAVA_MIGRATION_GUIDE.md` | Java 端迁移指南 |
| `ARCHITECTURE_V2_MAINTAINABLE.md` | 架构设计 V2 |
---
## 八、技术债务 (摘要)
详见 `docs/TECHNICAL_DEBT.md`
| 问题 | 优先级 |
|-----|--------|
| 数据库双端访问 | 🔴 高 |
| ppid/sid/pid 混乱 | 🔴 高 |
| 图片 Base64 传输 | 🟡 中 |
| 临时文件堆积 (943MB) | 🟡 中 |
| 巨型文件 (poster.py 3031行) | 🟡 中 |
---
## 九、模块依赖关系
```
┌─────────────────────────────────────────────────────────────┐
│ API Layer │
│ api/routers/aigc.py hotspot.py reference.py prompt.py │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Domain Layer │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ aigc │ │ hotspot │ │ prompt │ │ poster │ │
│ │ engines │ │ crawlers │ │ registry │ │ service │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Infrastructure │
│ prompts/ config/ libs/MediaCrawler poster/templates │
└─────────────────────────────────────────────────────────────┘
```
---
## 十、版本历史
| 版本 | 日期 | 说明 |
|-----|------|------|
| 2.3.0 | 2024-12-10 | 热点模块增强MediaCrawler 集成 |
| 2.2.0 | 2024-12-09 | 海报服务重构,参考文献库 |
| 2.1.0 | 2024-12-08 | V2 AIGC APIPrompt Registry |
| 2.0.0 | 2024-12-07 | 架构重构 |