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.
7.5 KiB
7.5 KiB
OpenAIProvider 重命名为 AIHubMixProvider
日期: 2026-01-30
类型: 架构优化
影响范围: AI Provider 层
背景
在之前的实现中,OpenAIProvider 这个命名存在误导性:
- 命名不准确:
OpenAIProvider实际上通过AIHubMixClient调用 AIHubMix 代理服务 - 职责不清:它不仅支持 OpenAI 模型,还支持 Stability AI、Veo、Sora、Wan 等多个厂商的模型
- 架构不一致:Client 层叫
AIHubMixClient,Provider 层却叫OpenAIProvider
问题
命名误导
# ❌ 误导性命名
class OpenAIProvider(BaseAIProvider):
"""OpenAI 提供商(通过 AIHubMix 代理)"""
def __init__(self, model_name: str, config: Optional[Dict[str, Any]] = None):
# 实际上使用 AIHubMixClient
self.client = AIHubMixClient(...)
问题:
- 新开发者会认为这是直连 OpenAI 官方 API
- 实际上是通过 AIHubMix 代理服务
- 支持的模型远不止 OpenAI
架构不一致
Client 层: AIHubMixClient
↓
Provider 层: OpenAIProvider ❌ 命名不匹配
解决方案
重命名为 AIHubMixProvider
# ✅ 准确的命名
class AIHubMixProvider(BaseAIProvider):
"""AIHubMix 提供商(通过 AIHubMix 代理服务调用多个 AI 厂商)"""
def __init__(self, model_name: str, config: Optional[Dict[str, Any]] = None):
# 使用 AIHubMixClient
self.client = AIHubMixClient(...)
架构一致性
Client 层: AIHubMixClient
↓
Provider 层: AIHubMixProvider ✅ 命名一致
实施内容
1. 重命名文件
server/app/services/ai_providers/openai_provider.py
↓
server/app/services/ai_providers/aihubmix_provider.py
2. 重命名类
# 旧代码
class OpenAIProvider(BaseAIProvider):
"""OpenAI 提供商(通过 AIHubMix 代理)"""
# 新代码
class AIHubMixProvider(BaseAIProvider):
"""AIHubMix 提供商(通过 AIHubMix 代理服务调用多个 AI 厂商)"""
3. 更新 Factory
文件: server/app/services/ai_providers/factory.py
# 旧代码
from app.services.ai_providers.openai_provider import OpenAIProvider
class AIProviderFactory:
OPENAI_MODELS = [...]
if model_name in AIProviderFactory.OPENAI_MODELS:
return OpenAIProvider(model_name, config)
# 新代码
from app.services.ai_providers.aihubmix_provider import AIHubMixProvider
class AIProviderFactory:
AIHUBMIX_MODELS = [...]
if model_name in AIProviderFactory.AIHUBMIX_MODELS:
return AIHubMixProvider(model_name, config)
4. 更新 init.py
文件: server/app/services/ai_providers/__init__.py
# 新增导出
from app.services.ai_providers.aihubmix_provider import AIHubMixProvider
from app.services.ai_providers.stability_provider import StabilityProvider
from app.services.ai_providers.runway_provider import RunwayProvider
__all__ = [
'BaseAIProvider',
'MockAIProvider',
'AIHubMixProvider',
'StabilityProvider',
'RunwayProvider',
'AIProviderFactory',
]
5. 重命名测试脚本
server/scripts/test_openai_provider.py
↓
server/scripts/test_aihubmix_provider.py
支持的模型
AIHubMixProvider 支持的模型
通过 AIHubMix 代理服务,支持以下厂商的模型:
OpenAI 模型
- 图片生成: dall-e-3, dall-e-2
- 文本处理: gpt-4, gpt-4-turbo, gpt-3.5-turbo
- 配音生成: tts-1, tts-1-hd
- 字幕生成: whisper-1
Stability AI 模型(通过代理)
- stable-diffusion-xl
- stable-diffusion-3-5-large
视频生成模型
- Veo 系列: veo-3.1-generate-preview, veo-3.0-generate-preview
- Sora 系列: sora-2, sora-2-pro
- Wan 系列: wan2.2-i2v-plus, wan2.2-t2v-plus, wan2.5-i2v-preview, wan2.5-t2v-preview
其他 Provider
- StabilityProvider: 直连 Stability AI 官方 API
- RunwayProvider: 直连 Runway 官方 API
优势
1. 命名准确
- ✅
AIHubMixProvider清晰表明是通过 AIHubMix 代理 - ✅ 与
AIHubMixClient命名一致 - ✅ 避免误导新开发者
2. 职责清晰
# 清晰的职责划分
AIHubMixProvider → 通过 AIHubMix 代理调用多个厂商
StabilityProvider → 直连 Stability AI 官方 API
RunwayProvider → 直连 Runway 官方 API
3. 架构一致
Client 层 Provider 层
───────────────────── ─────────────────────
AIHubMixClient → AIHubMixProvider
StabilityClient → StabilityProvider
RunwayClient → RunwayProvider
4. 易于理解
新开发者一看就知道:
AIHubMixProvider= 使用 AIHubMix 代理服务StabilityProvider= 直连 Stability AIRunwayProvider= 直连 Runway
影响范围
修改的文件
- ✅
server/app/services/ai_providers/openai_provider.py→aihubmix_provider.py - ✅
server/app/services/ai_providers/factory.py - ✅
server/app/services/ai_providers/__init__.py - ✅
server/scripts/test_openai_provider.py→test_aihubmix_provider.py
不受影响的文件
- ✅
server/app/services/ai_service.py(Service 层接口不变) - ✅
server/app/api/v1/ai.py(API 层接口不变) - ✅
server/app/tasks/ai_tasks.py(Celery 任务接口不变) - ✅
server/app/clients/aihubmix_client.py(Client 层不变)
文档更新
需要更新以下文档中的引用(可选):
docs/server/AI_SERVICE_FLOW_DIAGRAM.mddocs/server/changelogs/2026-01-30-openai-integration-final-summary.mddocs/server/changelogs/2026-01-30-openai-api-integration-summary.mddocs/server/changelogs/2026-01-30-openai-provider-integration.mddocs/server/rfcs/134-ai-service-implementation.md
测试
验证重命名
# 1. 检查语法
docker exec jointo-server-app python -m py_compile app/services/ai_providers/aihubmix_provider.py
# 2. 运行测试脚本
docker exec jointo-server-app python scripts/test_aihubmix_provider.py
# 3. 测试 Factory
docker exec jointo-server-app python -c "
from app.services.ai_providers.factory import AIProviderFactory
provider = AIProviderFactory.create_provider('dall-e-3')
print(f'Provider: {provider.__class__.__name__}')
"
预期结果
Provider: AIHubMixProvider
向后兼容
代码层面
- ✅ 完全兼容:Factory 接口不变,外部调用无需修改
- ✅ 透明升级:Service 层和 API 层无感知
配置层面
- ✅ 配置不变:仍然使用
OPENAI_API_KEY和OPENAI_BASE_URL - ℹ️ 说明:虽然 Provider 改名,但配置名称保持不变(因为 AIHubMix 兼容 OpenAI API)
后续优化
可选:配置名称优化
如果需要更准确的配置名称,可以考虑:
# 当前配置(保持不变)
OPENAI_API_KEY: str = ""
OPENAI_BASE_URL: str = "https://api.openai.com/v1"
# 可选:更准确的配置名称
AIHUBMIX_API_KEY: str = ""
AIHUBMIX_BASE_URL: str = "https://aihubmix.com/v1"
建议:暂时保持现有配置名称,避免破坏性变更。
总结
本次重命名解决了命名不准确和架构不一致的问题,使代码更易理解和维护。重命名对外部接口无影响,是一次安全的内部重构。
核心改进:
- ✅ 命名准确:
AIHubMixProvider清晰表明职责 - ✅ 架构一致:Client 和 Provider 命名对应
- ✅ 易于理解:新开发者一目了然
- ✅ 向后兼容:外部接口无变化