问题域/PD-15

LLM Provider 抽象层

LLM Provider Abstraction Layer

Agent 系统需要支持多个 LLM 提供商(OpenAI/Anthropic/本地模型),且需要在运行时检测模型能力、统一错误处理。该域解决如何设计 provider 抽象层,使上层 Agent 代码与具体 LLM 实现解耦。

子问题

1.Provider 注册与工厂模式

2.模型能力检测(function calling、vision 等)

3.统一错误映射与异常处理

4.Cloud vs Local provider 分离

5.Embedding provider 多 adapter 支持

6.Thinking tags 清理(推理模型 <think> 标签过滤)

7.URL 自动检测与 /v1 后缀补全

8.Provider Presets 前端展示配置

9.Token 参数兼容(max_tokens vs max_completion_tokens)

各项目的解法1 solutions

Signals

横向对比

维度DeepTutor
注册机制装饰器 @register_provider 自动注册到全局字典
能力检测静态配置表 PROVIDER_CAPABILITIES × MODEL_OVERRIDES,4 级 fallback
错误映射MappingRule 规则链 + status_code 快速路径,SDK 可选加载
Cloud/Local 分离URL 黑白名单自动路由,CLOUD_DOMAINS + LOCAL_HOSTS + LOCAL_PORTS
重试策略双层重试:BaseLLMProvider 内置 + Factory tenacity,circuit breaker 前置
Embedding 抽象独立 Adapter 模式,EmbeddingProviderManager 静态映射 6 种 binding
流量控制每 provider 独立 TrafficController + 全局 ErrorRateTracker 滑动窗口

最佳实践

1.使用 registry + factory 模式管理 provider 生命周期

2.实现 capabilities 检测层,让 Agent 根据模型能力动态调整行为

3.用 MODEL_OVERRIDES 处理模型级特例(如 forced_temperature),避免 provider 级配置膨胀

4.Error mapping 采用 SDK 可选加载(try import),未安装的 SDK 规则自动跳过

5.Stream 重试需手动循环实现,tenacity 不支持 AsyncGenerator 装饰