添加README文档
This commit is contained in:
171
README.md
Normal file
171
README.md
Normal file
@@ -0,0 +1,171 @@
|
||||
# 文字匹配图片项目
|
||||
|
||||
AI驱动的文章与图片智能匹配系统,支持从数据库读取文章数据,自动匹配图片或使用Gemini生成图片,并批量发布文章。
|
||||
|
||||
## 项目概述
|
||||
|
||||
本项目实现了以下核心功能:
|
||||
- 从数据库读取待处理的文章数据
|
||||
- 基于文章标签智能匹配现有图片库
|
||||
- 使用通义千问大模型评估文章与图片的匹配度
|
||||
- 匹配失败时自动调用Gemini API生成相关图片
|
||||
- 将生成的图片信息插入数据库(ai_images、ai_image_tags、ai_article_images)
|
||||
- 上传图片到服务器
|
||||
- 批量发布处理完成的文章
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **Python 3.12**
|
||||
- **数据库**: MySQL (PyMySQL)
|
||||
- **AI服务**:
|
||||
- Google Gemini API (图片生成)
|
||||
- 通义千问 API (文章图片匹配评估)
|
||||
- **依赖库**:
|
||||
- `requests==2.31.0` - HTTP请求
|
||||
- `google-genai==0.1.0` - Gemini API调用
|
||||
- `pymysql` - MySQL数据库连接
|
||||
- `Pillow==10.0.0` - 图片处理
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
文字匹配图片/
|
||||
├── match_article_images.py # 主程序:文章图片匹配
|
||||
├── database_config.py # 数据库配置管理
|
||||
├── log_config.py # 日志配置
|
||||
├── export_approved_articles.py # 导出审核通过的文章
|
||||
├── export_image_tags.py # 导出图片标签数据
|
||||
├── push_article_published.py # 文章发布监控脚本
|
||||
├── requirements.txt # 项目依赖
|
||||
├── setup_env.bat # Windows环境初始化脚本
|
||||
├── setup_env.sh # Linux/macOS环境初始化脚本
|
||||
├── db/ # 数据库表结构
|
||||
│ ├── split_tables/ # 按表拆分的SQL文件
|
||||
│ └── ai_articles.sql # 完整数据库结构
|
||||
└── logs/ # 日志目录
|
||||
```
|
||||
|
||||
## 环境配置
|
||||
|
||||
### 1. 创建虚拟环境
|
||||
|
||||
**Windows**:
|
||||
```bash
|
||||
python -m venv venv
|
||||
venv\Scripts\activate
|
||||
```
|
||||
|
||||
**Linux/macOS**:
|
||||
```bash
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
### 2. 安装依赖
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 3. 数据库配置
|
||||
|
||||
编辑 `database_config.py` 中的数据库连接信息:
|
||||
```python
|
||||
DB_CONFIG = {
|
||||
'host': 'your_host',
|
||||
'user': 'your_user',
|
||||
'password': 'your_password',
|
||||
'database': 'ai_article',
|
||||
'charset': 'utf8mb4'
|
||||
}
|
||||
```
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 文章图片匹配
|
||||
|
||||
**测试模式**(处理前N篇文章):
|
||||
```bash
|
||||
python match_article_images.py --test 3
|
||||
```
|
||||
|
||||
**正常模式**(处理所有文章):
|
||||
```bash
|
||||
python match_article_images.py
|
||||
```
|
||||
|
||||
### 导出数据
|
||||
|
||||
导出审核通过的文章:
|
||||
```bash
|
||||
python export_approved_articles.py
|
||||
```
|
||||
|
||||
导出图片标签数据:
|
||||
```bash
|
||||
python export_image_tags.py
|
||||
```
|
||||
|
||||
## 核心功能说明
|
||||
|
||||
### 1. 文章图片匹配流程
|
||||
|
||||
1. 从数据库读取状态为 `approved` 的文章
|
||||
2. 根据文章标签匹配图片库中的图片(image_attached_article_count < 5)
|
||||
3. 使用通义千问API评估匹配质量
|
||||
4. 匹配成功:更新图片使用计数
|
||||
5. 匹配失败:调用Gemini生成新图片
|
||||
|
||||
### 2. Gemini图片生成流程
|
||||
|
||||
1. 根据文章标题和标签生成提示词
|
||||
2. 调用Gemini API生成图片
|
||||
3. 将图片信息插入 `ai_images` 表
|
||||
4. 将图片标签信息插入 `ai_image_tags` 表(image_source=3表示AI生成)
|
||||
5. 上传图片到服务器
|
||||
6. 将文章与图片关联信息插入 `ai_article_images` 表(image_source=0)
|
||||
7. sort_order自动设置为当前文章下最大值+1
|
||||
|
||||
### 3. 批量发布
|
||||
|
||||
处理完成后自动调用 `/api/articles/batch-publish-auto` 接口批量发布文章。
|
||||
|
||||
## 数据库表结构
|
||||
|
||||
### 主要表说明
|
||||
|
||||
- **ai_articles**: 文章主表
|
||||
- **ai_images**: 图片信息表
|
||||
- **ai_image_tags**: 图片标签关联表
|
||||
- **ai_article_images**: 文章图片关联表
|
||||
- **ai_tags**: 标签表
|
||||
- **ai_keywords**: 关键词表
|
||||
- **ai_departments**: 部门表
|
||||
|
||||
## API配置
|
||||
|
||||
### Gemini API
|
||||
- 端点: `https://work.poloapi.com`
|
||||
- 模型: `gemini-3-pro-image-preview`
|
||||
|
||||
### 文章发布API
|
||||
- 登录: `http://47.99.184.230:8324/api/auth/login`
|
||||
- 图片上传: `http://47.99.184.230:8324/api/images/upload`
|
||||
- 批量发布: `http://47.99.184.230:8324/api/articles/batch-publish-auto`
|
||||
|
||||
## 日志
|
||||
|
||||
日志文件存储在 `logs/` 目录下:
|
||||
- `article_matching.log` - 文章匹配日志
|
||||
- `article_matching_error.log` - 错误日志
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 虚拟环境 (`venv/`) 已在 `.gitignore` 中排除
|
||||
2. API密钥和数据库密码请妥善保管
|
||||
3. 生产环境建议使用环境变量管理敏感信息
|
||||
4. 测试模式不会触发批量发布操作
|
||||
|
||||
## 许可证
|
||||
|
||||
内部项目,保密使用。
|
||||
Reference in New Issue
Block a user