| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from __future__ import annotations
- """项目配置中心:从环境变量或.env读取API密钥、模型参数等敏感配置,通过pydantic-settings统一管理。"""
- from functools import lru_cache
- from pathlib import Path
- from pydantic_settings import BaseSettings,SettingsConfigDict
- # 项目根目录(app 的上级),用于定位 .env,避免受运行时工作目录(CWD)影响
- BASE_DIR = Path(__file__).resolve().parent.parent
- class Settings(BaseSettings):
- """
- 项目配置:
- 所有敏感信息从环境变量或.env文件中读取,
- 不允许直接写死在业务代码中。
- """
- serpapi_api_key:str = ""
- amap_api_key:str = ""
- openai_api_key:str = ""
- base_url:str = ""
- model:str = ""
- request_timeout_seconds:float = 120.0
- model_config = SettingsConfigDict(
- env_file = BASE_DIR / ".env",
- env_file_encoding = "utf-8",
- case_sensitive = False,
- extra = "ignore",
- )
- def require(self, field_name:str)->str:
- """读取必填配置,缺失时给出明确错误。"""
- value = getattr(self,field_name,None)
- if not isinstance(value,str) or not value.strip():
- env_name = field_name.upper()
- raise RuntimeError(
- f"缺少配置{env_name},请检查项目根目录下的.env文件"
- )
-
- return value.strip()
-
- @lru_cache
- def get_settings()->Settings:
- """缓存配置对象,避免反复读取.env。"""
- return Settings()
|