2025-04-22 14:21:36 +08:00

184 lines
8.9 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.

# 旅游内容创作工具 (Travel Content Creator)
这是一个基于AI的旅游内容自动生成工具可以根据景点信息自动生成高质量的旅游推文和宣传海报。
## 功能特点
- **自动选题生成**:根据提供的景点信息和配置的提示词模板,自动生成吸引人的旅游选题。
- **内容创作**:基于选题和配置的提示词模板,自动生成文字内容(标题、正文)。
- **海报制作**:结合景点图片和生成的文字内容,自动创建精美的宣传海报。
- **批量处理**:支持一次性生成多个选题和多个变体内容。
- **模块化设计**核心功能配置加载、提示词管理、AI交互、选题、内容生成、海报制作分离方便维护和扩展。
- **配置驱动**:通过 `poster_gen_config.json` 文件集中管理所有运行参数。
## 安装
### 环境要求
- Python 3.6+
- 依赖库安装:
```bash
# 安装依赖库
pip install numpy pandas opencv-python pillow
# 可能还需要安装AI模型的客户端库例如 requests 或 特定模型的SDK
# pip install requests
```
### 项目依赖项
- OpenCV (cv2):图像处理
- NumPy数据操作
- Pandas数据处理
- PIL (Pillow):图像处理和绘制
## 核心组件与目录结构
- `main.py`: 项目入口,负责加载配置、编排主要流程(选题生成 -> 内容与海报生成)。
- `poster_gen_config.json`: (用户需从 `example_config.json` 创建) 核心配置文件。
- `core/`: 核心算法与功能模块
- `ai_agent.py`: **AI代理**: 封装与大语言模型 API 的底层交互逻辑(发送请求、接收响应)。
- `topic_parser.py`: **选题解析器**: 解析 AI 模型返回的选题文本。
- `contentGen.py`: **内容处理器**: 对 AI 生成的原始推文内容进行结构化处理,提取适用于海报的元素。
- `posterGen.py`: **海报生成器**: 负责将图片和文字元素组合生成最终的海报图片,处理字体、布局等。
- `simple_collage.py`: **图片拼贴工具**: 提供图片预处理和拼贴功能。
- `utils/`: 工具与辅助模块
- `resource_loader.py`: **资源加载器**: 负责加载项目所需的各种**原始**资源文件(如文本文件、配置文件中的路径指向的文件)。
- `prompt_manager.py`: **提示词管理器**: **集中管理**不同阶段(选题、内容生成)的提示词构建逻辑。它调用 `ResourceLoader` 获取基础文件,并根据配置和当前任务(如特定选题)组装最终的 System Prompt 和 User Prompt。
- `tweet_generator.py`: **流程与数据结构**: 包含选题生成 (`run_topic_generation_pipeline`) 和单篇内容生成 (`generate_single_content`) 的流程函数,以及相关的数据类(如 `tweetTopicRecord`, `tweetContent`)。
- `genPrompts/`: 内容生成提示词模板目录。
- `SelectPrompt/`: 选题生成提示词模板目录。
- `resource/`: 存放基础的景点信息 `.txt` 文件等数据资源。
- `examples/`: 使用示例和测试脚本。
- `result/`: 默认输出结果保存目录。
## 项目流程与技术细节
1. **加载配置**: `main.py` 读取 `poster_gen_config.json` 文件。
2. **选题生成**:
- 调用 `utils.tweet_generator.run_topic_generation_pipeline`
- 内部调用 `utils.prompt_manager.PromptManager.get_topic_prompts()` 来构建选题阶段的系统和用户提示词(结合模板、资源文件、配置参数)。
- 初始化一个 `core.ai_agent.AI_Agent` 实例。
- 调用 AI Agent 发送请求生成选题文本。
- 使用 `core.topic_parser` 解析结果。
- 保存选题结果 (`tweet_topic.json`) 到输出目录。
- 关闭此阶段的 AI Agent。
3. **内容与海报生成**: (在 `main.generate_content_and_posters_step` 中执行)
- 初始化 `utils.prompt_manager.PromptManager`**一个共享的** `core.ai_agent.AI_Agent` 实例供此阶段所有任务使用(**优化点避免为每个变体重复创建Agent**)。
- 遍历上一步生成的每个选题 (`topic_item`)
- 为当前选题调用 `prompt_manager.get_content_prompts(topic_item)` 获取内容生成的特定提示词。
- 遍历每个变体 (variant)
- 调用 `utils.tweet_generator.generate_single_content`,传入**共享的 AI Agent** 和**特定于此选题的提示词**,生成推文内容。
- 调用 `core.contentGen` 处理生成的文本内容,准备海报所需元素。
- 调用 `core.simple_collage` 处理图片。
- 调用 `core.posterGen` 结合图片和文本生成最终海报。
- 所有选题处理完毕后,关闭此阶段共享的 AI Agent。
## 使用方法
1. 准备景点资源信息 (`.txt` 文件),放入 `resource/Object/` 目录(或其他在配置中指定的路径)。
2. 准备景点图片资源,按照 `README.md` 中"开始使用"部分的说明组织图片目录结构,并确保 `poster_gen_config.json` 中的 `image_base_dir` 指向正确的图片根目录。
3. 复制 `example_config.json``poster_gen_config.json`,并根据你的 API Key、模型端点、文件路径、图片根目录等进行修改。
4. **运行完整流程**:
```bash
python main.py
```
5. **分阶段运行**: (参考 `examples/` 目录下的脚本)
```bash
# 阶段 1: 仅生成选题
python examples/run_step1_topics.py
# (记下输出的 Run ID)
# 阶段 2: 处理已生成的选题
python examples/run_step2_content_posters.py <your_run_id>
```
## 配置说明
配置文件: `poster_gen_config.json`
**必须配置项**
- `api_url`: 大语言模型 API 地址
- `api_key`: API 密钥
- `model`: 使用的模型名称
- `topic_system_prompt`: 选题生成系统提示词文件路径
- `topic_user_prompt`: 选题生成基础用户提示词文件路径
- `content_system_prompt`: 内容生成系统提示词文件路径
- `resource_dir`: 包含景点等资源文件信息的列表 (结构见 `example_config.json`)
- `prompts_dir`: 存放 Demand/Style/Refer 等提示词片段的目录路径
- `output_dir`: 输出结果保存目录路径
- `image_base_dir`: **图片资源根目录绝对路径或相对路径**
- `num`: (选题阶段)生成选题数量
- `variants`: (内容生成阶段)每个选题生成的变体数量
**可选配置项**
- `date`: 日期标记(用于提示词,默认为当前日期)
- `topic_temperature`, `topic_top_p`, `topic_max_tokens`: 选题生成 API 相关参数
- `content_temperature`: 内容生成 API 相关参数
- `camera_image_subdir`: 存放原始照片和描述文件的子目录名(相对于 `image_base_dir`,默认"相机"
- `modify_image_subdir`: 存放处理后/用于拼贴的图片的子目录名(相对于 `image_base_dir`,默认"modify"
- `poster_target_size`: 海报目标尺寸 `[宽, 高]`(默认 `[900, 1200]`
项目提供了一个示例配置文件 `example_config.json`,请务必复制并修改:
```bash
cp example_config.json poster_gen_config.json
nano poster_gen_config.json
```
## 开始使用
### 1. 准备景点信息文件
在 `resource/Object/` 目录中创建景点信息文件UTF-8编码文件名应与配置和选题结果中的 `object` 字段对应,例如 `景点信息-泰宁古城.txt`
```
景点名称:泰宁古城
位置:福建省三明市泰宁县
简介:泰宁古城始建于宋代...
特色:古城墙、古街巷...
```
### 2. 准备图片资源
将景点的高质量图片保存在配置的 `image_base_dir` 下,并按以下推荐结构组织(子目录名可通过配置修改):
```
<image_base_dir>/
├── 相机/ (camera_image_subdir)
│ ├── 泰宁古城/
│ │ ├── 图片1.jpg
│ │ ├── 图片2.jpg
│ │ └── description.txt (可选的图片描述文件,供内容生成参考)
│ └── 其他景点/
│ └── ...
└── modify/ (modify_image_subdir)
├── 泰宁古城/
│ ├── 用于拼贴的图片1.jpg
│ ├── ...
└── 其他景点/
└── ...
```
**注意**: 海报生成步骤会从 `modify` 子目录中查找用于制作海报的图片。
### 3. 配置文件
仔细检查并修改 `poster_gen_config.json`,确保所有路径(特别是 `image_base_dir`)和 API 信息正确无误。
### 4. 运行生成流程
根据需要选择完整流程或分阶段执行(见"使用方法"部分)。
生成的结果将保存在配置的`output_dir`目录下的 `run_id` 子目录中。
## 示例
查看`examples/`目录及其 `README.md` 文件,了解如何运行测试脚本或单独使用项目组件。
## 注意事项
- 确保已安装所有依赖库。
- **图片目录结构和命名**需严格符合预期,以便程序能找到对应景点的图片。
- AI生成内容的质量很大程度上取决于**提示词的设计**和**输入资源信息的质量**。
- 仔细检查 API Key、URL 和文件路径配置。
- 如果遇到问题,检查程序输出的日志信息和错误提示。