RuoYi-Vue-Plus/ruoyi-modules/ruoyi-ai/README.md
2026-03-16 17:04:59 +08:00

277 lines
7.4 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.

# AI图片生成模块
## 功能概述
AI图片生成模块提供了基于AI的图片生成和编辑功能支持本地开源模型和云服务双模式切换。
## 核心功能
### 1. 文生图Text-to-Image
- 根据文字描述生成图片
- 支持自定义图片尺寸如750×1440、200×200等
- 支持负面描述(不希望在图片中出现的内容)
- 支持多种参数调节步数、CFG值、采样器等
### 2. 局部修改Image-to-Image/Inpainting
- 对已有图片进行局部编辑
- 支持蒙版编辑(指定编辑区域)
- 支持区域编辑(指定坐标和尺寸)
- 保持原图风格的一致性
### 3. 双模式支持
- **本地模式**基于Stable Diffusion开源模型
- **云服务模式**:基于阿里云通义万相等云服务
- 支持模式切换和自动降级
## 技术架构
### 模块结构
```
ruoyi-ai/
├── ruoyi-ai-api/ # API接口定义
├── ruoyi-ai-service/ # 业务逻辑实现
└── ruoyi-ai-starter/ # 自动配置启动器
```
### 核心组件
#### 1. 生成器接口AiImageGenerator
```java
public interface AiImageGenerator {
AiImageVO generateImage(AiImageGenerateDTO dto);
AiImageVO editImage(AiImageEditDTO dto);
String getType();
boolean isAvailable();
}
```
#### 2. 生成器工厂AiImageGeneratorFactory
- 管理所有生成器实例
- 根据模式选择合适的生成器
- 支持生成器自动降级
#### 3. 具体生成器实现
- **StableDiffusionGenerator**本地Stable Diffusion模型
- **AliyunWanxiangGenerator**:阿里云通义万相云服务
### 性能优化
#### 1. 并发控制
- 本地模型最大并发数3
- 云服务最大并发数5
- 支持QPS=10的并发要求
#### 2. 缓存机制
- 相同描述直接返回缓存结果
- 缓存过期时间60分钟
- 最大缓存数量1000条
#### 3. 异步处理
- 大图片生成采用异步模式
- 支持超时控制60秒
#### 4. 图片存储
- 自动生成缩略图200×200
- OSS存储支持CDN加速
- 图片格式自动识别和处理
## 配置说明
### 1. 基础配置
```yaml
ai:
image:
default-mode: LOCAL # 默认模式LOCAL/CLOUD
local-model:
sd-api-url: http://localhost:7860 # Stable Diffusion API地址
default-model: stable-diffusion-v1-5 # 默认模型
timeout: 60 # 超时时间(秒)
max-concurrency: 3 # 最大并发数
cloud-service:
provider: ALIYUN # 云服务提供商
api-key: your-api-key # API密钥
secret-key: your-secret-key # 密钥
region: cn-shanghai # 区域
timeout: 60 # 超时时间(秒)
max-concurrency: 5 # 最大并发数
```
### 2. 存储配置
```yaml
ai:
image:
storage:
bucket-name: ai-images # OSS存储桶名称
path-prefix: ai/image/ # 存储路径前缀
generate-thumbnail: true # 是否生成缩略图
thumbnail-width: 200 # 缩略图宽度
thumbnail-height: 200 # 缩略图高度
```
### 3. 限流配置
```yaml
ai:
image:
rate-limit:
enabled: true # 是否启用限流
max-requests-per-second: 10 # 每秒最大请求数
max-requests-per-minute: 100 # 每分钟最大请求数
max-requests-per-hour: 500 # 每小时最大请求数
```
### 4. 缓存配置
```yaml
ai:
image:
cache:
enabled: true # 是否启用缓存
expire-minutes: 60 # 缓存过期时间(分钟)
max-cache-size: 1000 # 最大缓存数量
```
## API接口
### 1. 生成图片
```http
POST /ai/image/generate
Content-Type: application/json
{
"prompt": "一只可爱的猫咪在草地上玩耍",
"width": 750,
"height": 1440,
"negativePrompt": "模糊,低质量",
"steps": 20,
"cfgScale": 7.5,
"generateMode": "LOCAL"
}
```
### 2. 编辑图片
```http
POST /ai/image/edit
Content-Type: application/json
{
"originalImageUrl": "https://oss.example.com/image.jpg",
"editPrompt": "将猫咪的眼睛变成蓝色",
"x": 100,
"y": 100,
"width": 200,
"height": 200,
"editMode": "LOCAL"
}
```
### 3. 查询记录
```http
GET /ai/image/page?pageNum=1&pageSize=10&status=SUCCESS
```
### 4. 删除记录
```http
DELETE /ai/image/{id}
```
## 使用示例
### 1. 基础文生图
```java
AiImageGenerateDTO dto = new AiImageGenerateDTO();
dto.setPrompt("一只可爱的猫咪在草地上玩耍");
dto.setWidth(750);
dto.setHeight(1440);
dto.setGenerateMode("LOCAL");
AiImageVO result = aiImageService.generateImage(dto);
```
### 2. 高级参数设置
```java
AiImageGenerateDTO dto = new AiImageGenerateDTO();
dto.setPrompt("一只可爱的猫咪在草地上玩耍");
dto.setNegativePrompt("模糊,低质量,变形");
dto.setWidth(1024);
dto.setHeight(1024);
dto.setSteps(30);
dto.setCfgScale(8.0);
dto.setSampler("DPM++ 2M Karras");
dto.setSeed(12345L);
dto.setGenerateMode("CLOUD");
```
### 3. 局部编辑
```java
AiImageEditDTO dto = new AiImageEditDTO();
dto.setOriginalImageUrl("https://oss.example.com/cat.jpg");
dto.setEditPrompt("将猫咪的眼睛变成蓝色");
dto.setX(150);
dto.setY(120);
dto.setWidth(80);
dto.setHeight(60);
dto.setEditMode("LOCAL");
AiImageVO result = aiImageService.editImage(dto);
```
## 部署说明
### 1. 本地Stable Diffusion部署
```bash
# 使用Docker部署
docker run -d --name stable-diffusion \
-p 7860:7860 \
-v /path/to/models:/app/models \
--gpus all \
stable-diffusion-webui:latest
```
### 2. 阿里云通义万相配置
1. 注册阿里云账号
2. 开通DashScope服务
3. 获取API密钥
4. 配置到application.yml
### 3. 数据库表结构
```sql
CREATE TABLE `ai_image` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`image_url` varchar(500) DEFAULT NULL COMMENT '图片URL',
`thumbnail_url` varchar(500) DEFAULT NULL COMMENT '缩略图URL',
`original_image_url` varchar(500) DEFAULT NULL COMMENT '原图片URL',
`prompt` text COMMENT '生成描述',
`negative_prompt` text COMMENT '负面描述',
`width` int DEFAULT NULL COMMENT '图片宽度',
`height` int DEFAULT NULL COMMENT '图片高度',
`file_size` bigint DEFAULT NULL COMMENT '文件大小',
`file_format` varchar(10) DEFAULT NULL COMMENT '文件格式',
`generate_mode` varchar(20) DEFAULT NULL COMMENT '生成模式',
`model_name` varchar(100) DEFAULT NULL COMMENT '模型名称',
`generate_time` bigint DEFAULT NULL COMMENT '生成耗时',
`status` varchar(20) DEFAULT NULL COMMENT '生成状态',
`error_message` text COMMENT '错误信息',
`generate_params` text COMMENT '生成参数',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI图片生成记录';
```
## 性能指标
- **并发能力**最大QPS=10
- **响应时间**图片生成最慢不超过60秒
- **图片质量**:支持多种分辨率和格式
- **稳定性**:支持自动降级和故障转移
- **扩展性**支持多种AI模型和云服务
## 注意事项
1. **资源消耗**AI图片生成需要大量计算资源建议部署在GPU服务器
2. **成本控制**:云服务按调用次数收费,注意设置限流和监控
3. **内容审核**:生成的图片需要符合相关法律法规
4. **版权保护**:注意生成图片的版权问题
5. **数据安全**:敏感图片需要加密存储和传输