feat: 四层架构全面增强
安全与稳定性: - 移除硬编码 API Key,改用 .env + 环境变量 - LLM 调用统一重试机制(指数退避,3 次重试,处理 429/5xx/超时) - 中文字体检测增强(CJK 关键词兜底 + 无字体时英文 fallback) - 缺失 API Key 给出友好提示而非崩溃 分析能力提升: - 异常检测新增 z-score 检测(标准差>2 标记异常) - 新增变异系数 CV 检测(数据波动性) - 新增零值/缺失检测 - 上下文管理器升级为关键词语义匹配(替代简单取最近 2 条) 用户体验: - 报告自动保存为 Markdown(reports/ 目录) - 新增 export 命令导出查询结果为 CSV - 新增 reports 命令查看已保存报告 - CLI 支持 readline 命令历史(方向键翻阅) - CSV 导入工具重写:自动列名映射、容错处理、dry-run 模式 - 新增 .env.example 配置模板
This commit is contained in:
@@ -1,13 +1,38 @@
|
||||
"""
|
||||
配置文件
|
||||
配置文件 —— 支持环境变量 + .env 文件
|
||||
"""
|
||||
import os
|
||||
|
||||
|
||||
def _load_dotenv(path: str = ".env"):
|
||||
"""简易 .env 加载器,不依赖 python-dotenv"""
|
||||
if not os.path.isfile(path):
|
||||
return
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if not line or line.startswith("#"):
|
||||
continue
|
||||
if "=" not in line:
|
||||
continue
|
||||
key, _, val = line.partition("=")
|
||||
key, val = key.strip(), val.strip().strip('"').strip("'")
|
||||
if key and key not in os.environ: # 环境变量优先
|
||||
os.environ[key] = val
|
||||
|
||||
|
||||
# 项目根目录(先定义,.env 加载需要用到)
|
||||
PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__))
|
||||
|
||||
# 加载 .env(项目根目录优先,其次当前目录)
|
||||
_load_dotenv(os.path.join(PROJECT_ROOT, ".env"))
|
||||
_load_dotenv(".env")
|
||||
|
||||
# LLM 配置(兼容 OpenAI API 格式,包括 Ollama / vLLM / DeepSeek 等)
|
||||
LLM_CONFIG = {
|
||||
"api_key": os.getenv("LLM_API_KEY", "sk-c44i1hy64xgzwox6x08o4zug93frq6rgn84oqugf2pje1tg4"),
|
||||
"base_url": os.getenv("LLM_BASE_URL", "https://api.xiaomimimo.com/v1"),
|
||||
"model": os.getenv("LLM_MODEL", "mimo-v2-flash"),
|
||||
"api_key": os.getenv("LLM_API_KEY", ""),
|
||||
"base_url": os.getenv("LLM_BASE_URL", "https://api.openai.com/v1"),
|
||||
"model": os.getenv("LLM_MODEL", "gpt-4o-mini"),
|
||||
}
|
||||
|
||||
# 沙箱安全规则
|
||||
|
||||
Reference in New Issue
Block a user