""" 配置管理 - 集中管理所有配置项 """ from pydantic_settings import BaseSettings from pydantic import Field from typing import Optional from pathlib import Path class Settings(BaseSettings): """应用配置 - 所有配置项通过环境变量或 .env 文件设置""" # ==================== WebSocket 服务器 ==================== WS_HOST: str = "0.0.0.0" WS_PORT: int = 8765 WS_PATH: str = "/v1/voice/session" # ==================== 鉴权 ==================== BEARER_TOKEN: str = "drone-voice-cloud-token-2024" # ==================== 阿里云百炼 LLM ==================== DASHSCOPE_API_KEY: str = "sk-8ac47bb8a1f7497a922c52d905dd11dc" # 与 LLM 共用 API Key;实时语音识别 Fun-ASR 走 WebSocket inference DASHSCOPE_WEBSOCKET_URL: str = ( "wss://dashscope.aliyuncs.com/api-ws/v1/inference" ) DASHSCOPE_ASR_MODEL: str = "fun-asr-realtime" ASR_AUDIO_SAMPLE_RATE: int = 16000 ASR_SEMANTIC_PUNCTUATION_ENABLED: bool = True LLM_PROVIDER: str = "dashscope" # 服务提供者: dashscope | local (后续扩展) LLM_MODEL: str = "qwen-plus" # qwen-turbo | qwen-plus | qwen-max LLM_MAX_TOKENS: int = 512 LLM_TEMPERATURE: float = 0.3 LLM_TIMEOUT: int = 30 # 秒 LLM_CONTEXT_TURNS: int = 4 # 保留的历史对话轮数 # Function calling:天气 / 联网摘要等(DashScope tools + 本地执行) LLM_TOOLS_ENABLED: bool = True LLM_AGENT_MAX_STEPS: int = 8 # 每用户轮最多模型↔工具往返次数(含最终回答) LLM_TOOL_RESULT_MAX_CHARS: int = 8000 # 单次 tool 消息写入上下文上限 # ==================== TTS 配置 ==================== TTS_PROVIDER: str = "piper" # piper | azure | local (后续扩展) TTS_MODEL_DIR: str = "models" # Piper 模型目录 TTS_VOICE_NAME: str = "zh_CN-huayan-medium" # Piper 语音名称 TTS_SAMPLE_RATE: int = 24000 # 协议规定 24kHz TTS_MAX_CHARS: int = 800 # TTS 最大字符数(超长截断) # 闲聊流式 TTS:更早切出首段,降低首字节延迟(见 intent_service.take_next_speech_segment) TTS_STREAM_SOFT_FLUSH_LEN: int = 28 TTS_STREAM_EARLY_WEAK_CUT: bool = True TTS_STREAM_EARLY_WEAK_MIN_SEGMENT: int = 6 TTS_STREAM_EARLY_WEAK_SCAN_CAP: int = 48 # ==================== 超时配置 (毫秒) ==================== DIALOG_RESULT_TIMEOUT_MS: int = 30000 # LLM 推理超时 TTS_FIRST_BYTE_TIMEOUT_MS: int = 10000 # TTS 首字节超时 # ==================== 飞控二次确认(dialog_result v1 之 confirm)==================== FLIGHT_CONFIRM_REQUIRED: bool = True FLIGHT_CONFIRM_TIMEOUT_SEC: float = 10.0 # ==================== 限流 ==================== MAX_CONCURRENT_SESSIONS: int = 4 # 最大并发 session 数 # ==================== 日志 ==================== LOG_LEVEL: str = "INFO" LOG_TO_FILE: bool = False LOG_FILE: str = "logs/server.log" class Config: env_file = ".env" env_file_encoding = "utf-8" case_sensitive = True # 全局配置实例 settings = Settings()