多供应商 LLM 抽象
Multi-Provider LLM Abstraction
统一多个 LLM 供应商的接口差异,实现供应商无关的模型调用
子问题
1.供应商参数差异归一化
2.模型验证与兼容性
3.推理模型特殊处理
4.响应格式统一
5.Gemini 版本间 thinking 参数名不兼容(thinking_level vs thinking_budget)
6.OpenAI 兼容协议供应商的 base_url 和 API key 来源差异
7.双层 LLM 策略下的供应商特定参数透传
各项目的解法1 solutions
Signals
横向对比
| 维度 | TradingAgents |
|---|---|
| 抽象层级 | ABC 基类 + 工厂函数,2 个抽象方法最小接口 |
| 供应商数量 | 6 供应商:OpenAI/Anthropic/Google/xAI/OpenRouter/Ollama |
| 参数归一化 | 子类继承覆写构造函数,推理模型自动剥离 temperature/top_p |
| 响应归一化 | Google 子类重写 invoke(),list[dict] → str |
| 模型验证 | 白名单 + 开放混合策略,主流严格校验 + 自托管放行 |
| 协议复用 | xAI/Ollama/OpenRouter 共用 OpenAIClient,仅改 base_url |
最佳实践
1.使用抽象基类定义统一接口
2.工厂模式按 provider 分发创建
3.通过子类继承 SDK 类覆写构造函数实现参数剥离,而非在工厂层过滤
4.OpenAI 兼容供应商共用同一客户端类,用 provider 字段区分 base_url 路由
5.白名单校验主流供应商 + 开放通过自托管/路由器供应商的混合验证策略