"""LLM 模型枚举与实例获取 Usage: from app.ai.models import LLM llm = LLM.DOUBAO_PRO_256K.create(temperature=0) llm = LLM.DEEPSEEK_V3.create() """ from enum import Enum from langchain_openai import ChatOpenAI from app.config import settings # 供应商连接配置 _VOLCENGINE = (lambda: settings.volcengine_api_key, lambda: settings.volcengine_base_url) _CARDIAC = (lambda: settings.cardiacBrder_api_key, lambda: settings.cardiacBrder_base_url) class LLM(Enum): """所有可用模型,每个枚举值 = (模型名, api_key函数, base_url函数)""" # 火山引擎 DOUBAO_PRO_256K = ("doubao-pro-256k", *_VOLCENGINE) DOUBAO_PRO_32K = ("doubao-pro-32k", *_VOLCENGINE) DOUBAO_LITE_128K = ("doubao-lite-128k", *_VOLCENGINE) DEEPSEEK_V3 = ("deepseek-v3-250324", *_VOLCENGINE) DEEPSEEK_R1 = ("deepseek-r1-250528", *_VOLCENGINE) DOUBAO_SEED_LIST = ("doubao-seed-2-0-lite-260215", *_VOLCENGINE) DOUBAO_SEED_PRO = ("doubao-seed-2-0-pro-260215", *_VOLCENGINE) # 心缘 GPT_4O = ("gpt-4o", *_CARDIAC) GPT_4O_MINI = ("gpt-4o-mini", *_CARDIAC) CLAUDE_SONNET_4 = ("claude-sonnet-4-20250514", *_CARDIAC) def __init__(self, model_name: str, api_key_fn, base_url_fn): self.model_name = model_name self._api_key_fn = api_key_fn self._base_url_fn = base_url_fn def create(self, **kwargs) -> ChatOpenAI: """创建 LLM 实例,kwargs 透传给 ChatOpenAI(temperature, max_tokens 等)""" return ChatOpenAI( model=self.model_name, api_key=self._api_key_fn(), base_url=self._base_url_fn(), **kwargs, )