feat(ssa): Complete QPER architecture - Query, Planner, Execute, Reflection layers

Implement the full QPER intelligent analysis pipeline:

- Phase E+: Block-based standardization for all 7 R tools, DynamicReport renderer, Word export enhancement

- Phase Q: LLM intent parsing with dynamic Zod validation against real column names, ClarificationCard component, DataProfile is_id_like tagging

- Phase P: ConfigLoader with Zod schema validation and hot-reload API, DecisionTableService (4-dimension matching), FlowTemplateService with EPV protection, PlannedTrace audit output

- Phase R: ReflectionService with statistical slot injection, sensitivity analysis conflict rules, ConclusionReport with section reveal animation, conclusion caching API, graceful R error classification

End-to-end test: 40/40 passed across two complete analysis scenarios.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-21 18:15:53 +08:00
parent 428a22adf2
commit 371e1c069c
73 changed files with 9242 additions and 706 deletions

View File

@@ -0,0 +1,400 @@
# SSA-Pro 智能化差距分析与演进路线图
> **文档版本:** v1.0
> **创建日期:** 2026-02-20
> **基准文档:** `00-系统设计/SSA-Pro 理想状态与智能化愿景设计.md`
> **当前状态:** Phase 2A 前端集成完成,多步骤工作流端到端通过
> **文档目的:** 明确当前系统与理想智能化之间的差距,规划演进路径
---
## 1. 执行摘要
### 核心结论
**当前系统已搭好"四肢"R 执行 + SSE 实时进度 + 前端展示 + Word/R 导出),但缺少"大脑"LLM 意图理解 + 决策表规划 + 论文级结论生成)。**
| 维度 | 当前状态 | 理想状态 | 差距 |
|------|---------|---------|------|
| 用户输入 | 用户需了解变量名和分析意图 | 用自然语言描述临床问题即可 | 🔴 大 |
| 方法选择 | 硬编码 if/else 规则 | 决策表四维匹配 + LLM 兜底 | 🔴 大 |
| 流程规划 | 从零拼装步骤列表 | 预定义流程模板 + 数据驱动调整 | 🔴 大 |
| 执行引擎 | 顺序执行,各步独立 | 结果串联 + 护栏降级 + 可中断 | 🟡 中 |
| 结果输出 | 数值表格 + 基础图表 | 论文级综合结论 + 方法学说明 | 🔴 大 |
### 智能化等级评估
```
L1 单方法执行 ████████████████████ 100% ✅ 已完成2026-02-19
L2 智能选方法 ███████░░░░░░░░░░░░░ 35% 🟡 有规则匹配,缺决策表和 LLM
L3 数据自适应 ████░░░░░░░░░░░░░░░░ 20% 🔴 护栏在 R 内部,未与规划联动
L4 流程编排 ████████░░░░░░░░░░░░ 40% 🟡 多步骤能跑,缺模板和串联
L5 论文级输出 ███░░░░░░░░░░░░░░░░░ 15% 🔴 缺 LLM 结论生成
```
---
## 2. 五大核心组件差距详析
### 2.1 意图理解器 (Intent Parser) — 完成度 20%
**理想状态:**
- LLM 从用户自然语言中提取四维信息Goal / Y_Type / X_Type / Design
- 不确定时主动追问澄清(展示选择卡片)
- 支持模糊输入:"有没有效"、"帮我分析一下"
**当前实现:**
- `WorkflowPlannerService.parseUserIntent()` — 正则匹配关键词
- "相关" → correlation"影响" → regression"比较" → comparison
- 变量名通过正则从用户文本中提取,与 DataProfile 变量列表交叉匹配
- 变量类型通过 DataProfile 判断categorical / numeric
**差距明细:**
| 能力 | 理想 | 当前 | 状态 |
|------|------|------|------|
| Goal 分类 | Difference / Association / Prediction / Description | 关键词硬编码 | 🔴 |
| Y/X 类型提取 | LLM 自动识别结局变量和自变量 | 正则提取变量名 | 🟡 |
| Design 识别 | 独立 / 配对 / 重复测量 | 不支持 | 🔴 |
| 模糊理解 | "有没有效" → 差异比较 | 需要用户说"比较" | 🔴 |
| 追问澄清 | 展示选择卡片让用户确认 | 不追问,直接猜测 | 🔴 |
| 多目标识别 | 识别多个分析目标并分拆 | 不支持 | 🔴 |
**关键缺失文件/服务:**
- `IntentParserService`LLM 驱动的意图解析,替代当前的 `parseUserIntent` 方法)
- 前端追问卡片组件(当 AI 不确定时展示选项)
---
### 2.2 数据诊断器 (Data Diagnostician) — 完成度 30%
**理想状态:**
- 独立的"数据体检报告"模块
- 检测项:正态性、方差齐性、缺失比例、异常值、样本量、分组平衡性
- 诊断结果直接传递给路径规划器,影响方法选择
**当前实现:**
- Python `DataProfileService`:变量类型推断、缺失率、基本统计量、唯一值
- R `guardrails.R`在方法执行时检查正态性Shapiro-Wilk和方差齐性Levene
- 前端 `DataProfileCard` + `DataProfileModal`:展示数据概况
**差距明细:**
| 检测项 | 理想 | 当前 | 状态 |
|--------|------|------|------|
| 变量类型推断 | 自动识别 | Python DataProfile ✅ | ✅ |
| 缺失值统计 | 占比 + 建议处理策略 | 有占比,无处理建议 | 🟡 |
| 正态性检验 | 独立模块,结果传递给 Planner | R 内部执行,不回传 | 🔴 |
| 方差齐性 | 独立模块,结果传递给 Planner | R 内部执行,不回传 | 🔴 |
| 异常值检测 | IQR 方法 + 可视化标注 | 不检测 | 🔴 |
| 样本量评估 | 功效分析建议 | 不评估 | 🔴 |
| 分组平衡性 | 各组比例 + 提示不平衡 | 不检测 | 🔴 |
| 诊断→规划联动 | 自动影响方法选择 | 完全割裂 | 🔴 |
**关键问题:**
- 数据诊断Python DataProfile和统计前提检查R guardrails是两个独立系统
- R 护栏在执行时发现正态性不满足时自动降级(如 T→Wilcoxon但不通知 Planner
- Planner 做规划时不知道数据特征,全凭变量类型硬编码选方法
---
### 2.3 路径规划器 (Pathway Planner) — 完成度 15%
**理想状态:**
- 决策表匹配:(Goal, Y_Type, X_Type, Design) → 精准选工具
- 流程模板:预定义标准分析流程(如"两组差异比较 = 清洗 → 描述 → 正态检验 → [T/U] → 效应量 → 可视化"
- 数据驱动调整:根据诊断结果动态修改流程
- 生成完整的 SAP统计分析计划供用户确认
**当前实现:**
- `WorkflowPlannerService.generateSteps()` — 硬编码 if/else 链
- 如果 `analysisType === 'comparison'` 且 Y 是连续 → 加 T 检验步骤
- 总是先加描述性统计步骤
- 输出 `WorkflowPlan { title, steps[] }` 结构
**差距明细:**
| 能力 | 理想 | 当前 | 状态 |
|------|------|------|------|
| 决策表匹配 | 四维精准匹配 | 硬编码 if/else | 🔴 |
| 流程模板 | 5-8 个预定义模板 | 无模板概念 | 🔴 |
| 数据驱动调整 | 诊断结果影响规划 | 不参考诊断结果 | 🔴 |
| SAP 生成 | 结构化计划文档 | 简单步骤列表 | 🔴 |
| 敏感性分析 | 自动添加补充分析 | 不支持 | 🔴 |
| 效应量步骤 | 自动包含 | 不支持 | 🔴 |
| 可视化步骤 | 自动规划图表 | 不支持R 内部生成) | 🟡 |
**关键缺失文件/服务:**
- `DecisionTableService` — 决策表加载和四维匹配
- `FlowTemplateService` — 流程模板管理
- 决策表 Excel 配置文件
- 流程模板配置文件
---
### 2.4 流程执行器 (Workflow Executor) — 完成度 40%
**理想状态:**
- 按 SAP 定义的顺序执行多个方法
- 上一步输出作为下一步输入(结果串联)
- 护栏检查失败时自动降级方法
- 每步实时反馈中间结果
- 用户可暂停/跳过/取消
**当前实现:**
- `WorkflowExecutorService.executeWorkflow()` — 顺序遍历 steps 数组
- 每步独立调用 R 服务(通过 `RClientService`
- SSE 实时推送 `step_start` / `step_complete` / `workflow_complete`
- 前端实时展示执行日志和结果terminal-box + 结果卡片)
**差距明细:**
| 能力 | 理想 | 当前 | 状态 |
|------|------|------|------|
| 顺序执行 | ✅ | ✅ | ✅ |
| SSE 实时反馈 | ✅ | ✅ | ✅ |
| 步骤级结果展示 | ✅ | ✅ | ✅ |
| 结果串联 | 上步输出 → 下步输入 | 各步独立执行 | 🔴 |
| 护栏降级 | 失败时自动切换方法 | 不支持 | 🔴 |
| 暂停/跳过/取消 | 用户可控 | 一旦开始无法中断 | 🔴 |
| 错误恢复 | 某步失败提供重试选项 | 失败则标记 failed | 🟡 |
| 步骤间数据共享 | 共享清洗后数据集 | 每步重新加载原始数据 | 🔴 |
**这是完成度最高的组件**,架构基础已就位,需要补充的是上层能力。
---
### 2.5 结论生成器 (Conclusion Generator) — 完成度 15%
**理想状态:**
- 论文级综合结论,包含 6 个要素:
1. 样本描述(纳入/排除)
2. 主要结果(核心统计量 + P 值)
3. 效应解读(效应量含义)
4. 敏感性分析(结果稳健性)
5. 方法学说明(为什么选这个方法)
6. 局限性声明(数据处理说明)
- LLM 生成自然语言结论
**当前实现:**
- `ConclusionGeneratorService` 存在但功能有限
- 前端展示统计量数值、P 值、效应量(数字形式)
- Word 导出executive_summary + 各步骤统计量表格
**差距明细:**
| 结论要素 | 理想 | 当前 | 状态 |
|----------|------|------|------|
| 样本描述 | "共纳入 186 例,剔除 14 例..." | 无 | 🔴 |
| 主要结果 | LLM 自然语言描述 | 数字展示P=0.015 | 🔴 |
| 效应解读 | "中等程度效应" | 数字展示r=0.52 | 🔴 |
| 敏感性分析 | "T 检验得到一致结论" | 不支持 | 🔴 |
| 方法学说明 | "因不满足正态性..." | 无 | 🔴 |
| 局限性声明 | 自动生成 | 无 | 🔴 |
| 多步骤整合 | 综合所有步骤生成报告 | 各步骤独立展示 | 🟡 |
| 可发表质量 | 直接用于论文 | 需大量人工整理 | 🔴 |
**关键缺失:**
- LLM 结论生成 Prompt调用 GPT/DeepSeek 生成论文级文字)
- 结果解读模板("填空题"式结论模板)
- 多步骤结果整合逻辑
---
## 3. 已完成的基础设施(不需要重做)
在规划演进路径之前,确认以下基础已就位,无需重复建设:
| 基础设施 | 状态 | 说明 |
|----------|------|------|
| R 统计引擎 | ✅ | Docker 部署7 个工具plumber API |
| Node.js 后端框架 | ✅ | 路由、Service 架构、SSE |
| 前端 V11 UI | ✅ | 三栏布局、对话式交互、结果展示 |
| SSE 实时通信 | ✅ | 前后端消息格式已对齐 |
| 数据上传 + OSS | ✅ | 文件上传、预签名 URL |
| Python 数据质量 | ✅ | 变量类型推断、基础统计 |
| R 代码导出 | ✅ | 多步骤聚合导出 |
| Word 报告导出 | ✅ | docx 库,多步骤报告 |
| R 护栏系统 | ✅ | 正态性、方差齐性检查R 内部) |
| Block-based 协议 | 📋 | 规范已制定待实施2.5 天) |
---
## 4. 演进路线图
### 4.1 推荐路径(按投入产出比排序)
```
当前状态Phase 2A 完成L1-L2 之间)
│ ① LLM 意图理解 + 决策表匹配 (~5天)
│ - IntentParserService: LLM 提取 Goal/Y/X/Design
│ - DecisionTableService: 四维 → 工具精准匹配
│ - 前端追问卡片组件
L2 完成: 智能选方法
│ 「用户不再需要知道 T 检验、卡方检验是什么」
│ ② 流程模板 + 结果串联 (~3天)
│ - FlowTemplateService: 5-8 个预定义流程
│ - 步骤间数据共享机制
│ - 敏感性分析自动添加
L4 完成: 流程编排
│ 「从单方法跃迁到完整统计分析流程」
│ ③ LLM 结论生成 (~3天)
│ - ConclusionService: LLM 综合解读
│ - 结论模板体系
│ - 方法学说明自动生成
L5 完成: 论文级输出
│ 「结果可直接复制到论文中」
│ ④ 数据诊断→规划联动 + 追问机制 (~5天)
│ - DataDiagnosticService: 异常值/样本量/平衡性
│ - 诊断结果传递给 Planner
│ - 护栏结果回传机制
L3 完成: 数据自适应
│ 「系统自动根据数据特征调整方法」
│ ⑤ 高级交互 (~3天)
│ - 执行暂停/跳过/取消
│ - 步骤失败自动降级
│ - 用户修改 SAP 后重新执行
理想状态: 完全智能化统计分析系统
```
### 4.2 各阶段详细任务
#### 阶段 ①LLM 意图理解 + 决策表匹配(~5 天)
| 任务 | 层级 | 预估 | 说明 |
|------|------|------|------|
| 设计 Intent Prompt | 后端 | 4h | 提取 Goal/Y/X/Design + 置信度 |
| 实现 IntentParserService | 后端 | 6h | LLM 调用 + 结构化输出 + Zod 校验 |
| 设计决策表 Excel 模板 | 配置 | 3h | 四维匹配规则 + 10 个工具映射 |
| 实现 DecisionTableService | 后端 | 6h | Excel 加载 + 四维匹配逻辑 |
| 重构 WorkflowPlannerService | 后端 | 4h | 集成 Intent + DecisionTable |
| 前端追问卡片组件 | 前端 | 4h | 当置信度低时展示选项 |
| 联调测试 | 全栈 | 4h | 多场景测试 |
#### 阶段 ②:流程模板 + 结果串联(~3 天)
| 任务 | 层级 | 预估 | 说明 |
|------|------|------|------|
| 定义 5 个流程模板 | 配置 | 3h | 差异/关联/描述/回归/基线表 |
| 实现 FlowTemplateService | 后端 | 4h | 模板加载 + 参数填充 |
| 步骤间数据共享 | 后端+R | 6h | 清洗后数据缓存 + 传递 |
| 自动添加敏感性分析 | 后端 | 3h | 主要分析 + 替代方法 |
| 自动添加效应量步骤 | 后端 | 2h | Cohen's d / r |
| 联调测试 | 全栈 | 4h | 完整流程测试 |
#### 阶段 ③LLM 结论生成(~3 天)
| 任务 | 层级 | 预估 | 说明 |
|------|------|------|------|
| 设计结论生成 Prompt | 后端 | 4h | 6 要素结论模板 |
| 实现 ConclusionService | 后端 | 6h | LLM 调用 + 流式输出 |
| 设计解读模板配置 | 配置 | 3h | 每种工具的"填空题"模板 |
| 前端论文结论展示 | 前端 | 4h | Markdown 渲染 + 复制 |
| Word 报告增强 | 前端 | 3h | 纳入论文级结论 |
| 联调测试 | 全栈 | 3h | |
#### 阶段 ④:数据诊断→规划联动(~5 天)
| 任务 | 层级 | 预估 | 说明 |
|------|------|------|------|
| 实现异常值检测 | Python/R | 4h | IQR 方法 + 可视化标注 |
| 实现样本量评估 | Python/R | 3h | 功效分析建议 |
| 实现分组平衡性检测 | Python | 2h | 各组比例 + 提示 |
| 诊断结果传递给 Planner | 后端 | 4h | DataDiagnosis → PlannerInput |
| R 护栏结果回传机制 | 后端+R | 6h | 护栏结果影响后续步骤 |
| 前端诊断报告增强 | 前端 | 4h | 问题列表 + 建议 + 评分 |
| 前端追问机制 | 前端 | 4h | 不确定时展示选择卡片 |
| 联调测试 | 全栈 | 4h | |
#### 阶段 ⑤:高级交互(~3 天)
| 任务 | 层级 | 预估 | 说明 |
|------|------|------|------|
| 执行暂停/跳过/取消 | 后端+前端 | 6h | SSE 控制消息 |
| 步骤失败自动降级 | 后端 | 4h | T 检验失败 → Wilcoxon |
| SAP 修改后重新执行 | 前端+后端 | 6h | 用户编辑步骤 → 重新规划 |
| 联调测试 | 全栈 | 4h | |
---
## 5. 工时与里程碑
| 阶段 | 核心目标 | 工时 | 智能等级 |
|------|---------|------|---------|
| Block-based 重构 | 结果渲染标准化 | 2.5天 | 基础设施 |
| ① LLM 意图 + 决策表 | 用户不需要知道方法名 | 5天 | → L2 |
| ② 流程模板 + 串联 | 从单方法到完整流程 | 3天 | → L4 |
| ③ LLM 结论生成 | 论文级输出 | 3天 | → L5 |
| ④ 数据诊断联动 | 全自动方法调整 | 5天 | → L3 |
| ⑤ 高级交互 | 可中断 + 降级 | 3天 | 完善 |
| **合计** | **理想状态** | **~21.5天** | **L5** |
### 里程碑时间线(预估)
```
2026-02-21 ─── Block-based 重构开始
2026-02-24 ─── Block-based 完成 ✓ 基础设施就绪
2026-02-25 ─── 阶段① 开始LLM 意图 + 决策表
2026-03-01 ─── 阶段① 完成 ✓ L2 智能选方法
2026-03-02 ─── 阶段② 开始:流程模板 + 串联
2026-03-05 ─── 阶段② 完成 ✓ L4 流程编排
2026-03-06 ─── 阶段③ 开始LLM 结论生成
2026-03-10 ─── 阶段③ 完成 ✓ L5 论文级输出
2026-03-11 ─── 阶段④ 开始:数据诊断联动
2026-03-17 ─── 阶段④ 完成 ✓ L3 数据自适应
2026-03-18 ─── 阶段⑤ 开始:高级交互
2026-03-21 ─── 阶段⑤ 完成 ✓ 理想状态
```
---
## 6. 成功标准
### 用户体验验证
| 测试场景 | 当前表现 | 目标表现 |
|----------|---------|---------|
| 用户说"有没有效" | ❌ 无法理解 | ✅ AI 识别为差异比较 |
| 用户不知道该用什么方法 | ❌ 必须指定 | ✅ AI 自动选择 |
| 数据不满足正态性 | 🟡 R 内部降级,用户不知 | ✅ 规划时就选非参数方法 |
| 分析结果 | 🟡 P 值 + 数字 | ✅ "两组差异显著(P<0.001),中等效应" |
| 导出报告 | 🟡 需大量整理 | ✅ 可直接用于论文 |
### 智能化评分卡
| 能力 | 权重 | 当前评分 | 目标评分 |
|------|------|---------|---------|
| 意图理解 | 25% | 2/10 | 8/10 |
| 方法选择 | 20% | 3/10 | 9/10 |
| 流程规划 | 20% | 2/10 | 8/10 |
| 执行引擎 | 15% | 6/10 | 9/10 |
| 结论生成 | 20% | 1/10 | 8/10 |
| **加权总分** | **100%** | **2.7/10** | **8.4/10** |
---
## 7. 风险与依赖
| 风险 | 概率 | 影响 | 应对策略 |
|------|------|------|---------|
| LLM 意图提取准确率不足 | 中 | 高 | 低置信度时追问用户,而非猜测 |
| 决策表覆盖率不足 | 中 | 中 | RAG 工具检索作为兜底方案 |
| LLM 结论生成"幻觉" | 中 | 高 | 基于模板+真实数据填充,而非自由生成 |
| 步骤间数据串联复杂度 | 中 | 中 | 先实现缓存共享,不做复杂依赖图 |
| 流程模板无法覆盖长尾场景 | 低 | 中 | 预留"自定义流程"入口 |
---
**文档维护者:** SSA 架构团队
**最后更新:** 2026-02-20
**下一步行动:** 确认优先级后,从 Block-based 重构 → 阶段 ① 开始执行