问题域/PD-220

多 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 放行避免维护负担