"""LLM 模型枚举与实例获取 Usage: from app.ai.models import LLM llm = LLM.DOUBAO_SEED_LITE.create(temperature=0) llm = LLM.CLAUDE_OPUS.create(temperature=0) """ from enum import Enum from langchain_anthropic import ChatAnthropic from langchain_core.language_models import BaseChatModel from langchain_openai import ChatOpenAI from app.config import settings # 供应商连接配置 = (api_key函数, base_url函数) _VOLCENGINE = (lambda: settings.volcengine_api_key, lambda: settings.volcengine_base_url) _ANTHROPIC = (lambda: settings.anthropic_api_key, lambda: settings.anthropic_base_url) class LLM(Enum): """所有可用模型,每个枚举值 = (模型名, 封装类, api_key函数, base_url函数)""" # 火山引擎(OpenAI 兼容) DOUBAO_PRO_32K = ("doubao-1-5-pro-32k-250115", ChatOpenAI, *_VOLCENGINE) DOUBAO_LITE_32K = ("doubao-1-5-lite-32k-250115", ChatOpenAI, *_VOLCENGINE) DOUBAO_SEED_LITE = ("doubao-seed-2-0-lite-260215", ChatOpenAI, *_VOLCENGINE) DOUBAO_SEED_PRO = ("doubao-seed-2-0-pro-260215", ChatOpenAI, *_VOLCENGINE) DEEPSEEK_V4_FLASH = ("deepseek-v4-flash-260425", ChatOpenAI, *_VOLCENGINE) # Claude(Anthropic 风格) CLAUDE_OPUS = ("claude-opus-4-6", ChatAnthropic, *_ANTHROPIC) def __init__(self, model_name: str, cls, api_key_fn, base_url_fn): self.model_name = model_name self._cls = cls self._api_key_fn = api_key_fn self._base_url_fn = base_url_fn def create(self, **kwargs) -> BaseChatModel: """创建 LLM 实例,kwargs 透传给底层封装(temperature, max_tokens 等) 封装类(ChatOpenAI / ChatAnthropic)均实现 langchain BaseChatModel 接口, 对上层调用方完全透明。 """ return self._cls( model=self.model_name, api_key=self._api_key_fn(), base_url=self._base_url_fn(), **kwargs, )