xxy 43f3e0b746 Initial commit
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 18:41:06 +08:00

93 lines
4.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
config.py
报告模板管理模块的全局配置。可通过 .env 或环境变量覆盖。
"""
from __future__ import annotations
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
# 应用基本信息
APP_TITLE: str = "报告模板管理模块 API"
APP_VERSION: str = "0.1.0"
APP_DESCRIPTION: str = "上传文档 → 远程解析为 Markdown → 拆解目录/章节 → 入库远程 MySQL"
# 服务监听
HOST: str = "0.0.0.0"
PORT: int = 8100
RELOAD: bool = False
CORS_ORIGINS: list[str] = ["*"]
# 日志
LOG_LEVEL: str = "INFO" # DEBUG / INFO / WARNING / ERROR
LOG_DIR: str = "logs" # 日志目录(相对启动目录或绝对路径)
LOG_TO_CONSOLE: bool = True # 是否同时输出到控制台
LOG_MAX_BYTES: int = 10 * 1024 * 1024 # 单文件最大字节数(轮转)
LOG_BACKUP_COUNT: int = 7 # 轮转保留份数
LOG_HTTP_ACCESS: bool = True # 是否记录每个 HTTP 请求
# 远程 MySQLmysql+pymysql://用户:密码@主机:端口/库名?charset=utf8mb4
DATABASE_URL: str = (
"mysql+pymysql://root:Beidas0ft@192.168.4.177:3306/eval_report?charset=utf8mb4"
)
DB_POOL_SIZE: int = 10
DB_MAX_OVERFLOW: int = 20
DB_POOL_TIMEOUT: int = 60
DB_POOL_PRE_PING: bool = True
# 启动时自动建表(仅创建本模块用到的表,已存在则跳过)
DB_AUTO_CREATE_TABLES: bool = True
# 远程文档解析服务:上传文件 → Markdown
FILE_PARSE_API_URL: str = "http://192.168.4.194:8000/convert"
FILE_PARSE_FIELD_NAME: str = "file"
# 解析引擎(随 multipart 一起提交的表单字段 engine
FILE_PARSE_ENGINE: str = "auto"
FILE_PARSE_HTTP_TIMEOUT_SEC: int = 600
FILE_PARSE_RETRY_COUNT: int = 3
FILE_PARSE_RETRY_BACKOFF_SEC: float = 15.0
# 章节正文:是否包含其下级小节内容(章/节聚合整棵子树正文,避免父章节正文为空)
SECTION_CONTENT_INCLUDE_SUBSECTIONS: bool = True
# 单章节正文入库字节上限MySQL TEXT 列上限 65535 字节,留余量防止截断到半个字符)
SECTION_CONTENT_MAX_BYTES: int = 60000
# 章节内容脱敏:入库前过滤精确数据(数字/金额/日期/百分比等)
DESENSITIZE_ENABLED: bool = True
DESENSITIZE_PLACEHOLDER: str = "X" # 数字脱敏后的占位符
# 是否把表格中的数字也脱敏(表格通常是精确数据,默认开启)
DESENSITIZE_MASK_TABLE_NUMBERS: bool = True
# LLM可选为每个目录生成"声明"。未配置时使用确定性兜底模板。
LLM_API_BASE: str = ""
LLM_API_KEY: str = ""
LLM_MODEL_NAME: str = ""
LLM_HTTP_TIMEOUT_SEC: int = 120
# 关闭思考模型的思维链输出vLLM/Qwen3 等chat_template_kwargs.enable_thinking=false
# 既避免"思考过程"混入正文,又减少 token、降低截断与耗时。
LLM_DISABLE_THINKING: bool = True
# 是否调用 LLM 生成章节声明(关闭则始终使用兜底模板)
DECLARATION_USE_LLM: bool = True
# 上传模版时:用 LLM 匹配默认提示词 / 为无匹配章节生成提示词(复刻 eval_report
TEMPLATE_UPLOAD_LLM_PROMPT_MAPPING: bool = True
# LLM 提示词匹配并发:把未匹配章节分批并行调用,缩短整体耗时。
# 多卡 A100 + 连续批处理vLLM/TGITP 或多副本)下,提高并发在飞请求数即可打满 GPU
# - 调小 BATCH_SIZE请求更多更短确保批次数 ≥ 线程数,单请求尾延迟更低
# - 调大 MAX_WORKERS同时在飞的序列更多填满推理服务的批decode 吞吐接近峰值
# - 调小 MAX_TOKENS每序列 KV 缓存预留更少,调度器可纳入更多并发序列
# 2×A100并发目标约 16较单卡的 8 翻倍BATCH_SIZE=2 保证常见规模也能跑满 16 路。
TEMPLATE_UPLOAD_LLM_BATCH_SIZE: int = 2 # 每批未匹配章节数量
TEMPLATE_UPLOAD_LLM_MAX_WORKERS: int = 16 # 并行线程数上限(在飞请求数)
TEMPLATE_UPLOAD_LLM_MAX_TOKENS: int = 2048 # 单批最大输出 token
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
extra="ignore",
)
settings = Settings()