391 lines
12 KiB
Markdown
391 lines
12 KiB
Markdown
|
|
# 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 API,Prompt Registry |
|
|||
|
|
| 2.0.0 | 2024-12-07 | 架构重构 |
|