185 lines
9.0 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`: **项目入口与协调器**: 负责加载配置、初始化共享资源(如 AI Agent、并按顺序调用 `utils` 模块中的函数来执行主要流程(选题生成 -> 内容与海报生成协调)。
- `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`: **提示词管理器**: **集中管理**不同阶段提示词的构建逻辑。
- `tweet_generator.py`: **主要流程执行与数据结构**: 包含执行**选题生成** (`run_topic_generation_pipeline`)、**单选题内容生成** (`generate_content_for_topic`)、**单选题海报生成** (`generate_posters_for_topic`) 的核心函数,以及相关的数据类。
- `genPrompts/`: 内容生成提示词模板目录。
- `SelectPrompt/`: 选题生成提示词模板目录。
- `resource/`: 存放基础的景点信息 `.txt` 文件等数据资源。
- `examples/`: 使用示例和测试脚本。
- `result/`: 默认输出结果保存目录。
## 项目流程与技术细节
1. **加载配置**: `main.py` 读取 `poster_gen_config.json` 文件。
2. **选题生成**:
- `main.py` 调用 `utils.tweet_generator.run_topic_generation_pipeline(config)`
- 此函数内部:
- 调用 `utils.prompt_manager.PromptManager.get_topic_prompts()` 构建提示词。
- 初始化 `core.ai_agent.AI_Agent`
- 调用 AI Agent 生成选题文本。
- 使用 `core.topic_parser` 解析结果。
- 保存选题结果 (`tweet_topic.json`)。
- 关闭此阶段的 AI Agent。
- 返回 `run_id``tweet_topic_record``main.py`
3. **内容与海报生成协调**: (在 `main.generate_content_and_posters_step` 中执行)
- 初始化 `utils.prompt_manager.PromptManager`
- 初始化一个**共享的** `core.ai_agent.AI_Agent` 实例供后续所有内容生成使用。
- 遍历上一步返回的每个选题 (`topic_item`)
- **内容生成**: 调用 `utils.tweet_generator.generate_content_for_topic()`,传入共享的 AI Agent、Prompt Manager、配置和当前选题信息。
- 此函数内部循环生成该选题的所有内容变体,每次调用 `prompt_manager.get_content_prompts()` 获取特定提示词,并使用共享 AI Agent 执行 `generate_single_content`
- **海报生成**: 如果内容生成成功,调用 `utils.tweet_generator.generate_posters_for_topic()`,传入配置、选题信息和生成的内容列表。
- 此函数内部负责初始化 `ContentGenerator``PosterGenerator`,调用 `core` 模块中的函数处理图片和文本,并生成所有海报变体。
- 所有选题处理完毕后,在 `main.generate_content_and_posters_step` 中关闭共享的 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 和文件路径配置。
- 如果遇到问题,检查程序输出的日志信息和错误提示。