""" llm/provider_factory.py Provider 工厂:根据 settings.llm.provider 自动实例化对应 Provider """ from config.settings import LLMConfig, settings from llm.providers.base_provider import BaseProvider from utils.logger import get_logger _logger = get_logger("LLM") def create_provider(cfg: LLMConfig | None = None) -> BaseProvider: """ 工厂函数:根据配置创建对应的 LLM Provider Args: cfg: LLMConfig 实例,None 时从全局 settings 读取 Returns: BaseProvider 子类实例 支持的 provider: - "openai" → OpenAIProvider(含兼容 OpenAI 协议的代理) - "anthropic" → AnthropicProvider(预留) - "ollama" → OllamaProvider(预留) Raises: ValueError: provider 名称不支持时 """ cfg = cfg or settings.llm _logger.info(f"🏭 Provider 工厂: 创建 [{cfg.provider}] Provider") match cfg.provider.lower(): case "openai": from llm.providers.openai_provider import OpenAIProvider return OpenAIProvider(cfg) case "anthropic": # 预留:Anthropic Provider # from llm.providers.anthropic_provider import AnthropicProvider # return AnthropicProvider(cfg) _logger.warning("⚠️ Anthropic Provider 尚未实现,回退到 OpenAI") from llm.providers.openai_provider import OpenAIProvider return OpenAIProvider(cfg) case "ollama": # 预留:Ollama 本地模型 Provider # from llm.providers.ollama_provider import OllamaProvider # return OllamaProvider(cfg) _logger.warning("⚠️ Ollama Provider 尚未实现,回退到 OpenAI") from llm.providers.openai_provider import OpenAIProvider return OpenAIProvider(cfg) case _: raise ValueError( f"不支持的 provider: '{cfg.provider}'," f"可选值: openai / anthropic / ollama" )