TravelContentCreator/docs/PROJECT_OVERVIEW.md

391 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | 架构重构 |