3.1 KiB
3.1 KiB
Provider Routing 技术说明
本说明用于支撑求职版 DreamWeaver 的 Provider 分层表达。当前目标不是做复杂平台化,而是把 AI 能力供应链讲清楚、跑稳定、便于后续演进。
核心概念
| 概念 | 含义 | 当前代码位置 |
|---|---|---|
| Capability | 产品需要的 AI 能力类型,例如文本、图片、语音、绘本结构 | backend/app/services/provider_policy.py |
| Provider | 某个能力下的可调用供应商配置,例如 Gemini、OpenAI、CQTAI、MiniMax | providers 表与 provider_cache.py |
| Adapter | 供应商调用实现,负责把统一入参翻译成具体 API 调用 | backend/app/services/adapters/ |
| Routing Policy | 调用前如何排序与选择 Provider,例如优先级、成本、延迟、轮询 | provider_policy.py + provider_router.py |
| Failover | 当前 Provider 调用失败后自动尝试下一 Provider | provider_router.py |
当前 Capability
| Capability | 用途 | 默认 Provider | Demo Provider |
|---|---|---|---|
text |
生成/润色儿童故事文本 | gemini, openai |
demo |
image |
生成封面和绘本插图 | cqtai |
demo |
tts |
故事语音合成 | minimax, elevenlabs, edge_tts |
无 |
storybook |
生成多页绘本结构和插图提示词 | storybook_primary |
demo |
ENABLE_DEMO_PROVIDERS=true 时,只会给具备 demo adapter 的能力前置 demo provider。TTS 暂无 demo adapter,因此不会插入不存在的 tts:demo。
代码边界
provider_policy.py 负责定义“产品级策略”:
- Capability 清单
- 默认 Provider 顺序
.env中对应的 provider 列表字段- 默认 routing strategy
- API key ref 到 settings 字段的映射
- 哪些能力支持本地 demo provider
provider_router.py 负责执行“运行时路由”:
- 从 DB cache 或
.env读取 Provider 配置 - 构建
AdapterConfig - 按 Routing Policy 排序
- 熔断过滤
- 调用 adapter
- 记录 metrics、health、cost
- failover 并聚合错误
adapters/ 负责具体供应商 API:
- 不决定业务工作流
- 不读取用户故事上下文
- 不负责 Provider 排序或熔断
演进原则
- 新增 AI 能力时,先在
provider_policy.py增加 Capability,再注册 adapter。 - 新增供应商时,先实现 adapter,再把默认顺序或 DB 配置接入对应 Capability。
- 路由策略只影响调用顺序,不应该改变故事/绘本/音频的产品工作流。
- 本轮求职版不做多租户供应商市场,也不做复杂负载均衡;优先保证能力分层清楚、失败可恢复、演示稳定。
- 后台
config_ref可以使用 adapter 别名,也可以直接使用 settings 字段名,例如text_api_key、antigravity_api_key。
面试表达口径
DreamWeaver 的 Provider 体系不是把供应商暴露给用户,而是把多模型能力整理成稳定的产品能力。用户看到的是“生成故事、生成封面、播放语音”,系统内部才把它映射到 text、image、tts、storybook 这些 Capability,再通过 Routing Policy 选择具体 Provider 和 Adapter。