feat: 添加结构化日志系统,更新LLM配置与全部文档

新增:
- backend/logger.py — 集中日志模块 (JSON格式 + trace_id + 独立llm.log)
- @log_node / @_log_route 装饰器覆盖17个节点和8个路由

改进:
- backend/llm.py — _LLMLoggingWrapper 自动记录LLM输入输出
- backend/llm.py — API Key优先读ANTHROPIC_API_KEY,模型名改为MiniMax-M2.7
- backend/llm.py — get_llm() 新增caller参数标识调用来源
- backend/validation.py — 新增验证结果/连接失败日志
- backend/session.py — 新增会话创建/删除日志
- app.py — 新增用户交互日志 (输入/执行/异常/会话操作)
- app.py — 提前导入torchvision抑制transformers懒加载报错
- .env.example — 新增LOG_DIR/LOG_LEVEL/ANTHROPIC_API_KEY等配置项
- .gitignore — 新增logs/和db/忽略规则

文档:
- ROADMAP.md — 新增阶段四: 可观测性
- README.md — 补充日志架构/LLM配置/项目结构
- CLAUDE.md — 同步最新配置/日志/MAX_RETRY(3)
- CODE_GUIDE.md — 新增第15章日志系统,更新架构图/LLM/配置
This commit is contained in:
2026-05-19 23:40:01 +08:00
parent 6467fd4ae5
commit 067880bf2e
13 changed files with 753 additions and 82 deletions
+21 -6
View File
@@ -5,22 +5,37 @@ import os
import httpx
from dotenv import load_dotenv
from backend.logger import get_logger
load_dotenv()
_val_log = get_logger("validation")
VALIDATION_URL = os.getenv("VALIDATION_SERVICE_URL", "http://localhost:8001/validate")
def validate_jrxml(jrxml_text: str) -> dict:
"""将 JRXML 发送到验证服务并返回 {valid: bool, error: str}。"""
jrxml_length = len(jrxml_text)
try:
with httpx.Client(timeout=30.0) as client:
resp = client.post(VALIDATION_URL, json={"jrxml": jrxml_text})
resp.raise_for_status()
return resp.json()
result = resp.json()
_val_log.info(
"验证完成",
extra={
"valid": result.get("valid"),
"error": result.get("error", ""),
"jrxml_length": jrxml_length,
},
)
return result
except httpx.ConnectError:
return {
"valid": False,
"error": f"无法连接到验证服务 ({VALIDATION_URL})。是否正在运行?",
}
error_msg = f"无法连接到验证服务 ({VALIDATION_URL})。是否正在运行?"
_val_log.error("验证服务连接失败", extra={"error": error_msg, "url": VALIDATION_URL})
return {"valid": False, "error": error_msg}
except Exception as e:
return {"valid": False, "error": f"验证请求失败: {str(e)}"}
error_msg = f"验证请求失败: {str(e)}"
_val_log.error("验证请求异常", extra={"error": str(e), "url": VALIDATION_URL})
return {"valid": False, "error": error_msg}