You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
9.4 KiB
9.4 KiB
OpenAI/AIHubMix 集成最终总结
日期: 2026-01-30
类型: Feature Implementation
影响范围: AI Service, OpenAI Provider, AI Tasks, File Storage
概述
完成了 OpenAI/AIHubMix API 的完整集成,包括统一客户端封装、Provider 重构、二进制数据处理和端到端测试验证。
实现内容
1. AIHubMix 统一客户端
文件: server/app/clients/aihubmix_client.py
创建了统一的 AIHubMixClient 类,封装所有 AIHubMix API 调用:
支持的功能
-
图片生成
- 支持 DALL-E, Stable Diffusion, Flux, Imagen 等
- 方法:
generate_image()
-
视频生成(异步 + 轮询)
- 支持 Veo, Sora, Wan 系列
- 方法:
generate_video(),wait_for_video_completion(),download_video() - 支持参考图片(image2video)
-
文本转语音(TTS)
- 支持 OpenAI TTS 模型
- 方法:
generate_speech() - 返回音频二进制数据
-
语音转文本(STT)
- 支持 Whisper 模型
- 方法:
transcribe_audio() - 支持时间戳和分段
-
文本处理(Chat Completions)
- 支持 GPT, Claude, Gemini 等
- 方法:
chat_completion() - 支持 JSON 模式
-
模型查询
- 方法:
list_models() - 支持按类型筛选
- 方法:
关键特性
- 统一认证:所有请求使用
Authorization: Bearer {api_key} - 超时控制:可配置超时时间(默认 300 秒)
- 错误处理:自动抛出 HTTP 异常
- 日志记录:完整的请求/响应日志
2. OpenAIProvider 完全重构
文件: server/app/services/ai_providers/openai_provider.py
所有方法都已重构为使用 AIHubMixClient:
重构的方法
-
generate_image()- 使用
self.client.generate_image() - 支持 DALL-E 和 Stable Diffusion
- 自动处理尺寸限制
- 使用
-
generate_video()- 使用
self.client.generate_video() - 自动轮询等待完成(
wait_for_video_completion()) - 下载视频文件(
download_video()) - 返回
video_data字段(二进制数据)
- 使用
-
generate_voice()- 使用
self.client.generate_speech() - 返回
audio_data字段(二进制数据)
- 使用
-
generate_subtitle()- 使用
self.client.transcribe_audio() - 支持 Whisper 转录
- 使用
-
process_text()- 使用
self.client.chat_completion() - 支持多种任务类型(剧本解析、内容分析、风格转换、提示词生成)
- 支持 JSON 模式
- 使用
移除的依赖
- ❌ 移除了直接的
httpx调用 - ✅ 统一使用
AIHubMixClient
3. AI Tasks 二进制数据处理
文件: server/app/tasks/ai_tasks.py
视频生成任务优化
# 处理 video_data 字段(二进制数据)
if result.get('video_data'):
# 直接上传二进制数据到 MinIO
file_storage = FileStorageService(session)
metadata = await file_storage.upload_file(
file_content=result['video_data'],
filename=f"video_{job_id}.mp4",
content_type='video/mp4',
category='ai-generated/videos',
user_id=UUID(user_id)
)
# 移除 video_data,添加文件元数据
result.pop('video_data', None)
result.update({...})
配音生成任务优化
# 处理 audio_data 字段(二进制数据)
if result.get('audio_data'):
# 直接上传二进制数据到 MinIO
file_storage = FileStorageService(session)
metadata = await file_storage.upload_file(
file_content=result['audio_data'],
filename=f"voice_{job_id}.mp3",
content_type='audio/mpeg',
category='ai-generated/voices',
user_id=UUID(user_id)
)
# 移除 audio_data,添加文件元数据
result.pop('audio_data', None)
result.update({...})
优势
- 无需临时 URL:直接处理二进制数据
- 减少网络请求:不需要额外的下载步骤
- 更高效:避免临时文件存储
- 兼容性:保留了 URL 方式的兼容处理
4. 端到端测试验证
图片生成测试
脚本: server/scripts/test_ai_image_generation_e2e.py
- ✅ 登录认证
- ✅ 创建图片生成任务
- ✅ 轮询任务状态
- ✅ 验证文件上传到 MinIO
- ✅ 验证文件元数据
视频生成测试
脚本: server/scripts/test_ai_video_generation_e2e.py
- ✅ 登录认证
- ✅ 创建视频生成任务(text2video)
- ✅ 轮询任务状态(约 57 秒)
- ✅ 验证视频文件上传到 MinIO
- ✅ 验证文件元数据
测试结果:
模型: veo-3.1-generate-preview
分辨率: 1280x720 (720P)
时长: 6 秒
文件大小: 5.48 MB
积分消耗: 80 积分
存储位置: MinIO (http://localhost:6185/jointo/...)
技术亮点
1. 统一客户端架构
┌─────────────────────────────────────────┐
│ AIHubMixClient │
│ (统一封装所有 AIHubMix API) │
└─────────────────────────────────────────┘
▲
│
┌───────────┴───────────┐
│ │
┌───────────────┐ ┌───────────────┐
│ OpenAIProvider│ │ 其他 Provider │
│ (使用客户端) │ │ (未来扩展) │
└───────────────┘ └───────────────┘
│ │
└───────────┬───────────┘
▼
┌───────────────────────┐
│ AI Tasks │
│ (处理二进制数据) │
└───────────────────────┘
▼
┌───────────────────────┐
│ FileStorageService │
│ (上传到 MinIO) │
└───────────────────────┘
2. 视频生成流程
1. 用户请求 → AI Service
2. 创建 Job → 扣除积分(pending)
3. 触发 Celery Task
4. OpenAIProvider.generate_video()
├─ 调用 AIHubMixClient.generate_video()
├─ 等待完成 wait_for_video_completion()
└─ 下载视频 download_video()
5. 返回 video_data(二进制)
6. AI Task 上传到 MinIO
7. 更新 Job 状态 → 确认积分
8. 返回文件 URL 给用户
3. 二进制数据处理优势
旧方式(URL 下载):
AI Provider → 临时 URL → 下载 → 上传 MinIO
新方式(二进制数据):
AI Provider → 二进制数据 → 直接上传 MinIO
优势:
- 减少一次网络请求
- 无需处理临时 URL 过期
- 更高效的内存使用
- 更好的错误处理
配置说明
环境变量
# AIHubMix API 配置
OPENAI_API_KEY=sk-SmhsG7HjfsvDHCuvFc27A5208962499fA5Aa2d81534d31B9
OPENAI_BASE_URL=https://aihubmix.com/v1
支持的模型
视频生成
veo-3.1-generate-preview- Google Veo 3.1veo-3.0-generate-preview- Google Veo 3.0sora-2- OpenAI Sora 2sora-2-pro- OpenAI Sora 2 Prowan2.2-i2v-plus- 万相 2.2 图生视频wan2.2-t2v-plus- 万相 2.2 文生视频wan2.5-i2v-preview- 万相 2.5 图生视频wan2.5-t2v-preview- 万相 2.5 文生视频
图片生成
dall-e-3- DALL-E 3dall-e-2- DALL-E 2stable-diffusion-xl- Stable Diffusion XLflux-1.1-pro- Flux 1.1 Pro- 等 42 个模型
其他
- TTS:
tts-1,tts-1-hd - STT:
whisper-1 - Chat: GPT, Claude, Gemini 等 206 个模型
测试覆盖
单元测试
- ✅ AIHubMixClient 方法测试
- ✅ OpenAIProvider 方法测试
- ✅ AI Tasks 数据处理测试
集成测试
- ✅ 图片生成端到端测试
- ✅ 视频生成端到端测试
- ✅ 文件上传到 MinIO 验证
- ✅ 积分系统集成验证
性能指标
视频生成
- 平均耗时: 约 1 分钟(6 秒视频)
- 文件大小: 约 5-10 MB(720P)
- 积分消耗: 80 积分/次
图片生成
- 平均耗时: 约 10-20 秒
- 文件大小: 约 1-3 MB
- 积分消耗: 20-40 积分/次
后续优化建议
1. 缓存优化
- 缓存模型列表(减少 API 调用)
- 缓存定价配置
2. 错误处理增强
- 添加重试机制(网络错误)
- 添加降级策略(模型不可用时)
3. 监控告警
- 添加任务耗时监控
- 添加失败率告警
- 添加积分消耗统计
4. 功能扩展
- 支持批量生成
- 支持优先级队列
- 支持取消任务
相关文档
总结
本次集成完成了从 API 配置、客户端封装、Provider 重构到端到端测试的完整流程。系统现在可以:
- ✅ 通过 AIHubMix 代理调用 OpenAI API
- ✅ 支持图片、视频、TTS、STT、Chat 等多种 AI 能力
- ✅ 自动处理异步任务(视频生成轮询)
- ✅ 高效处理二进制数据(直接上传 MinIO)
- ✅ 完整的积分系统集成
- ✅ 端到端测试验证
状态: ✅ 生产就绪