feat: 添加AI模板管理系统和Docker配置

- 实现面向对象的模板管理系统
- 添加N8n模板抽象类和具体实现
- 创建老照片修复上色模板
- 创建修人物表情闭眼模板
- 集成BowongAI服务
- 添加完整的Docker配置(多阶段构建)
- 添加docker-compose配置
- 完善项目文档和API设计
This commit is contained in:
2025-09-03 17:37:30 +08:00
parent 7e42c9e756
commit e30d7cc4da
25 changed files with 6734 additions and 24 deletions

View File

@@ -0,0 +1,350 @@
# BowongAI 集成总结
## 🎯 **集成概述**
基于您提供的BowongAI API接口我已经完整更新了模板管理系统实现了图生图和图生视频功能的集成。
## 🔗 **API接口信息**
### Webhook URL
```
https://n8n.bowongai.com/webhook/76f92dbf-785f-4add-96b5-a108174b7c14
```
### 环境地址
```
https://bowongai-test--text-video-agent-fastapi-app.modal.run
```
## 📋 **支持的工作流**
### 1. 图生图工作流
```json
{
"workflow": "图生图",
"environment": "https://bowongai-test--text-video-agent-fastapi-app.modal.run",
"image_generation": {
"model": "gemini-2.5-flash-image-preview",
"prompt": "详细的提示词...",
"image_url": "输入图片URL"
}
}
```
### 2. 图生图+生视频工作流
```json
{
"workflow": "图生图+生视频",
"environment": "https://bowongai-test--text-video-agent-fastapi-app.modal.run",
"image_generation": {
"model": "gemini-2.5-flash-image-preview",
"prompt": "详细的提示词...",
"image_url": "输入图片URL"
},
"video_generation": {
"model": "302/MiniMax-Hailuo-02",
"prompt": "do anything you want",
"duration": "6",
"aspect_ratio": "9:16"
}
}
```
## 🏗️ **技术实现**
### 1. BowongAI基础服务类通用服务
```typescript
// src/services/bowongai.service.ts
@Injectable()
export class BowongAIService {
private readonly webhookUrl = 'https://n8n.bowongai.com/webhook/76f92dbf-785f-4add-96b5-a108174b7c14';
private readonly environment = 'https://bowongai-test--text-video-agent-fastapi-app.modal.run';
// 通用图生图接口 - 各模板传入自己的参数
async imageToImage(options: {
prompt: string;
imageUrl: string;
model?: string;
}): Promise<ImageToImageResponse>
// 通用图生视频接口 - 各模板传入自己的参数
async imageToVideo(options: {
imagePrompt: string;
videoPrompt: string;
imageUrl: string;
duration?: number;
aspectRatio?: string;
imageModel?: string;
videoModel?: string;
}): Promise<ImageToVideoResponse>
}
```
### 2. 具体模板实现(各自定制)
#### 换装模板(图生图)
```typescript
@Injectable()
export class OutfitChangeTemplate extends ImageGenerateTemplate {
readonly metadata = {
code: 'outfit_change_v1',
name: '智能换装',
category: '换装',
creditCost: 15,
};
constructor(private readonly bowongAI: BowongAIService) {}
async execute(input, context) {
// 换装模板专用提示词
const prompt = this.buildOutfitChangePrompt(input);
return await this.bowongAI.imageToImage({
prompt,
imageUrl: input.inputImage,
model: 'gemini-2.5-flash-image-preview', // 换装专用模型
});
}
private buildOutfitChangePrompt(input) {
return `Please convert this photo into a highly detailed character model wearing ${input.clothingDescription}. Place in front of the model a delicate, colorful box featuring the printed image of the person from the photo...`;
}
}
```
#### 人像增强模板(图生图)
```typescript
@Injectable()
export class PortraitEnhanceTemplate extends ImageGenerateTemplate {
readonly metadata = {
code: 'portrait_enhance_v1',
name: '人像增强',
category: '人像处理',
creditCost: 12,
};
constructor(private readonly bowongAI: BowongAIService) {}
async execute(input, context) {
// 人像增强专用提示词
const prompt = this.buildPortraitPrompt(input);
return await this.bowongAI.imageToImage({
prompt,
imageUrl: input.inputImage,
model: 'gemini-2.5-flash-image-preview',
});
}
private buildPortraitPrompt(input) {
return `Enhance this portrait photo to professional quality. Improve skin texture, lighting, and overall clarity while maintaining natural appearance. ${input.enhanceLevel === 'subtle' ? 'Apply subtle enhancements' : 'Apply dramatic improvements'}...`;
}
}
```
#### 动态视频模板(图生视频)
```typescript
@Injectable()
export class DynamicVideoTemplate extends VideoGenerateTemplate {
readonly metadata = {
code: 'dynamic_video_v1',
name: '动态视频',
category: '视频生成',
creditCost: 45,
};
constructor(private readonly bowongAI: BowongAIService) {}
async execute(input, context) {
// 动态视频专用提示词
const imagePrompt = this.buildImagePrompt(input);
const videoPrompt = this.buildVideoPrompt(input);
return await this.bowongAI.imageToVideo({
imagePrompt,
videoPrompt,
imageUrl: input.inputImage,
duration: input.duration || 4,
aspectRatio: input.aspectRatio || '9:16',
imageModel: 'gemini-2.5-flash-image-preview',
videoModel: '302/MiniMax-Hailuo-02',
});
}
private buildImagePrompt(input) {
return `Convert this image for dynamic video generation with ${input.motionType} motion effects...`;
}
private buildVideoPrompt(input) {
return `Create ${input.motionType} animation with ${input.intensity} intensity. ${input.customPrompt || 'Natural movement'}`;
}
}
```
## 🎨 **模板化提示词设计**
### 换装模板提示词
```typescript
private buildOutfitChangePrompt(input: OutfitChangeInput): string {
const styleMap = {
casual: 'casual everyday wear',
formal: 'formal business attire',
vintage: 'vintage retro style',
modern: 'modern contemporary fashion',
elegant: 'elegant sophisticated style'
};
const styleText = styleMap[input.style] || 'casual';
return `Please convert this photo into a highly detailed character model wearing ${input.clothingDescription}.
Style: ${styleText}.
Place in front of the model a delicate, colorful box featuring the printed image of the person from the photo.
Behind the box, show a computer screen actively displaying the modeling process.
Set the entire scene in a bright, stylish indoor environment.
Ensure the lighting is crisp and luminous, highlighting both the model and its packaging.`;
}
```
### 人像增强模板提示词
```typescript
private buildPortraitPrompt(input: PortraitEnhanceInput): string {
const enhancementLevels = {
subtle: 'Apply subtle professional enhancements',
moderate: 'Apply moderate quality improvements',
dramatic: 'Apply dramatic professional transformation'
};
const enhancement = enhancementLevels[input.enhanceLevel] || 'moderate';
return `${enhancement} to this portrait photo.
Improve skin texture, lighting, and overall clarity while maintaining natural appearance.
Focus on professional photography quality with ${input.lightingStyle || 'natural'} lighting.
Preserve the person's unique features and expressions.`;
}
```
### 动态视频模板提示词
```typescript
private buildVideoPrompt(input: DynamicVideoInput): string {
const motionTypes = {
gentle: 'gentle subtle movements',
dynamic: 'dynamic energetic motion',
cinematic: 'cinematic smooth transitions',
artistic: 'artistic creative effects'
};
const motion = motionTypes[input.motionType] || 'gentle';
return `Create ${motion} with ${input.intensity || 'medium'} intensity.
${input.customPrompt || 'Natural lifelike movement'}.
Maintain character consistency throughout the animation.`;
}
```
## 💰 **模板积分消耗**
### 图生图模板
- **换装模板**: 15积分
- **人像增强**: 12积分
- **风格转换**: 18积分
- **背景替换**: 20积分
### 图生视频模板
- **动态视频**: 45积分
- **角色动画**: 50积分
- **场景视频**: 55积分
- **特效视频**: 60积分
## 🔧 **环境配置**
```env
# BowongAI 配置
BOWONGAI_WEBHOOK_URL=https://n8n.bowongai.com/webhook/76f92dbf-785f-4add-96b5-a108174b7c14
BOWONGAI_ENVIRONMENT=https://bowongai-test--text-video-agent-fastapi-app.modal.run
```
## 📱 **前端调用示例**
### 图生图调用
```typescript
const response = await fetch('/api/templates/outfit_change_v1/execute', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
inputImage: 'https://cdn.roasmax.cn/upload/e9066bf20fb546b09ece65d6fbcf2dd3.png',
clothingDescription: '红色连衣裙',
style: 'elegant'
})
});
```
### 图生视频调用
```typescript
const response = await fetch('/api/templates/image_to_video_v1/execute', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
inputImage: 'https://cdn.roasmax.cn/upload/e9066bf20fb546b09ece65d6fbcf2dd3.png',
videoPrompt: '让角色动起来',
duration: 6,
resolution: '9:16'
})
});
```
## ✅ **基础服务架构优势**
### 🏗️ **分层设计**
1. **BowongAI基础服务层**: 提供通用的API调用能力
2. **模板业务层**: 各模板实现自己的业务逻辑和提示词
3. **参数定制层**: 每个模板可以传入不同的参数配置
### 🎯 **模板独立性**
- ✅ 每个模板有独立的提示词逻辑
- ✅ 每个模板有独立的参数验证
- ✅ 每个模板有独立的积分消耗
- ✅ 每个模板可以选择不同的AI模型
### 📊 **当前实现状态**
- ✅ BowongAI基础服务实现
- ✅ 换装模板(图生图)- 15积分
- ✅ 图生视频模板 - 50积分
- ✅ 人像增强模板 - 12积分
- ✅ 模板工厂和模块配置
- ✅ 环境配置和前端示例
## 🚀 **扩展新模板步骤**
1. **继承对应的抽象类**
2. **实现execute方法调用BowongAI基础服务**
3. **定义模板专用的提示词构建逻辑**
4. **配置模板特定的参数和积分**
5. **在工厂类中注册新模板**
### 示例:添加风格转换模板
```typescript
@Injectable()
export class StyleTransferTemplate extends ImageGenerateTemplate {
async execute(input, context) {
const prompt = this.buildStylePrompt(input); // 风格转换专用提示词
return await this.bowongAI.imageToImage({
prompt,
imageUrl: input.inputImage,
model: 'gemini-2.5-flash-image-preview',
});
}
private buildStylePrompt(input) {
return `Transform this image into ${input.targetStyle} style...`;
}
}
```
现在BowongAI作为基础服务支持各种模板的个性化定制🎉