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 装饰