""" 配置管理模块 """ import os from pathlib import Path from pydantic_settings import BaseSettings from dotenv import load_dotenv # 加载环境变量 load_dotenv() class Settings(BaseSettings): """应用配置""" # 应用基础配置 APP_NAME: str = "Tolan Voice Assistant" APP_VERSION: str = "1.0.0" DEBUG: bool = False # 服务器配置 HOST: str = "0.0.0.0" PORT: int = 8000 host: str = "0.0.0.0" # 别名,兼容小写 port: int = 8000 # 别名,兼容小写 # WebSocket配置 WS_HEARTBEAT_INTERVAL: int = 30 # 心跳间隔(秒) WS_TIMEOUT: int = 60 # 超时时间(秒) # DashScope API配置(阿里云) dashscope_api_key: str = os.getenv("DASHSCOPE_API_KEY", "") # LLM配置 llm_model: str = os.getenv("LLM_MODEL", "qwen-flash") # TTS配置 tts_model: str = os.getenv("TTS_MODEL", "qwen3-tts-flash") tts_voice: str = os.getenv("TTS_VOICE", "Cherry") # 女声(支持:Cherry, Stella) tts_speech_rate: float = float(os.getenv("TTS_SPEECH_RATE", "1.0")) # 语速:1.0 = 正常速度 # 豆包API超时配置 DOUBAO_RECV_TIMEOUT: int = 15 # 接收消息超时(秒) DOUBAO_CONNECT_TIMEOUT: int = 10 # 连接超时(秒) DOUBAO_RESPONSE_TIMEOUT: int = 20 # 响应超时(秒) # 豆包API配置 DOUBAO_API_KEY: str = os.getenv("DOUBAO_API_KEY", "") DOUBAO_APP_ID: str = os.getenv("DOUBAO_APP_ID", "") DOUBAO_API_URL: str = os.getenv("DOUBAO_API_URL", "wss://openspeech.bytedance.com/api/v3/realtime/dialogue") DOUBAO_OUTPUT_FORMAT: str = os.getenv("DOUBAO_OUTPUT_FORMAT", "ogg_opus") # ogg_opus 或 pcm # AI助手提示词配置 LEARNER_PROFICIENCY: str = os.getenv("LEARNER_PROFICIENCY", "A1-A2") AGE_TAG: str = os.getenv("AGE_TAG", "Adult") TOPIC_TAG: str = os.getenv("TOPIC_TAG", "Daily Conversation") EXPERIMENT_TAG: str = os.getenv("EXPERIMENT_TAG", "control") # control 或 experiment # 音频配置 AUDIO_SAMPLE_RATE: int = 16000 AUDIO_BIT_RATE: int = 16 AUDIO_CHANNELS: int = 1 # CORS配置 # 支持localhost和任意IP地址访问 CORS_ORIGINS: list = [ "http://localhost:5173", "https://localhost:5173", "http://127.0.0.1:5173", "https://127.0.0.1:5173", # 支持局域网IP访问 "http://192.168.2.112:5173", "https://192.168.2.112:5173", # 如有其他IP,继续添加 # "https://192.168.2.105:5173", ] # 是否允许所有来源(开发环境可设为True,生产环境务必设为False) CORS_ALLOW_ALL: bool = os.getenv("CORS_ALLOW_ALL", "true").lower() == "true" # 日志配置 LOG_LEVEL: str = "INFO" LOG_DIR: str = "logs" LOG_ROTATION: str = "500 MB" LOG_RETENTION: str = "10 days" # SSL配置(可选,生产环境建议由nginx统一管理SSL) SSL_KEYFILE: str = os.getenv("SSL_KEYFILE", "") SSL_CERTFILE: str = os.getenv("SSL_CERTFILE", "") class Config: env_file = ".env" case_sensitive = True extra = "ignore" # 忽略额外的环境变量(如旧的连接池配置) # 创建全局配置实例 settings = Settings() # 确保日志目录存在 Path(settings.LOG_DIR).mkdir(parents=True, exist_ok=True)