from pydantic_settings import BaseSettings from typing import Optional class Settings(BaseSettings): # LLM llm_api_key: str llm_base_url: str = "https://api.deepseek.com/v1" llm_model: str = "deepseek-chat" # 部分模型(如 kimi-k2.6)仅允许 temperature=1,统一从配置读取便于切换模型时调整 llm_temperature: float = 1.0 # Embedding embedding_api_key: Optional[str] = None embedding_base_url: Optional[str] = None embedding_model: str = "text-embedding-v3" # Java Backend java_base_url: str = "http://localhost:9082" java_context_url: Optional[str] = None # LangSmith langchain_tracing_v2: bool = False langchain_api_key: Optional[str] = None langchain_project: str = "cfc-langgraph" # Service service_host: str = "0.0.0.0" service_port: int = 9000 log_level: str = "info" # Dify Fallback dify_base_url: Optional[str] = None dify_tongue_api_key: Optional[str] = None # Chroma chroma_db_path: str = "./data/chroma_db" model_config = {"env_file": ".env", "env_file_encoding": "utf-8"} @property def effective_embedding_api_key(self) -> str: return self.embedding_api_key or self.llm_api_key @property def effective_embedding_base_url(self) -> str: return self.embedding_base_url or self.llm_base_url @property def effective_java_context_url(self) -> str: return self.java_context_url or f"{self.java_base_url}/api/ai/context" settings = Settings()