# qa_core/config/settings.py (关键字段)
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file=".env", case_sensitive=False)
# ── 场景 ──
active_scenario_id: str = Field(default="enterprise_knowledge", ...)
scenario_config_dir: str = Field(default="scenarios", ...)
# ── Milvus ──
milvus_uri: str = Field(default="http://localhost:19530", ...)
milvus_database: str = Field(default="", ...)
# ── MySQL ──
mysql_host: str = Field(default="localhost", ...)
mysql_database: str = Field(default="qa_system", ...)
# ── LLM (DashScope / OpenAI 兼容) ──
llm_api_key: str = Field(default="", validation_alias="DASHSCOPE_API_KEY")
llm_base_url: str = Field(default="https://dashscope.aliyuncs.com/compatible-mode/v1", ...)
llm_model: str = Field(default="qwen-plus", ...)
llm_temperature: float = Field(default=0.1, ge=0.0, le=1.0)
llm_timeout: int = Field(default=60, ge=1)
# ── 检索参数(所有默认值可用于 .env 覆盖)──
faq_top_k: int = Field(default=20, ge=1)
doc_top_k: int = Field(default=20, ge=1)
faq_direct_score_threshold: float = Field(default=0.72, ge=0.0, le=1.0)
max_context_chars: int = Field(default=6000, ge=1)
max_context_doc_chars: int = Field(default=1600, ge=1)
short_query_max_chars: int = Field(default=20, ge=1)
# ── 历史摘要 ──
history_summary_enabled: bool = Field(default=True)
history_summary_after_messages: int = Field(default=14, ge=1)
@lru_cache(maxsize=1)
def get_settings() -> Settings:
"""进程级 Settings 单例。lru_cache 避免重复读取运行时配置。"""
return Settings()