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.
4.5 KiB
4.5 KiB
OpenAI API 集成与测试总结
日期: 2026-01-30
状态: 部分完成,需要进一步修复 Event Loop 问题
完成的工作
1. OpenAI API 配置 ✅
- 配置了代理服务:
https://aihubmix.com/v1 - API Key 已配置并验证可用
- 查询到 594 个可用模型
2. 模型支持 ✅
- 验证了可用的图片生成模型:
- DALL-E:
dall-e-2,dall-e-3✅ - FLUX:
FLUX-1.1-pro,flux-2-pro,flux-2-flex等 - Imagen:
imagen-3.0-generate-002,imagen-4.0-generate-001等
- DALL-E:
- 注意: 代理服务不支持 Stable Diffusion 模型
3. OpenAI Provider 实现 ✅
- 实现了
OpenAIProvider类 - 支持 DALL-E 图片生成
- 支持 TTS 配音生成
- 支持 Whisper 字幕生成
- 支持 GPT 文本处理
4. 文件存储集成 ✅
- 实现了
_download_and_upload_file()函数 - 成功下载 AI 生成的文件
- 成功上传到 MinIO
- 返回完整的文件元数据
5. 端到端测试 ⚠️
- ✅ API 调用成功
- ✅ DALL-E 3 图片生成成功
- ✅ 文件下载成功
- ✅ 文件上传到 MinIO 成功(在某些测试中)
- ❌ Event Loop 冲突导致部分任务失败
当前问题
Event Loop 冲突 🔴
问题描述:
RuntimeError: Task got Future attached to a different loop
根本原因:
- Celery ForkPoolWorker 中,每个任务在独立的进程中运行
- 全局的
async_session_maker和数据库引擎在不同的 event loop 之间共享 - asyncpg 连接池与 event loop 绑定,导致冲突
已尝试的修复:
- ✅ 创建
run_async_task()函数,为每个任务创建新的 event loop - ⚠️ 部分修复了数据库连接(
_update_job_status,_confirm_or_refund_credits,_download_and_upload_file) - ❌ 还有多处数据库连接未修复(所有任务函数中的
async with async_session_maker())
需要的修复:
- 将所有
async with async_session_maker()替换为独立的数据库连接 - 每次数据库操作都创建新的 engine 和 session_maker
- 操作完成后 dispose engine
测试结果
成功的测试(早期)
Job ID: 019c0df4-fde6-7d73-8ec6-f9c799504219
Status: COMPLETED (3)
Progress: 100%
File Size: 3,163,291 bytes
Storage: MinIO
File URL: http://localhost:6185/jointo/ai-generated/images/...
失败的测试(最近)
Job ID: 019c0e05-10b8-7322-84b2-c0d4b6d8e5e7
Status: COMPLETED (2)
Progress: 30%
Output Data: null
Error: Event loop conflict
后续工作
优先级 1: 修复 Event Loop 问题 🔴
- 批量替换
ai_tasks.py中所有的async with async_session_maker() - 为每个数据库操作创建独立的连接
- 确保所有 engine 都被正确 dispose
优先级 2: 完善测试 🟡
- 修复测试脚本,正确读取
output_data - 增加重试逻辑
- 添加文件验证(下载 MinIO 文件并验证)
优先级 3: 添加更多模型支持 🟢
- 添加 FLUX 模型支持
- 添加 Imagen 模型支持
- 创建专门的 Stability AI Provider(如果需要)
优先级 4: 性能优化 🟢
- 使用连接池(解决 event loop 问题后)
- 并发下载和上传
- 添加缓存机制
相关文件
核心文件
server/app/tasks/ai_tasks.py- AI 任务实现(需要修复)server/app/services/ai_providers/openai_provider.py- OpenAI Providerserver/app/services/ai_providers/factory.py- Provider 工厂server/app/services/file_storage_service.py- 文件存储服务
测试文件
server/scripts/test_ai_image_generation_e2e.py- 端到端测试server/scripts/test_sd_api.py- API 格式测试server/scripts/list_image_models.py- 模型列表查询
文档
docs/server/guides/openai-api-configuration.md- 配置指南docs/server/changelogs/2026-01-30-openai-provider-integration.md- 集成文档docs/server/changelogs/2026-01-30-ai-tasks-event-loop-fix.md- Event Loop 修复文档
建议
- 短期: 使用 Mock Provider 进行功能测试,避免 Event Loop 问题
- 中期: 完全重写
ai_tasks.py,使用更好的异步模式 - 长期: 考虑使用 Celery 的
gevent或eventletworker 替代prefork
结论
OpenAI API 集成的核心功能已经实现并验证可用:
- ✅ API 连接正常
- ✅ 图片生成成功
- ✅ 文件存储集成成功
但由于 Celery + asyncpg + event loop 的复杂性,需要进一步修复数据库连接管理才能稳定运行。
建议优先修复 Event Loop 问题,然后再进行更多功能开发。