"""应用配置""" import warnings from pydantic_settings import BaseSettings from functools import lru_cache class Settings(BaseSettings): """应用设置""" # 应用 APP_NAME: str = "秒思智能审核平台" APP_VERSION: str = "1.0.0" DEBUG: bool = False # 数据库 DATABASE_URL: str = "postgresql+asyncpg://postgres:postgres@localhost:5432/miaosi" # Redis REDIS_URL: str = "redis://localhost:6379/0" # JWT SECRET_KEY: str = "your-secret-key-change-in-production" ALGORITHM: str = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES: int = 30 # AI 服务(使用 OneAPI/OneInAll 等中转服务商,不直连厂商) # 中转服务商统一了不同 AI 厂商的接口,只需配置中转商的 API AI_PROVIDER: str = "oneapi" # oneapi | oneinall | openrouter 等中转服务商 AI_API_KEY: str = "" # 中转服务商的 API Key AI_API_BASE_URL: str = "" # 中转服务商的 Base URL,如 https://api.oneinall.ai/v1 # 阿里云 OSS 配置 OSS_ACCESS_KEY_ID: str = "" OSS_ACCESS_KEY_SECRET: str = "" OSS_ENDPOINT: str = "oss-cn-hangzhou.aliyuncs.com" OSS_BUCKET_NAME: str = "miaosi-files" OSS_BUCKET_DOMAIN: str = "" # 公开访问域名,如 https://miaosi-files.oss-cn-hangzhou.aliyuncs.com # 加密密钥 ENCRYPTION_KEY: str = "" # 文件上传限制 MAX_FILE_SIZE_MB: int = 500 # 最大文件大小 500MB def __init__(self, **kwargs): super().__init__(**kwargs) if self.SECRET_KEY == "your-secret-key-change-in-production": warnings.warn( "SECRET_KEY 使用默认值,请在 .env 中设置安全的密钥!", UserWarning, stacklevel=2, ) if not self.ENCRYPTION_KEY: warnings.warn( "ENCRYPTION_KEY 未设置,API 密钥将无法安全存储!", UserWarning, stacklevel=2, ) class Config: env_file = ".env" case_sensitive = True @lru_cache() def get_settings() -> Settings: """获取配置单例""" return Settings() settings = get_settings()