Files
AIclinicalresearch/docs/03-业务模块/SSA-智能统计分析/04-开发计划/07-Phase2A-智能化核心开发计划.md
HaHafeng 428a22adf2 feat(ssa): Complete Phase 2A frontend integration - multi-step workflow end-to-end
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>
2026-02-20 23:09:27 +08:00

756 lines
37 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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医学术语 → 统计术语 │ │
│ │ - PlannerGoal/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_WHITNEYMann-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 |
| **护栏** | 事件数 / 自变量数 ≥ 10EPV 规则共线性检测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 接口
```typescript
// 新增接口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 护栏接口
```typescript
// 在执行核心工具前调用
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清晰结构
```prisma
/// 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 扩展字段
```prisma
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_WHITNEYMann-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 时机 APython DataProfile上传时
| 任务 | 预估 | 优先级 | 依赖 |
|------|------|--------|------|
| 🆕 扩展 Tool C Python新增 `/api/dc/profile` 端点 | 4h | P0 | - |
| 🆕 实现 DataProfileService 后端服务(调用 Tool C | 3h | P0 | Python 端点 |
| 🆕 实现前端 DataProfile 展示卡片 | 3h | P0 | 后端服务 |
| 🆕 集成到 SSA 上传数据流程 | 2h | P0 | 前端卡片 |
#### 5.2.2 时机 BR 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 | - |
| 实现 WorkflowPlannerServiceLLM 规划) | 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 1R 工具扩展
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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 暗礁 1R 脚本输出裁剪(防止 LLM Token 超载)
**问题**R 脚本返回的 JSON 可能包含原始全量数据(如残差数组、原始数据点),导致 LLM Token 超载、响应极慢甚至报错。
**强制规范**
```r
# ❌ 错误示例:返回原始数据
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容错管道支持部分成功
**问题**:多步骤执行时,一步失败导致整个流程崩溃,用户丢失已成功的结果。
**强制规范**
```typescript
// 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 消息格式规范
**强制格式**
```typescript
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;
}
```
**示例消息序列**
```json
{"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 开发策略。**