多 LLM Provider 抽象
Multi-LLM Provider Abstraction
统一多个 LLM 提供商的接口差异,实现 provider 无关的模型调用
子问题
1.Provider 参数差异处理
2.模型名称验证
3.推理模型特殊参数
4.响应格式归一化
5.OpenAI 兼容 provider 的 base_url/api_key 差异统一
6.Gemini 跨代模型 thinking 参数语义不同(level vs budget)
7.双层 LLM 实例共享 provider 配置但使用不同模型
各项目的解法1 solutions
Signals
横向对比
| 维度 | TradingAgents |
|---|---|
| Provider 抽象 | BaseLLMClient ABC + Factory 函数,3 个 Client 类覆盖 6 个 provider |
| 参数归一化 | 继承包装模式:UnifiedChatOpenAI 剥离 reasoning 参数,NormalizedChatGoogleGenerativeAI 归一化 list→string |
| 模型验证 | VALID_MODELS 白名单字典,Ollama/OpenRouter 放行,四大 provider 严格校验 |
| 推理参数 | 双通道:OpenAI reasoning_effort 透传 + Google thinking_level→thinking_budget 自动映射 |
| 多模型策略 | 双层 LLM:deep_thinking_llm(重模型)+ quick_thinking_llm(轻模型)共享 provider |
| Provider 合并 | OpenAI/xAI/Ollama/OpenRouter 四合一 OpenAIClient,按 provider 字段切换 base_url |
最佳实践
1.用抽象基类定义统一接口
2.每个 provider 独立处理特有参数
3.reasoning model 自动剥离不兼容参数
4.OpenAI 兼容的多个 provider 合并为一个 Client 类通过 provider 字段区分
5.继承 LangChain 原生类做包装而非 Adapter 模式减少抽象层
6.白名单验证对聚合/本地 provider 放行避免维护负担