Files
2026-06-12 16:04:03 +08:00

67 lines
1.9 KiB
Python

"""配置管理 - 环境变量 + 默认值"""
import os
from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
"""应用配置"""
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
# RSSKeeper 连接
RSSKEEPER_BASE_URL: str = "http://localhost:7329"
# LLM API(兼容 OpenAI 格式)
OPENAI_API_KEY: str = ""
OPENAI_BASE_URL: str = "https://api.openai.com/v1"
OPENAI_MODEL: str = "gpt-4o-mini"
OPENAI_TIMEOUT: int = 60
OPENAI_MAX_RETRIES: int = 3
# dataClean 数据目录
DATA_DIR: Path = Path("/app/data")
DATABASE_URL: str = "/app/data/dataclean.db"
# 简报输出目录
BRIEF_OUTPUT_DIR: Path = Path("/app/data/briefs")
# 调度时间(分钟)
SUMMARIZE_INTERVAL_MINUTES: int = 60
TAG_SCORE_INTERVAL_MINUTES: int = 1440
DAILY_BRIEF_HOUR: int = 8
DAILY_BRIEF_MINUTE: int = 0
# 去重阈值
TITLE_SIMILARITY_THRESHOLD: float = 0.85
CONTENT_SIMILARITY_THRESHOLD: float = 0.80
# 摘要长度
MAX_AI_SUMMARY_LENGTH: int = 300
MIN_ORIGINAL_SUMMARY_LENGTH: int = 100
# 每篇简报每个分类显示文章数
BRIEF_TOP_N_PER_CATEGORY: int = 10
# 日志级别
LOG_LEVEL: str = "INFO"
# Web UI / API 安全
# 为空时不启用 API Token 鉴权(仅建议在内网使用);生产环境请设置强密码
API_TOKEN: str = ""
# CORS 允许来源,逗号分隔;生产环境请填写具体域名,如 "https://dataclean.example.com"
CORS_ALLOWED_ORIGINS: str = ""
@property
def database_path(self) -> str:
"""返回 SQLite 数据库路径"""
return str(Path(self.DATABASE_URL))
@property
def brief_output_dir_path(self) -> Path:
"""返回简报输出目录"""
return self.BRIEF_OUTPUT_DIR
settings = Settings()