067880bf2e
新增: - 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/配置
126 lines
5.4 KiB
Markdown
126 lines
5.4 KiB
Markdown
# 改进路线图
|
||
|
||
## 阶段一:代码质量(低风险,快速交付)
|
||
|
||
### 1. Prompt 拆分 ✓
|
||
- [x] 创建 `prompts/` 目录
|
||
- [x] 7 个 prompt 各拆为独立 `.md` 文件
|
||
- [x] `nodes.py` 改为从文件加载
|
||
- [x] 支持热重载(文件变更无需重启)
|
||
|
||
### 2. 修复无效代码 ✓
|
||
- [x] `backend/llm.py` — `get_num_tokens()` 修复为正确 API
|
||
- [x] `backend/embeddings.py` — 修复 docstring 函数名不一致
|
||
- [x] `backend/llm.py` — 统一 LLM 接口基类 `_BaseLLM`
|
||
|
||
---
|
||
|
||
## 阶段二:用户体验(核心改造)
|
||
|
||
### 3. 流式输出 + 节点平铺 ✓
|
||
- [x] `backend/llm.py` — LLM 工厂支持 `stream()` 统一接口
|
||
- [x] `agent/nodes.py` — generate/modify/correct 节点使用流式 + `get_stream_writer()`
|
||
- [x] `app.py` — 使用 `stream_mode=["updates", "custom"]` 捕获流式事件
|
||
- [x] 节点状态平铺(处理过程 expander 逐节点展示)
|
||
- [x] 流式完成后节点自动折叠
|
||
- [x] 完成后单独展示「总结卡片」
|
||
|
||
### 4. 错误自增长知识库 ✓
|
||
- [x] `backend/error_kb.py` — ErrorKB 类(ChromaDB 持久化)
|
||
- [x] 错误指纹去重(标准化 + MD5)
|
||
- [x] `correct_jrxml` — 保存修正前状态到 `last_error_case`
|
||
- [x] `validate` — 修正成功时自动记录(仅新错误,自动去重)
|
||
- [x] `retrieve` — 搜索错误知识库,注入历史修正案例
|
||
- [x] 记录内容:错误 + 修正前后 JRXML + prompt + 工具链 + 模型
|
||
|
||
### 5. 文件上传支持 ✓
|
||
- [x] `backend/file_parser.py` — 统一解析接口
|
||
- [x] 图片 → PIL 元信息 + PaddleOCR(可选安装后自动识别)
|
||
- [x] PDF → pdfplumber / PyMuPDF 文本提取
|
||
- [x] DOCX → python-docx 文本提取
|
||
- [x] 纯文本 (.txt/.csv/.json/.xml) → 直接读取
|
||
- [x] `can_use_vision()` — 根据模型名判断是否支持原生多模态
|
||
- [x] `app.py` — 侧边栏文件上传组件(多文件,可移除)
|
||
- [x] 上传文本自动注入下一条消息前缀
|
||
|
||
### 6. A4 图片模板识别 ✓
|
||
- [x] `backend/layout_analyzer.py` — 完整布局分析模块
|
||
- [x] A4 比例判定:exact(±3%) / close(±8%) / not_a4 三档
|
||
- [x] PaddleOCR 布局分析:逐元素提取坐标(x,y,w,h)、字号、文本
|
||
- [x] 行分组:Y 轴容差自动聚类
|
||
- [x] 结构化输出:`图片模板共 X 行,第 1 行有 Y 个元素,其中元素 a 长...高...字体...内容是...`
|
||
- [x] 检测门槛:≥2 个 OCR 元素 + A4 比例 → 标记为模板
|
||
- [x] `app.py` — 上传图片/PDF 时自动触发布局分析,替换为布局描述
|
||
|
||
### 7. 会话历史 JRXML 下载 ✓
|
||
- [x] `agent/state.py` — 新增 `jrxml_versions` 字段
|
||
- [x] `agent/nodes.py` — `finalize` 节点追加版本记录
|
||
- [x] `app.py` — 侧边栏"历史版本"折叠区,每版本独立下载按钮
|
||
|
||
### 8. 预览功能修复 ✓
|
||
- [x] 根因:`preview_report` 路由到 `save_session` → `validate` 触发不必要的验证修正循环
|
||
- [x] 修复:`route_after_save` — 预览/导出意图跳过验证直接 `finalize`
|
||
|
||
---
|
||
|
||
## 阶段三:细节修复
|
||
|
||
### 9. Ctrl+C 修复 ✓
|
||
- [x] `app.py` — 注入 JS 拦截裸 `c` 键,保留 Ctrl+C 复制行为
|
||
|
||
---
|
||
|
||
## 阶段四:可观测性
|
||
|
||
### 10. 结构化日志系统 ✓
|
||
- [x] `backend/logger.py` — 集中日志配置模块
|
||
- [x] JSON 格式化(每行一条记录,便于 jq/pandas 分析)
|
||
- [x] 请求级 trace_id(contextvars 自动传播,一次用户请求贯穿全链路)
|
||
- [x] 独立 LLM 日志文件 `logs/llm.log`(记录完整 prompt 和 response)
|
||
- [x] 时区:UTC+8(中国时区)
|
||
- [x] 日志轮转(单文件 10MB,保留 5 备份)
|
||
- [x] `backend/llm.py` — `_LLMLoggingWrapper` 包装所有 LLM 后端
|
||
- [x] 记录每次 invoke/stream 的请求 prompt、响应内容、耗时、模型、调用来源
|
||
- [x] 异常时也记录完整 prompt
|
||
- [x] `agent/nodes.py` — `@log_node` 装饰器覆盖 17 个节点
|
||
- [x] 入口/出口/异常三个阶段的日志
|
||
- [x] 自动记录 state 关键字段摘要(session_id、intent、status、jrxml_length 等)
|
||
- [x] 每个节点耗时(duration_ms)
|
||
- [x] `agent/graph.py` — `@_log_route` 装饰器覆盖 8 个路由函数
|
||
- [x] 记录每次路由决策(来源 → 目标)
|
||
- [x] `app.py` — 用户交互日志
|
||
- [x] 收到用户输入(含上传文件信息)
|
||
- [x] 代理执行开始/完成(含最终 intent、status、jrxml_length)
|
||
- [x] 异常时记录错误详情
|
||
- [x] 会话新建/切换/删除操作日志
|
||
- [x] `backend/session.py` — 会话创建/删除日志
|
||
- [x] `backend/validation.py` — 验证完成/连接失败日志
|
||
- [x] `.env.example` — 新增 `LOG_DIR`、`LOG_LEVEL` 配置项
|
||
- [x] `.gitignore` — 新增 `logs/` 忽略规则
|
||
|
||
---
|
||
|
||
## 执行顺序建议
|
||
|
||
```
|
||
1. Prompt 拆分 ──► 2. 无效代码修复
|
||
│
|
||
▼
|
||
3. 流式输出 + 节点平铺
|
||
│
|
||
┌─────────────┼─────────────┐
|
||
▼ ▼ ▼
|
||
4. 错误自增长 5. 文件上传 7. 下载历史
|
||
│ │
|
||
▼ ▼
|
||
6. A4 模板识别 8. 预览修复
|
||
│
|
||
▼
|
||
9. Ctrl+C 修复
|
||
│
|
||
▼
|
||
10. 结构化日志系统
|
||
```
|
||
|
||
阶段一立即可做,无外部依赖。阶段二是主要工作量。阶段三是收尾。阶段四是可观测性基础。
|