Files
AIclinicalresearch/docs/03-业务模块/SSA-智能统计分析/00-系统设计/SSA-Pro 工具体系规划方案(团队讨论稿).md
HaHafeng bf10dec4c8 docs(ssa): Complete intelligent dialogue and tool system architecture design
Architecture Design:
- Add intent recognition and dialogue architecture design (Intent Router + DataContext)
- Add tool system planning (4-layer 7-tool fusion solution: READ/INTERACT/THINK/ACT)
- Add 4-layer 7-tool implementation mechanism details (Conversation Layer LLM + Node.js orchestration)

Development Plan (v1.2):
- Create 6-phase development plan (134h/22 days) for intelligent dialogue system
- Add 8 architectural constraints (C1-C8): no Function Calling, Postgres-Only cache,
  streaming output, context guard, Zod dynamic validation
- Correct Session Blackboard to use CacheFactory (Postgres-Only, no Redis)

Status Updates:
- Update SSA module status: QPER complete + dialogue architecture design complete
- Update system-level status: add SSA architecture design milestone

Other:
- R tools minor fixes (chi_square, correlation, logistic_binary, mann_whitney, t_test_paired)
- Frontend AIA chat workspace style adjustment

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-22 10:05:14 +08:00

676 lines
26 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 工具体系规划方案
> **日期:** 2026-02-21
> **版本:** v3.1(融合方案 + 工程补强)
> **议题:** SSA 智能统计分析助手的工具定义与规划
> **背景:** 当前 100 个 R 执行工具是基础能力,但工具体系过于单一。需要规划更完整的工具层,让 LLM Agent 能够在分析的全生命周期中为用户服务。
> **结论:** 经过多轮讨论和团队评审,确定融合方案(四层 7 工具 + 反思编排 + Session 黑板 + Token 控制 + data_source 自动注入)
---
## 一、当前问题
**现状**:系统只有 R 执行工具(约 100 个),用户发消息 → 系统直接匹配统计方法 → 执行 R 脚本。
**问题**
- 用户无法与系统自由对话(每条消息都被当作分析请求)
- LLM 面对 100 个 R 工具会决策瘫痪(工具过载)
- 缺少"看数据""选方法""解读结果"等非执行类工具
- 分析全过程对用户不透明
---
## 二、工具设计原则
| 原则 | 含义 |
|------|------|
| **正交性** | 每个工具有唯一职责,不重叠 |
| **清晰触发** | LLM 看到工具名就知道何时该用 |
| **组合性** | 工具可按不同顺序组合,下游只依赖上游输出而非特定调用链 |
| **粒度适中** | 太粗=黑箱,太细=决策负担5-8 个工具是 LLM 的甜区 |
| **安全分级** | 只读工具随时调用,执行工具需确认 |
| **最小暴露** | 每个阶段只暴露完成当前任务所必需的工具子集 |
| **工具 vs 智能体** | 需要外部信息或改变外部世界 → 工具;纯 LLM 推理 → Prompt 职责,不封装为工具 |
---
## 三、融合方案总览
### 3.1 四层架构
```
┌─────────────────────────────────────────────────────────────┐
│ LLM Agent 决策层 │
│ 根据对话上下文 + 当前阶段,选择调用哪个工具 │
└──┬─────────────┬──────────────┬──────────────┬──────────────┘
│ │ │ │
▼ ▼ ▼ ▼
READ 层 INTERACT 层 THINK 层 ACT 层
只读,零风险 人机交互 生成方案 执行,有成本
随时可调用 零风险 需用户审查 需用户确认
```
### 3.2 工具清单7 个)
| 层 | # | 工具名 | 类型 | 一句话职责 |
|----|---|--------|------|-----------|
| **READ** | 1 | **get_data_overview** | 只读 | 数据全貌:统计摘要 + 缺失 + 变量分类 + PICO 自动推断 |
| **READ** | 2 | **get_variable_detail** | 只读 | 单变量深入:分布 + 异常值 + 唯一值(按需查看,控制 Token |
| **READ** | 3 | **method_consult** | 只读 | 方法咨询:推荐统计方法 + 理由 + 前提 + 替代方案 |
| **INTERACT** | 4 | **ask_user** | 交互 | 向用户提问/确认:渲染为选择卡片,用于 PICO 确认、方案审查 |
| **THINK** | 5 | **analysis_plan** | 生成 | 分析规划:有序步骤 + 参数 + 依赖(输出确定的 tool_code + params |
| **ACT** | 6 | **run_step** | 执行 | 傻瓜式 R 执行:接收 tool_code + params转发 R 引擎,返回结果 |
| **ACT** | 7 | **write_report** | 生成 | 论文级报告 / 结果解读双模式generate + interpret |
### 3.3 反思机制(不是工具,是编排层逻辑)
反思不定义为独立工具,而是系统编排机制,采用**双轨触发**
**自动触发(静默重试)**:当 `run_step` 返回硬性错误Column not found、NaN produced 等参数级错误),系统自动将错误日志注入 LLM 上下文LLM 修正参数后静默重试,最多 2 次。用户无感知。
**手动触发(用户驱动)**:当执行成功但用户不满意("能不能换个方法""把极值删了再跑一次"),意图路由器识别为 feedback 意图,将完整 QPER 记录注入 LLMLLM 分析问题后生成新的 `analysis_plan`
```
run_step 返回 error
→ 错误分类器
→ 可自愈(参数拼写、列名错误) → 自动修正 → 重试(最多 2 次)
→ 不可自愈(方法不适用、数据不足) → 报告用户 + 建议替代方案
用户表达不满
→ 意图路由器 → feedback 意图
→ 注入完整 QPER 记录 → LLM 分析原因 → 新的 analysis_plan → 重新执行
```
### 3.4 PICO 需求梳理(不是工具,是 Prompt 职责)
PICO 梳理在对话过程中自然完成,不需要专门的工具:
```
1. LLM 调用 get_data_overview → 返回中包含 AI 自动推断的 PICO 分类(置信度标记)
2. LLM 基于推断结果 + 临床知识 + System Prompt 组织 PICO 描述
3. LLM 调用 ask_user → 让用户确认/修正 PICO 分类
4. 确认后的 PICO 写入 Session 黑板,后续所有工具调用都携带
```
---
## 四、各工具详细定义
### 工具 1: get_data_overview
```
名称: get_data_overview
层级: READ只读零风险
触发时机: 数据上传后自动调用 / 用户询问数据概况时
底层实现: DataProfileServicePython
输入: {
session_id: string
}
输出: {
total_rows: number,
total_columns: number,
missing_overview: {
overall_rate: number,
columns_with_missing: [{ name, rate }]
},
categorical_vars: [{ name, levels_count, top_levels }],
continuous_vars: [{ name, mean, sd, min, max }],
id_like_vars: [string],
data_structure: "cross-sectional" | "longitudinal" | "repeated-measures" | "unknown",
sample_size_warning: string | null,
// PICO 自动推断AI 猜测,需用户通过 ask_user 确认后才生效)
pico_inference: {
population: string | null,
intervention_var: string | null,
intervention_levels: [string],
outcome_candidates: [{ var, type, confidence }],
design_guess: string | null,
confidence: number // 整体推断置信度
}
}
```
**设计要点**
- 输出一次性包含"下游需要的一切只读信息",满足组合性原则
- PICO 推断标记为 inference推断不是 confirmed确认后续必须经过 ask_user 确认
- 输出写入 Session 黑板缓存,后续工具直接读缓存,不重复调用
### 工具 2: get_variable_detail
```
名称: get_variable_detail
层级: READ只读零风险
触发时机: LLM 需要深入了解某个变量时(按需 drill-down
底层实现: DataProfileServicePython按需查询单列
输入: {
session_id: string,
variable_name: string
}
输出: {
name: string,
type: "continuous" | "categorical" | "ordinal" | "datetime" | "id",
missing_rate: number,
unique_values: number,
distribution: {
// 连续型: { mean, median, sd, q1, q3, min, max, histogram_bins }
// 分类型: { levels: [{ value, count, percentage }] }
},
outliers: { count, threshold },
sample_values: [...]
}
```
**设计要点**
- 解决大数据集 Token 爆炸 — LLM 先看 overview 概览,再按需 drill-down 单列
- 多次调用查看不同变量,每次只增加一列的 Token 消耗
### 工具 3: method_consult
```
名称: method_consult
层级: READ只读零风险
触发时机: 用户询问"应该用什么方法" / LLM 需要方法推荐时
底层实现: DecisionTableService 四维匹配 + LLM 推理补充
输入: {
research_question: string,
outcome_var: string,
predictor_vars: [string],
data_context: DataContext // 从 Session 黑板读取
}
输出: {
recommended_method: {
name: string, // "Independent Samples T-Test"
tool_code: string, // "ST_T_TEST_IND"
rationale: string,
prerequisites: [string], // ["正态性", "方差齐性"]
limitations: [string]
},
alternatives: [{
name, tool_code, when_to_use // 何时该用替代方案
}],
warnings: [string]
}
```
**设计要点**
- 当前 R 工具数量 7 个决策表四维匹配Goal × OutcomeType × PredictorType × Design已足够精准
- 未来工具扩展到 30+ 时,可在此处引入 RAG Top-K 检索替代/增强决策表
- 只返回推荐,不执行。用户通过 ask_user 确认后才进入 THINK 层
### 工具 4: ask_user
```
名称: ask_user
层级: INTERACT人机交互零风险
触发时机: LLM 需要用户确认或澄清时
前端渲染: 选择卡片(单选/多选)或输入框,嵌入对话流
输入: {
question: string,
context: string,
options: [{
id: string,
label: string,
description?: string
}],
allow_multiple: boolean,
allow_free_text: boolean
}
输出: {
selected_options: [string],
free_text: string | null
}
```
**设计要点**
- 强制 LLM 在不确定时向用户提问,而非自行猜测
- 贯穿全流程PICO 确认、变量角色确认、方法选择确认、方案审查
- 前端已有 ClarificationCard 组件基础,需要标准化接口
**实现方式(请求-响应模式,非 Function Calling 挂起)**
- 当前架构是 Node.js 编排层控制流程,不是 LLM 自主调用链
- ask_user 不需要"挂起 LLM 推理线程"Node.js 生成卡片 → 返回前端 → 用户点击 → 前端 POST 新请求 → Node.js 从 Session 黑板恢复上下文 → 继续流程
- 已有实现基础:`QueryService.generateClarificationCards()` + `/workflow/clarify` 路由
- 未来若演进为 LLM Function Calling 模式LLM 自主编排),需引入 Session 状态机 + 消息历史持久化Phase 4 预研)
### 工具 5: analysis_plan
```
名称: analysis_plan
层级: THINK生成方案需用户审查
触发时机: 用户确认需求和方法后
底层实现: FlowTemplateService 模板填充 + DecisionTableService 匹配
输入: {
confirmed_question: string,
confirmed_methods: [string], // 用户确认的 tool_code 列表
variable_mapping: {
outcome: string,
predictors: [string],
confounders?: [string],
group_var?: string
},
data_context: DataContext // 从 Session 黑板读取
}
输出: {
plan_id: string,
title: string,
steps: [{
step_id: string,
order: number,
tool_code: string, // 确定的 R 工具代码,如 "ST_T_TEST_IND"
tool_name: string,
description: string,
params: { ... }, // 已填好的参数run_step 直接透传
depends_on: [step_id],
expected_output: string
}],
estimated_duration: string,
notes: [string]
}
```
**设计要点**
- 输出包含确定的 `tool_code` 和完整 `params``run_step` 只需要傻瓜式执行
- 方法选择由 `method_consult`(决策表)+ 用户确认完成,`analysis_plan` 只负责编排顺序和填充参数
- 生成后展示给用户审查,用户确认后才进入 ACT 层
### 工具 6: run_step
```
名称: run_step
层级: ACT执行有计算成本
触发时机: 用户确认分析计划后,逐步执行
底层实现: WorkflowExecutorService → RClientService → R Plumber API
输入: {
step_definition: { // 直接来自 analysis_plan 输出的某一步
step_id: string,
tool_code: string, // 如 "ST_T_TEST_IND"
params: { ... }
},
session_id: string
}
输出: {
status: "success" | "warning" | "error",
result: {
blocks: ReportBlock[],
figures: [{ type, data, title }],
raw_output: { ... }
},
r_code: string,
warnings: [string],
error_message: string | null
}
```
**设计要点**
- **傻瓜式 API 转发器** — 不做任何方法选择决策,只接收 tool_code + params → 调用 R → 返回结果
- **data_source 自动注入** — LLM 和 analysis_plan 都不需要关心数据文件位置。Node.js 编排层自动从 Session 黑板取出 `dataOssKey`,生成预签名 URL注入 `{ type: 'oss', oss_url: signedUrl }` 后再 POST 给 R 服务(代码已实现:`WorkflowExecutorService.resolveDataSource()`
- 错误处理由编排层接管(双轨反思机制)
- warning 状态的结果正常展示R 引擎的 ggplot2 废弃警告等不影响结果)
### 工具 7: write_report
```
名称: write_report
层级: ACT生成有 LLM Token 成本)
触发时机: 步骤全部执行完成后 / 用户要求解读结果时
底层实现: ReflectionServiceLLM 结论生成)+ 槽位注入 + Zod 校验
输入: {
mode: "generate" | "interpret",
step_results: [StepResult], // generate 模式:全部步骤结果
data_context: DataContext,
user_question?: string // interpret 模式:用户的具体问题
}
输出: {
conclusion: {
summary: string,
detailed: string,
clinical_significance: string,
limitations: [string],
recommendations: [string]
},
export_formats: ["word", "markdown"]
}
```
**设计要点**
- **双模式**`generate` 生成完整论文级报告QPER R 层),`interpret` 解读已有结果(新增能力,支持 discuss 意图)
- generate 模式在全部 run_step 完成后自动触发
- interpret 模式在用户追问结果时触发("p 值说明什么""为什么置信区间这么宽"
---
## 五、Session 黑板(状态管理)
### 5.1 为什么需要 Session 黑板
7 个工具本身是无状态函数。要让它们协同工作,需要一个后端"会话黑板"Session Context Blackboard在工具之间传递上下文。
**核心规则:切勿让 LLM 反复重新生成上下文。** `get_data_overview` 的输出缓存到 Session后续 `analysis_plan` / `run_step` / `write_report` 直接从 Session 读取,不重新调用。
### 5.2 Session 黑板结构
```typescript
interface SessionBlackboard {
sessionId: string;
uploadedAt: string;
// get_data_overview 的缓存输出
dataOverview: DataOverviewResult | null;
// 用户确认的 PICO经过 ask_user 确认后写入)
confirmedPico: {
population: string;
intervention: { var: string; levels: string[] };
outcomes: [{ var: string; type: string; role: string }];
confirmed: boolean;
} | null;
// 变量字典(对话中逐步丰富)
variableDictionary: Array<{
name: string;
label: string;
type: string;
role: string;
confirmed: boolean;
}>;
// 当前分析计划analysis_plan 输出后写入)
currentPlan: AnalysisPlanResult | null;
// 数据文件信息上传时写入run_step 自动注入 data_source 用)
dataOssKey: string | null;
// 执行结果run_step 每完成一步追加)
// ⚠️ Token 控制:只保留当前生效计划的结果,废弃试错结果
stepResults: StepResult[];
// 结论报告write_report 输出后写入)
report: ReportResult | null;
// QPER 执行记录(反思机制需要)
// ⚠️ Token 控制:注入 LLM 前只保留最近 3 次关键事件,做摘要压缩
qperTrace: Array<{
timestamp: string;
tool: string;
input: any;
output: any;
}>;
}
```
### 5.3 Token 控制策略
Session 黑板会随着对话和试错不断膨胀。如果全量注入 LLM会导致 Token 爆炸和注意力涣散。
**规则 1stepResults 只保留当前生效计划的结果**
- 用户确认新的 analysis_plan 后,清空旧的 stepResults
- 反思迭代产生新方案时,旧方案的结果标记为 `deprecated`,不注入 LLM
**规则 2qperTrace 滑动窗口**
- 注入 LLM 前,只保留最近 3 次关键事件tool 调用 + 错误 + 修复动作)
- 早期的 trace 条目压缩为一行摘要(如"第 1 轮T 检验成功"
**规则 3R 引擎原始输出不入 LLM**
- stepResults 中的 `raw_output` 只存储在黑板中供前端展示
- 注入 LLM 时只提取结构化摘要关键数值、p 值、置信区间),不灌入完整日志
### 5.4 数据流
```
get_data_overview
→ 输出写入 blackboard.dataOverview
→ LLM 基于输出推断 PICO
ask_user确认 PICO
→ 用户选择写入 blackboard.confirmedPico
method_consult
→ 读取 blackboard.dataOverview + confirmedPico
→ 返回推荐方法(不写入 blackboard只是对话中的回复
analysis_plan
→ 读取 blackboard 全部上下文
→ 输出写入 blackboard.currentPlan
run_step ×N
→ 读取 blackboard.currentPlan 中的 step 定义
→ 每步输出追加到 blackboard.stepResults
write_report
→ 读取 blackboard.stepResults + dataOverview
→ 输出写入 blackboard.report
反思(自动/手动)
→ 读取 blackboard.qperTrace完整记录
→ 生成新的 analysis_plan → 覆盖 blackboard.currentPlan
```
### 5.5 持久化策略
| 层级 | 策略 | 理由 |
|------|------|------|
| 内存缓存 | 当前会话有效,进程重启丢失 | 快速读写,满足当前需求 |
| 数据库持久化 | 跨会话保留,支持历史回溯 | 后续扩展,用于分析记录和审计 |
| 当前实现 | 先用内存缓存(已有 DataProfileService 缓存机制) | 快速落地 |
---
## 六、安全梯度与阶段性工具可见性
### 6.1 安全梯度
```
READ 层: get_data_overview / get_variable_detail / method_consult
→ 零风险,调用 100 次也无副作用
→ 对话阶段主要使用,支持自由探索
→ LLM 不确定时的安全默认选择
INTERACT 层: ask_user
→ 零风险,让用户参与决策
→ 贯穿全流程PICO 确认、方案审查、结果追问
THINK 层: analysis_plan
→ 低风险,只生成方案不执行
→ 用户审查确认后才进入 ACT 层
ACT 层: run_step / write_report
→ 有成本R 计算资源、LLM Token
→ 产生真实结果,但可重新执行
```
### 6.2 阶段性工具可见性
不同阶段向 LLM 暴露不同的工具子集:
| 阶段 | 可见工具 | 隐藏工具 |
|------|---------|---------|
| **数据探索** | get_data_overview, get_variable_detail, ask_user | method_consult, analysis_plan, run_step, write_report |
| **需求梳理** | 全部 READ + ask_user | analysis_plan, run_step, write_report |
| **方案规划** | method_consult, ask_user, analysis_plan | run_step, write_report |
| **分析执行** | run_step, ask_user | 其他 |
| **报告生成** | write_report, ask_user | 其他 |
| **自由对话** | 全部 READ + INTERACT | THINK + ACT |
---
## 七、典型调用链
### 场景 1完整分析旅程
```
用户上传数据
→ get_data_overview [自动] → 写入 Session 黑板
→ "您的数据有 200 行 15 列,推断为横截面..." [LLM 回复]
→ 用户: "帮我看看 BMI 这个变量"
→ get_variable_detail("bmi") [LLM 调用]
→ ask_user("推断结局变量为 bp_change [LLM 调用]
分组变量为 group是否正确")
→ 用户确认 → 写入 Session 黑板 confirmedPico
→ 用户: "帮我比较两组血压差异"
→ method_consult(...) [LLM 调用,从 Session 读上下文]
→ "建议独立样本 T 检验,理由..." [LLM 回复]
→ ask_user("确认使用 T 检验分析?") [LLM 调用]
→ 用户确认
→ analysis_plan(...) [LLM 调用] → 写入 Session 黑板
→ "分析计划步骤1 描述统计 → 步骤2 T 检验" [展示给用户]
→ 用户: "确认,开始执行"
→ run_step(step_1) [逐步执行] → 追加到 Session
→ run_step(step_2) [逐步执行] → 追加到 Session
→ write_report(mode: "generate") [生成报告] → 写入 Session
```
### 场景 2用户只是了解数据
```
用户: "这个数据有什么特点?"
→ get_data_overview [LLM 调用]
→ "您的数据包含 200 例患者15 个变量..." [LLM 基于缓存回复]
用户: "age 的分布怎样?"
→ get_variable_detail("age") [LLM 调用]
用户: "哪些变量缺失比较严重?"
→ [LLM 从 Session 黑板缓存直接回答,无需再调工具]
```
### 场景 3方法咨询
```
用户: "BMI 和血压有关系吗?应该怎么分析?"
→ method_consult(...) [LLM 调用]
→ "建议 Pearson 相关分析,因为两个变量均为连续型..."
→ ask_user("是否需要控制混杂因素?",
options: ["不需要", "控制年龄", "控制年龄和性别"])
→ 用户选择后 LLM 更新建议
```
### 场景 4结果不满意反思迭代
```
用户: "结果不对p 值不应该这么大"
→ [编排层] 注入完整 qperTrace 到 LLM 上下文
→ LLM: "可能原因:样本量不足导致检验效能低..."
→ ask_user("建议1)换用非参数检验 2)排除极值后重新分析 3)合并亚组")
→ 用户选择 "换用非参数检验"
→ analysis_plan(...) [生成新方案]
→ run_step(...) [重新执行]
→ write_report(mode: "generate") [新报告]
```
### 场景 5执行出错自动修正
```
→ run_step(step_2) [执行]
→ R 返回 error: "Column 'Blood_Pressure' not found"
→ [编排层] 错误分类 → 可自愈(列名拼写)
→ [编排层] 自动注入错误 + 数据概览 → LLM 修正参数bp_change
→ run_step(step_2, 修正后参数) [静默重试]
→ 成功 → 用户无感知
```
---
## 八、R 工具路由策略
### 当前方案:决策表四维匹配
100 个 R 脚本通过 `run_step` 调用时,方法选择在 `method_consult` / `analysis_plan` 阶段已确定:
```
用户需求 → method_consult 调用 DecisionTableService
→ 四维匹配Goal × OutcomeType × PredictorType × Design
→ 命中规则primaryTool = ST_T_TEST_IND, fallbackTool = ST_MANN_WHITNEY
→ 用户确认 → analysis_plan 填充参数 → run_step 傻瓜式执行
```
决策表(`decision_tables.json`)当前有 ~10 条规则,覆盖 7 个 R 工具。规则驱动的确定性匹配比语义检索更精准、更可控。
### 未来扩展RAG 增强
当 R 工具扩展到 30+ 且四维规则无法穷举时,可在 `method_consult` 内部增加 RAG 层:
```
method_consult 内部路由:
1. 先走决策表匹配 → 命中则直接返回
2. 未命中 → pgvector 语义检索 Top-5 工具 → LLM 从中选择 → 返回推荐
```
当前阶段不需要实现 RAG决策表已足够。
---
## 九、与意图识别架构的关系
工具体系与意图路由器详见《SSA-Pro 意图识别与对话架构设计》)配套工作:
```
意图路由器输出 可见工具 典型调用
───────────── ────────── ────────
chat自由对话 → READ + INTERACT data_overview / variable_detail
explore数据探索 → READ + INTERACT data_overview / variable_detail / ask_user
consult方法咨询 → READ + INTERACT method_consult / ask_user
analyze分析执行 → THINK + ACT + INTERACT analysis_plan → run_step → write_report
discuss结果讨论 → ACT(write_report) + READ write_report(interpret)
feedback不满意 → 反思编排 → THINK + ACT analysis_plan → run_step → write_report
```
**两个设计合在一起**
- **意图路由器**决定"用户想干什么"→ 控制工具可见性
- **工具体系**决定"系统能干什么"→ 提供能力边界
- **Session 黑板**贯穿全流程 → 所有工具共享上下文,避免重复生成
---
## 十、与现有 QPER 代码的映射
| 工具 | 现有组件 | 改造程度 |
|------|---------|---------|
| get_data_overview | DataProfileService已有 | **低** — 封装为 Tool 接口 + 新增 PICO 推断字段 |
| get_variable_detail | DataProfileService需扩展 | **中** — 新增单列查询 API |
| method_consult | DecisionTableService已有 | **中** — 封装为 Tool 接口 + LLM 推理补充 |
| ask_user | ClarificationCard 前端组件(已有) | **低** — 标准化后端接口 |
| analysis_plan | Q 层 + P 层FlowTemplateService 已有) | **低** — 封装为 Tool 接口 |
| run_step | E 层 WorkflowExecutorService已有 | **已有** — 当前就是傻瓜式执行 |
| write_report | R 层 ReflectionService已有 | **中** — 新增 interpret 模式 |
| Session 黑板 | DataProfileService 缓存(部分已有) | **中** — 扩展为完整 Blackboard |
| 反思编排 | 无 | **新增** — 错误分类器 + 自动重试 + 手动触发 |
**核心结论QPER 四层的底层实现基本可复用,主要工作是封装 Tool 接口 + 新增 READ/INTERACT 层 + Session 黑板 + 意图路由。**
---
## 十一、落地路线
| Phase | 工作内容 | 依赖现有组件 | 核心产出 |
|-------|---------|-------------|---------|
| **Phase 1** | **READ + INTERACT 层** | DataProfileService | get_data_overview + get_variable_detail + ask_user + Session 黑板 |
| | 目标:让系统能陪用户聊天,能看懂数据 | | 即使不能跑分析,用户也能感受到 AI 的价值 |
| **Phase 2** | **意图路由器 + method_consult** | DecisionTableService | 意图分类 + 方法咨询 + 阶段性工具可见性 |
| | 目标:系统能区分对话/探索/咨询/分析意图 | | |
| **Phase 3** | **THINK + ACT 对接** | QPER 全链路 | analysis_plan + run_step + write_report 封装为 Tool 接口 |
| | 目标:把已有 QPER 挂载到新工具体系上 | | |
| **Phase 4** | **反思编排 + 高级特性** | 全部 | 双轨反思 + write_report interpret 模式 + 持久化 |
---
**附:参考文档**
- `00-系统设计/SSA-Pro 意图识别与对话架构设计.md` — 意图路由器设计
- `00-系统设计/SSA-Pro 严谨型智能统计分析架构设计方案V4.md` — QPER 架构
- `00-系统设计/SSA-Pro 理想状态与智能化愿景设计.md` — 智能化愿景
- `06-开发记录/J技术报告审核评估与建议/SSA-Pro 智能体边界与工具生态规划报告.md` — 团队架构评审