Phase 2A: WorkflowPlannerService, WorkflowExecutorService, Python data quality, 6 bug fixes, DescriptiveResultView, multi-step R code/Word export, MVP UI reuse. V11 UI: Gemini-style, multi-task, single-page scroll, Word export. Architecture: Block-based rendering consensus (4 block types). New R tools: chi_square, correlation, descriptive, logistic_binary, mann_whitney, t_test_paired. Docs: dev summary, block-based plan, status updates, task list v2.0. Co-authored-by: Cursor <cursoragent@cursor.com>
37 KiB
37 KiB
SSA-Pro Phase 2A:智能化核心开发计划
文档版本: v1.1
创建日期: 2026-02-20
最后更新: 2026-02-20(纳入架构审查反馈:暗礁预警 + Python/R 分工 + 执行时机)
目标: 以终为始,完成智能统计分析的核心能力
里程碑: 5 大核心组件跑通 + 7 个统计工具上线
1. 战略定位:为什么 Phase 2A 是 MVP 的核心?
┌─────────────────────────────────────────────────────────────────┐
│ SSA-Pro 开发阶段定位 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Phase 1 ✅ 已完成 │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
│ 骨架搭建:前后端架构 + T检验端到端 + V11 UI │
│ 验证目标:证明"能跑通" │
│ │
│ Phase 2A ⭐ 当前阶段(本计划) │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
│ 智能化核心:5大组件 + 7个工具 + 多工具流程规划 │
│ 验证目标:证明"真正智能" │
│ │
│ Phase 2B+ 后续阶段 │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
│ 扩展完善:更多工具 + 咨询模式 + 配置中台 │
│ 性质:复制粘贴 + 修修补补 │
│ │
└─────────────────────────────────────────────────────────────────┘
核心观点:Phase 2A 完成后,智能化能力就完成了 85%+。后续工作主要是"量"的扩展,而非"质"的突破。
2. 以终为始:5 大核心组件
┌─────────────────────────────────────────────────────────────────┐
│ 理想的智能统计分析系统 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 1. 意图理解器 (Intent Parser) ✅ 已有 │ │
│ │ - Query Rewriter:医学术语 → 统计术语 │ │
│ │ - Planner:Goal/Y/X/Design 四维提取 │ │
│ │ - 不确定时追问澄清 │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 2. 数据诊断器 (Data Diagnostician) 🆕 Phase 2A │ │
│ │ │ │
│ │ ⏱️ 时机 A:用户上传数据时 → Python (Tool C) │ │
│ │ - 数据概况(行数、列数、类型推断) │ │
│ │ - 缺失值分析(每列缺失数、缺失率) │ │
│ │ - 异常值检测(IQR 方法) │ │
│ │ - 基础描述统计(均值、中位数、标准差) │ │
│ │ → 输出:DataProfile JSON(喂给 LLM 生成 SAP) │ │
│ │ │ │
│ │ ⏱️ 时机 B:执行核心计算前 → R Service (JIT 护栏) │ │
│ │ - 正态性检验(Shapiro-Wilk,针对特定 Y 变量) │ │
│ │ - 方差齐性检验(Levene,针对特定分组) │ │
│ │ → 输出:StatisticalChecks JSON(决定方法选择) │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 3. 路径规划器 (Pathway Planner) 🆕 Phase 2A │ │
│ │ - LLM 理解用户意图 + 数据特征 │ │
│ │ - 规划 2-7 步分析流程 │ │
│ │ - 选择合适的统计工具组合 │ │
│ │ → 输出:多步骤执行计划 (workflow_steps[]) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 4. 流程执行器 (Workflow Executor) 🆕 Phase 2A │ │
│ │ - 串联执行多个工具 │ │
│ │ - 结果在步骤间传递 │ │
│ │ - 护栏检查与自动降级 │ │
│ │ - 实时进度反馈(SSE 推送) │ │
│ │ → 输出:step_results[] │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 5. 结论生成器 (Conclusion Generator) ✅ 已有 │ │
│ │ - Critic Agent:多步骤结果整合 │ │
│ │ - 论文级结论模板 │ │
│ │ - 方法学说明 + 局限性声明 │ │
│ │ → 输出:综合分析报告 │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
2.1 组件状态汇总
| 组件 | 状态 | Phase 2A 任务 |
|---|---|---|
| 1. 意图理解器 | ✅ 已有 | 优化 Prompt,增强追问能力 |
| 2. 数据诊断器 | 🆕 待做 | 核心开发项 |
| 3. 路径规划器 | 🆕 待做 | 核心开发项 |
| 4. 流程执行器 | 🆕 待做 | 核心开发项 |
| 5. 结论生成器 | ✅ 已有 | 增强多步骤结果整合能力 |
3. 工具清单:7 个统计方法
3.1 工具总览
| 序号 | 工具代码 | 名称 | 类别 | 状态 | 典型场景 |
|---|---|---|---|---|---|
| 1 | ST_T_TEST_IND | 独立样本 T 检验 | 参数检验 | ✅ 已完成 | 两组连续变量比较 |
| 2 | ST_MANN_WHITNEY | Mann-Whitney U 检验 | 非参数检验 | 🆕 待做 | 两组非正态/等级变量比较 |
| 3 | ST_CHI_SQUARE | 卡方检验 | 分类变量 | 🆕 待做 | 两个分类变量关联 |
| 4 | ST_LOGISTIC_BINARY | 二元 Logistic 回归 | 多因素分析 | 🆕 待做 | 二分类结局的危险因素 |
| 5 | ST_T_TEST_PAIRED | 配对 T 检验 | 参数检验 | 🆕 待做 | 前后对比/配对设计 |
| 6 | ST_CORRELATION | Pearson/Spearman 相关 | 相关分析 | 🆕 待做 | 两个连续变量相关性 |
| 7 | ST_DESCRIPTIVE | 描述性统计 | 基础统计 | 🆕 待做 | 数据概况/基线表 |
3.2 工具选择逻辑(供 LLM 规划参考)
┌─────────────────────────────────────────────────────────────────┐
│ 工具选择决策树 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 研究目的是什么? │
│ ├─ 描述数据 → ST_DESCRIPTIVE │
│ ├─ 比较两组 │
│ │ ├─ Y 是连续变量 │
│ │ │ ├─ 独立样本 │
│ │ │ │ ├─ 正态分布 → ST_T_TEST_IND │
│ │ │ │ └─ 非正态 → ST_MANN_WHITNEY │
│ │ │ └─ 配对样本 → ST_T_TEST_PAIRED │
│ │ └─ Y 是分类变量 → ST_CHI_SQUARE │
│ ├─ 分析相关性 │
│ │ ├─ 正态分布 → ST_CORRELATION (Pearson) │
│ │ └─ 非正态 → ST_CORRELATION (Spearman) │
│ └─ 多因素分析 │
│ └─ Y 是二分类 → ST_LOGISTIC_BINARY │
│ │
└─────────────────────────────────────────────────────────────────┘
3.3 各工具详细定义
3.3.1 ST_MANN_WHITNEY(Mann-Whitney U 检验)
| 属性 | 值 |
|---|---|
| 适用场景 | 两组独立样本比较,Y 为连续/等级变量,不满足正态性假设 |
| 输入参数 | group_var(分组变量), value_var(数值变量) |
| 输出 | U 统计量、Z 值、P 值、效应量 r、中位数对比 |
| 护栏 | 每组样本量 ≥ 5;分组变量必须是二分类 |
| 降级来源 | T 检验正态性不满足时自动降级 |
3.3.2 ST_CHI_SQUARE(卡方检验)
| 属性 | 值 |
|---|---|
| 适用场景 | 两个分类变量的关联分析 |
| 输入参数 | var1(分类变量1), var2(分类变量2) |
| 输出 | χ² 统计量、自由度、P 值、Cramér's V |
| 护栏 | 期望频数 < 5 的格子不超过 20%;否则提示使用 Fisher |
| 自动降级 | 2×2 表且有格子 < 5 → Fisher 精确检验 |
3.3.3 ST_LOGISTIC_BINARY(二元 Logistic 回归)
| 属性 | 值 |
|---|---|
| 适用场景 | 二分类结局变量的多因素分析 |
| 输入参数 | outcome_var(结局变量), predictors(预测变量列表), confounders(混杂因素,可选) |
| 输出 | OR、95% CI、P 值(每个变量)、模型拟合度(AIC、Hosmer-Lemeshow) |
| 护栏 | 事件数 / 自变量数 ≥ 10(EPV 规则);共线性检测(VIF < 5) |
| 高级 | 支持单因素 → 多因素两步分析 |
3.3.4 ST_T_TEST_PAIRED(配对 T 检验)
| 属性 | 值 |
|---|---|
| 适用场景 | 配对设计,同一对象前后对比 |
| 输入参数 | before_var(前测变量), after_var(后测变量) |
| 输出 | 差值均值、t 统计量、P 值、Cohen's d、95% CI |
| 护栏 | 差值满足正态性;样本量 ≥ 10 |
| 降级 | 差值非正态 → Wilcoxon 符号秩检验 |
3.3.5 ST_CORRELATION(相关分析)
| 属性 | 值 |
|---|---|
| 适用场景 | 两个连续变量的相关性分析 |
| 输入参数 | var_x, var_y, method(pearson/spearman/auto) |
| 输出 | 相关系数 r、P 值、散点图 |
| 护栏 | 样本量 ≥ 10;检测异常值影响 |
| 自动选择 | 两变量均正态 → Pearson;否则 → Spearman |
3.3.6 ST_DESCRIPTIVE(描述性统计)
| 属性 | 值 |
|---|---|
| 适用场景 | 数据概况、基线特征表 |
| 输入参数 | variables(变量列表), group_var(可选,分组) |
| 输出 | 连续变量:均值±SD、中位数(IQR);分类变量:n(%) |
| 特殊 | 自动识别变量类型;支持分组对比 |
4. 数据流架构(含执行时机)
4.1 完整数据流
┌─────────────────────────────────────────────────────────────────┐
│ 完整数据流(含执行时机) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 用户上传数据 │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ ⏱️ 时机 A: Python (Tool C) │ │
│ │ → DataProfile JSON │ │
│ │ - 列类型、缺失率、异常值 │ │
│ │ - 唯一值、基础描述统计 │ │
│ └──────────────────┬──────────────────┘ │
│ │ 喂给 LLM │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ 意图理解器 + 路径规划器 (LLM) │ │
│ │ → SAP: Group=Gender, Value=GLU │ │
│ │ → Workflow: [描述统计, T检验] │ │
│ └──────────────────┬──────────────────┘ │
│ │ 用户确认执行 │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ ⏱️ 时机 B: R Service (JIT 护栏) │ │
│ │ → 针对 GLU 做正态性检验 │ │
│ │ → 针对 Gender 分组做方差齐性检验 │ │
│ │ → StatisticalChecks JSON │ │
│ └──────────────────┬──────────────────┘ │
│ │ 根据结果决策 │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ 正态 + 方差齐 → T 检验 │ │
│ │ 非正态 → Mann-Whitney │ │
│ │ 方差不齐 → Welch T 检验 │ │
│ └──────────────────┬──────────────────┘ │
│ ▼ │
│ 执行核心统计 → 生成结果 → 结论生成器 │
│ │
└─────────────────────────────────────────────────────────────────┘
4.2 执行时机说明
| 时机 | 触发条件 | 执行层 | 目的 |
|---|---|---|---|
| 时机 A | 用户上传数据 | Python (Tool C) | 让 LLM 知道"数据长什么样" |
| 时机 B | 用户确认执行前 | R Service | JIT 护栏:检验统计假设是否满足 |
⚠️ 关键原则:上传时不知道 Y 是什么,不能对全表做正态性检验。只有 LLM 确定了 Group=X, Value=Y 后,才能在执行前做 JIT 护栏检验。
4.3 Python (Tool C) DataProfile 接口
// 新增接口:POST /api/dc/profile
interface DataProfileRequest {
sessionId: string; // Tool C 会话 ID
}
interface DataProfileResponse {
columns: Array<{
name: string;
type: 'numeric' | 'categorical' | 'datetime' | 'text';
missingCount: number;
missingRate: number;
uniqueCount: number;
// 数值列
mean?: number;
median?: number;
std?: number;
min?: number;
max?: number;
outlierCount?: number;
// 分类列
topValues?: Array<{ value: string; count: number }>;
}>;
summary: {
totalRows: number;
totalColumns: number;
numericColumns: number;
categoricalColumns: number;
overallMissingRate: number;
};
}
4.4 R Service JIT 护栏接口
// 在执行核心工具前调用
interface JITGuardrailRequest {
sessionId: string;
toolCode: string; // e.g., "ST_T_TEST_IND"
params: {
groupVar: string; // e.g., "Gender"
valueVar: string; // e.g., "GLU"
};
}
interface JITGuardrailResponse {
checks: Array<{
checkName: string; // e.g., "正态性检验"
passed: boolean;
pValue: number;
recommendation: string;
}>;
suggestedTool: string; // 如果检验不通过,建议的替代工具
canProceed: boolean;
}
5. 开发任务清单
5.0 前置任务:数据库 Schema 更新
重要:遵循
docs/04-开发规范/09-数据库开发规范.md,使用 Prisma Migrate
新增表设计(方案 2:清晰结构)
/// SSA 多步骤流程
model SsaWorkflow {
id String @id @default(uuid())
sessionId String @map("session_id")
messageId String? @map("message_id") /// 关联的计划消息
status String @default("pending") /// pending | running | completed | partial | error
totalSteps Int @map("total_steps")
completedSteps Int @default(0) @map("completed_steps")
workflowPlan Json @map("workflow_plan") /// 原始计划 JSON
createdAt DateTime @default(now()) @map("created_at")
completedAt DateTime? @map("completed_at")
session SsaSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
steps SsaWorkflowStep[]
@@index([sessionId], map: "idx_ssa_workflow_session")
@@map("ssa_workflows")
@@schema("ssa_schema")
}
/// SSA 流程步骤
model SsaWorkflowStep {
id String @id @default(uuid())
workflowId String @map("workflow_id")
stepOrder Int @map("step_order")
toolCode String @map("tool_code")
toolName String @map("tool_name")
status String @default("pending") /// pending | running | success | warning | error | skipped
inputParams Json? @map("input_params")
guardrailChecks Json? @map("guardrail_checks") /// JIT 护栏检验结果
outputResult Json? @map("output_result")
errorInfo Json? @map("error_info")
executionMs Int? @map("execution_ms")
startedAt DateTime? @map("started_at")
completedAt DateTime? @map("completed_at")
workflow SsaWorkflow @relation(fields: [workflowId], references: [id], onDelete: Cascade)
@@index([workflowId], map: "idx_ssa_workflow_step_workflow")
@@map("ssa_workflow_steps")
@@schema("ssa_schema")
}
SsaSession 扩展字段
model SsaSession {
// ... 现有字段 ...
// 🆕 新增字段
dataProfile Json? @map("data_profile") /// Python 生成的 DataProfile
// 🆕 新增关系
workflows SsaWorkflow[]
}
迁移任务
| 任务 | 预估 | 优先级 | 依赖 |
|---|---|---|---|
| 🆕 备份开发数据库 | 0.5h | P0 | - |
| 🆕 修改 schema.prisma(新增表 + 字段) | 1h | P0 | 备份 |
🆕 执行 prisma migrate dev --name add_ssa_workflow_tables |
0.5h | P0 | Schema |
| 🆕 检查生成的迁移 SQL | 0.5h | P0 | 迁移 |
| 🆕 本地测试 | 1h | P0 | SQL |
| 🆕 更新 Prisma Client 类型 | 0.5h | P0 | 测试 |
预估总工时:4h(约 0.5 天)
5.1 阶段一:R 工具扩展(6 个新工具)
| 任务 | 预估 | 优先级 | 依赖 |
|---|---|---|---|
| 实现 ST_MANN_WHITNEY(Mann-Whitney U 检验) | 4h | P0 | - |
| 实现 ST_CHI_SQUARE(卡方检验) | 4h | P0 | - |
| 实现 ST_LOGISTIC_BINARY(二元 Logistic 回归) | 6h | P0 | - |
| 实现 ST_T_TEST_PAIRED(配对 T 检验) | 3h | P1 | - |
| 实现 ST_CORRELATION(相关分析) | 3h | P1 | - |
| 实现 ST_DESCRIPTIVE(描述性统计) | 4h | P1 | - |
| 统一 run_analysis() 入口 + 护栏函数 | 4h | P0 | 以上全部 |
预估总工时:28h(约 4 天)
5.2 阶段二:数据诊断器(Python + R 分工)
5.2.1 时机 A:Python DataProfile(上传时)
| 任务 | 预估 | 优先级 | 依赖 |
|---|---|---|---|
🆕 扩展 Tool C Python:新增 /api/dc/profile 端点 |
4h | P0 | - |
| 🆕 实现 DataProfileService 后端服务(调用 Tool C) | 3h | P0 | Python 端点 |
| 🆕 实现前端 DataProfile 展示卡片 | 3h | P0 | 后端服务 |
| 🆕 集成到 SSA 上传数据流程 | 2h | P0 | 前端卡片 |
5.2.2 时机 B:R JIT 护栏(执行前)
| 任务 | 预估 | 优先级 | 依赖 |
|---|---|---|---|
| 🆕 实现 R 正态性检验函数(Shapiro-Wilk) | 2h | P0 | - |
| 🆕 实现 R 方差齐性检验函数(Levene) | 2h | P0 | - |
| 🆕 集成 JIT 护栏到 WorkflowExecutorService | 2h | P0 | R 函数 |
| 🆕 实现自动方法降级逻辑 | 2h | P0 | JIT 护栏 |
预估总工时:20h(约 2.5 天)
5.3 阶段三:路径规划器(多工具流程规划)
| 任务 | 预估 | 优先级 | 依赖 |
|---|---|---|---|
| 设计 WorkflowPlan 数据结构 | 2h | P0 | - |
| 实现 WorkflowPlannerService(LLM 规划) | 6h | P0 | 数据结构 |
| 设计规划 Prompt(工具选择逻辑) | 4h | P0 | 7个工具定义 |
| 实现后端 /plan 接口返回多步骤计划 | 3h | P0 | Planner |
| 实现前端多步骤计划展示卡片 | 4h | P0 | 后端接口 |
预估总工时:19h(约 2.5 天)
5.4 阶段四:流程执行器(串联执行)
| 任务 | 预估 | 优先级 | 依赖 |
|---|---|---|---|
| 实现 WorkflowExecutorService | 6h | P0 | 所有 R 工具 |
| 实现步骤间结果传递逻辑 | 3h | P0 | Executor |
| 实现 SSE 实时进度推送 | 3h | P0 | Executor |
| 实现后端 /execute 接口支持多步骤 | 3h | P0 | SSE |
| 实现前端多步骤进度展示 | 4h | P0 | 后端接口 |
| 实现执行中断/重试机制 | 2h | P1 | 基础执行 |
预估总工时:21h(约 3 天)
5.5 阶段五:结论生成器增强
| 任务 | 预估 | 优先级 | 依赖 |
|---|---|---|---|
| 增强 Critic Prompt(多步骤结果整合) | 3h | P0 | - |
| 实现多步骤结果汇总逻辑 | 2h | P0 | Executor |
| 增强报告模板(方法学 + 局限性) | 2h | P1 | - |
预估总工时:7h(约 1 天)
6. 开发计划时间表
Week 1:R 工具扩展
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Day 1-2: ST_MANN_WHITNEY + ST_CHI_SQUARE
Day 3-4: ST_LOGISTIC_BINARY(复杂度最高)
Day 5: ST_T_TEST_PAIRED + ST_CORRELATION + ST_DESCRIPTIVE
Week 2:核心组件开发
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Day 1-2: 数据诊断器(ST_QUALITY_REPORT + DataQualityService)
Day 3-4: 路径规划器(WorkflowPlannerService + Prompt)
Day 5: 流程执行器(WorkflowExecutorService)
Week 3:联调与打磨
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Day 1-2: 前端多步骤 UI + SSE 实时进度
Day 3: 结论生成器增强
Day 4-5: 端到端联调测试 + Bug 修复
总预估:3 周(15 个工作日)
7. 验收标准
7.1 功能验收
| 验收项 | 标准 |
|---|---|
| 工具覆盖 | 7 个工具全部可用 |
| 数据诊断 | 上传数据后自动生成质量核查报告 |
| 流程规划 | LLM 能根据用户问题规划 2-7 步流程 |
| 串联执行 | 多步骤顺序执行,实时显示进度 |
| 结果整合 | 生成包含所有步骤结果的综合报告 |
7.2 场景验收(必须通过)
| 场景 | 预期流程 |
|---|---|
| "比较两组血压" | 描述统计 → T检验 → (非正态时)Mann-Whitney |
| "分析吸烟与肺癌的关系" | 描述统计 → 卡方检验 |
| "哪些因素影响糖尿病" | 描述统计 → 单因素Logistic → 多因素Logistic |
| "治疗前后血压变化" | 描述统计 → 配对T检验 |
| "年龄与血压相关吗" | 描述统计 → 相关分析 |
7.3 性能验收
| 指标 | 标准 |
|---|---|
| 数据诊断耗时 | < 5 秒(200行数据) |
| 流程规划耗时 | < 3 秒(LLM 响应) |
| 单步骤执行耗时 | < 10 秒 |
| 完整流程耗时 | < 60 秒(5 步骤) |
8. 风险与应对
| 风险 | 影响 | 应对策略 |
|---|---|---|
| LLM 规划不准确 | 工具选择错误 | 增加护栏校验 + 人工确认 |
| R 工具开发延期 | 阻塞后续开发 | 可并行开发,先做简单工具 |
| 多步骤执行失败 | 流程中断 | 实现重试机制 + 部分结果保存 |
| 结果传递复杂 | 步骤间数据格式不匹配 | 定义统一的 StepResult 结构 |
9. 🚨 工程规范(架构审查暗礁预警)
来源: 架构审查报告,避免开发过程中踩坑
9.1 暗礁 1:R 脚本输出裁剪(防止 LLM Token 超载)
问题:R 脚本返回的 JSON 可能包含原始全量数据(如残差数组、原始数据点),导致 LLM Token 超载、响应极慢甚至报错。
强制规范:
# ❌ 错误示例:返回原始数据
result <- list(
p_value = 0.032,
residuals = residuals(model), # 可能有几百个值!
raw_data = df # 原始数据!
)
# ✅ 正确示例:只返回精简结果
result <- list(
p_value = 0.032,
t_statistic = 2.15,
df = 48,
ci_lower = 0.5,
ci_upper = 2.3,
effect_size = 0.62,
# 图表只返回精简坐标点(最多 100 个点)
plot_data = head(plot_points, 100)
)
检查清单:
- 禁止返回
residuals、fitted.values等长数组 - 禁止返回原始数据
df或raw_data - 图表坐标点限制在 100 个以内
- JSON 输出大小不超过 50KB
9.2 暗礁 3:容错管道(支持部分成功)
问题:多步骤执行时,一步失败导致整个流程崩溃,用户丢失已成功的结果。
强制规范:
// WorkflowExecutorService 必须实现容错管道
interface StepResult {
step: number;
toolCode: string;
status: 'success' | 'warning' | 'error';
result?: any;
error?: {
code: string;
message: string;
userHint: string;
};
executionMs: number;
}
// ✅ 正确实现:每步结果独立保存
async executeWorkflow(workflow: WorkflowStep[]): Promise<StepResult[]> {
const results: StepResult[] = [];
for (const step of workflow) {
try {
const result = await this.executeStep(step);
results.push({ ...step, status: 'success', result });
} catch (error) {
// ⚠️ 关键:失败不中断,记录错误继续
results.push({
...step,
status: 'error',
error: this.formatError(error)
});
// 只有关键错误才中断
if (this.isCriticalError(error)) break;
}
}
return results; // 返回部分成功的结果
}
前端展示:
✅ 描述性统计 (执行成功, 点击查看)
✅ 正态性检验 (执行成功, 点击查看)
❌ T检验 (执行失败: 方差为0, 点击查看原因)
⏸️ Mann-Whitney (已跳过)
9.3 SSE 消息格式规范
强制格式:
interface SSEMessage {
type: 'step_start' | 'step_progress' | 'step_complete' | 'step_error' | 'workflow_complete';
step: number;
toolCode: string;
toolName: string;
status: 'running' | 'success' | 'error' | 'skipped';
message: string;
progress?: number; // 0-100,可选
result?: any; // 步骤完成时的结果
error?: {
code: string;
message: string;
userHint: string;
};
timestamp: string;
}
示例消息序列:
{"type":"step_start","step":1,"toolCode":"ST_DESCRIPTIVE","toolName":"描述性统计","status":"running","message":"正在生成描述性统计...","timestamp":"2026-02-20T10:00:00Z"}
{"type":"step_complete","step":1,"toolCode":"ST_DESCRIPTIVE","toolName":"描述性统计","status":"success","message":"描述性统计完成","result":{...},"timestamp":"2026-02-20T10:00:02Z"}
{"type":"step_start","step":2,"toolCode":"ST_T_TEST_IND","toolName":"独立样本T检验","status":"running","message":"正在执行正态性检验(JIT护栏)...","timestamp":"2026-02-20T10:00:02Z"}
{"type":"step_progress","step":2,"toolCode":"ST_T_TEST_IND","toolName":"独立样本T检验","status":"running","message":"正态性检验通过,执行T检验...","progress":50,"timestamp":"2026-02-20T10:00:03Z"}
{"type":"step_complete","step":2,"toolCode":"ST_T_TEST_IND","toolName":"独立样本T检验","status":"success","message":"T检验完成","result":{...},"timestamp":"2026-02-20T10:00:05Z"}
{"type":"workflow_complete","status":"success","message":"分析流程执行完成,共2个步骤","timestamp":"2026-02-20T10:00:05Z"}
前端渲染效果:
┌─────────────────────────────────────────────────────────────────┐
│ 执行日志 │
├─────────────────────────────────────────────────────────────────┤
│ [10:00:00] ▶ 正在生成描述性统计... │
│ [10:00:02] ✅ 描述性统计完成 │
│ [10:00:02] ▶ 正在执行正态性检验(JIT护栏)... │
│ [10:00:03] ▶ 正态性检验通过,执行T检验... │
│ [10:00:05] ✅ T检验完成 │
│ [10:00:05] 🎉 分析流程执行完成,共2个步骤 │
└─────────────────────────────────────────────────────────────────┘
10. Phase 2A 完成后的系统能力
┌─────────────────────────────────────────────────────────────────┐
│ Phase 2A 完成后的 SSA-Pro │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ✅ 用户能做什么: │
│ ────────────────────────────────────────────────────────────── │
│ • 上传数据,自动获得数据质量报告 │
│ • 用自然语言描述分析需求 │
│ • 系统自动规划多步骤分析流程 │
│ • 一键执行,实时看到每步进度 │
│ • 获得包含完整方法学说明的论文级报告 │
│ │
│ ✅ 系统具备的智能: │
│ ────────────────────────────────────────────────────────────── │
│ • 理解医学术语,翻译为统计需求 │
│ • 根据数据特征自动调整方法(正态→非参数) │
│ • 规划完整分析路径,而非单一方法 │
│ • 整合多步骤结果,生成综合结论 │
│ │
│ ✅ 后续扩展方向: │
│ ────────────────────────────────────────────────────────────── │
│ • 增加更多统计方法(复制工具模板即可) │
│ • 增加咨询模式(无数据也能获得 SAP) │
│ • 增加配置中台(量产工具管理) │
│ • Phase 3 靶向代码修改(架构已预埋) │
│ │
└─────────────────────────────────────────────────────────────────┘
11. 总结
Phase 2A 是 SSA-Pro MVP 的真正内核。
完成 Phase 2A 后:
- 5 大核心组件全部跑通
- 7 个统计方法可用
- 多工具流程规划能力上线
- 数据质量核查报告上线
- 智能化能力完成 85%+
后续工作(Phase 2B+)主要是:
- 扩展更多统计方法(复制粘贴)
- 增加咨询模式(锦上添花)
- 配置中台(量产效率)
这才是以终为始的 MVP 开发策略。