feat: FastAPI+SSE API server, JRXML auto-reorder, session integrity fixes
This commit is contained in:
+7
-7
@@ -31,7 +31,7 @@
|
||||
|
||||
## 1. 项目是什么
|
||||
|
||||
**一句话**:用户用中文描述报表需求 → LLM 生成 JRXML 模板 → 自动验证 → 失败则自动修正(最多 3 次)→ 重试耗尽后失败上下文自动注入下一轮 → 返回可用的 JRXML 文件。
|
||||
**一句话**:用户用中文描述报表需求 → LLM 生成 JRXML 模板 → 自动验证 → 失败则自动修正(最多 5 次)→ 重试耗尽后失败上下文自动注入下一轮 → 返回可用的 JRXML 文件。
|
||||
|
||||
**技术栈**:Streamlit(UI) + LangGraph(状态机) + LLM(MiniMax/OpenAI/Ollama) + ChromaDB(向量库) + FastAPI(验证微服务)
|
||||
|
||||
@@ -110,7 +110,7 @@ streamlit run app.py --server.port 8501
|
||||
│ │ │ │
|
||||
│ │ correct_jrxml │
|
||||
│ │ │ │
|
||||
│ │ (retry < 3) ────┘ │
|
||||
│ │ (retry < 5) ────┘ │
|
||||
│ ▼ │
|
||||
│ finalize → END │
|
||||
└──────────────────────────┬───────────────────────────────────┘
|
||||
@@ -251,14 +251,14 @@ def route_after_correct(state) -> Literal["validate", "finalize"]:
|
||||
return "validate" if state.get("retry_count", 0) < MAX_RETRY else "finalize"
|
||||
```
|
||||
|
||||
**MAX_RETRY 默认为 3**(`.env` 中配置)。重试耗尽后进入 finalize,finalize 会将失败上下文写入 `pending_failure_context`,下次用户输入时 `process_input` 自动注入。
|
||||
**MAX_RETRY 默认为 5**(`.env` 中配置)。重试耗尽后进入 finalize,finalize 会将失败上下文写入 `pending_failure_context`,下次用户输入时 `process_input` 自动注入。
|
||||
```
|
||||
|
||||
**关键路由逻辑**:
|
||||
- `route_by_intent`:8 种意图分叉,是整个系统的"交通枢纽"
|
||||
- `route_after_retrieve`:有 layout_schema → 3 阶段精确生成(generate_skeleton → refine_layout → map_fields),无 schema → 原 1-shot generate
|
||||
- `route_after_save`:预览/导出意图**跳过验证**直通 finalize(这是修复预览问题的关键)
|
||||
- `route_after_correct`:重试次数 < 3 则继续验证循环,否则认输
|
||||
- `route_after_correct`:重试次数 < 5 则继续验证循环,否则认输
|
||||
|
||||
### 5.2 图构建
|
||||
|
||||
@@ -347,9 +347,9 @@ def build_graph():
|
||||
│ ▼ │
|
||||
│ correct_jrxml │
|
||||
│ │ │
|
||||
│ ├── retry < 3? ──► validate (循环) │
|
||||
│ ├── retry < 5? ──► validate (循环) │
|
||||
│ │ │
|
||||
│ └── retry >= 3? ──► finalize (放弃) │
|
||||
│ └── retry >= 5? ──► finalize (放弃) │
|
||||
│ │
|
||||
▼ │
|
||||
finalize ──► END │
|
||||
@@ -1169,7 +1169,7 @@ parent.addEventListener('keydown', function(e) {
|
||||
| `RAG_USE_GPU` | `true` | GPU 加速 |
|
||||
| `RAG_USE_FP16` | `true` | 半精度推理 |
|
||||
| `VALIDATION_SERVICE_URL` | `http://localhost:8001/validate` | 验证服务地址 |
|
||||
| `MAX_RETRY` | `3` | 最大自动修正次数 |
|
||||
| `MAX_RETRY` | `5` | 最大自动修正次数 |
|
||||
| `CONTEXT_MAX_TOKENS` | `6000` | 触发压缩的 token 阈值 |
|
||||
| `CONTEXT_KEEP_RECENT` | `4` | 压缩时保留最近 N 轮 |
|
||||
| `SESSIONS_DIR` | `./sessions` | 会话文件目录 |
|
||||
|
||||
Reference in New Issue
Block a user