feat(asl/extraction): Complete Tool 3 M1+M2 - skeleton pipeline and HITL workbench

M1 Skeleton Pipeline:
- Scatter-dispatch + Aggregator polling pattern (PgBoss)
- PKB ACL bridge (PkbBridgeService -> PkbExportService DTOs)
- ExtractionSingleWorker with DeepSeek-V3 LLM extraction
- PermanentExtractionError for non-retryable failures
- Phantom Retry Guard (idempotent worker)
- 3-step minimal frontend (Setup -> Progress -> Workbench)
- 4 new DB tables (extraction_templates, project_templates, tasks, results)
- 3 system templates seed (RCT, Cohort, QC)
- M1 integration test suite

M2 HITL Workbench:
- MinerU VLM integration for high-fidelity table extraction
- XML-isolated DynamicPromptBuilder with flat JSON output template
- fuzzyQuoteMatch validator (3-tier confidence scoring)
- SSE real-time logging via ExtractionEventBus
- Schema-driven ExtractionDrawer (dynamic field rendering from template)
- Excel wide-table export with flattenModuleData normalization
- M2 integration test suite

Critical Fixes (data normalization):
- DynamicPromptBuilder: explicit flat key-value output format with example
- ExtractionExcelExporter: handle both array and flat data formats
- ExtractionDrawer: schema-driven rendering instead of hardcoded fields
- ExtractionValidator: array-format quote verification support
- SSE route: Fastify register encapsulation to bypass auth for EventSource
- LLM JSON sanitizer: strip illegal control chars before JSON.parse

Also includes: RVW stats verification spec, SSA expert config guide

Tested: M1 pipeline test + M2 HITL test + manual frontend verification
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-25 18:29:20 +08:00
parent 371fa53956
commit f0736dbca1
40 changed files with 6138 additions and 48 deletions

View File

@@ -1,15 +1,14 @@
# AI智能文献模块 - 当前状态与开发指南
> **文档版本:** v2.1
> **文档版本:** v2.2
> **创建日期:** 2025-11-21
> **维护者:** AI智能文献开发团队
> **最后更新:** 2026-02-24 🆕 **工具 3 V2.0 开发计划升级至 v2.0(散装派发 + Aggregator 架构9 条研发红线)**
> **最后更新:** 2026-02-25 🆕 **工具 3 M1 骨架管线 + M2 HITL 工作台开发完成!**
> **重大进展:**
> - 🆕 2026-02-24工具 3 V2.0 架构升级Fan-out → 散装派发 + Aggregator 轮询收口,通用模式指南 v1.1 沉淀
> - 2026-02-23:工具 3 V2.0 开发计划 v1.5 完成6 轮架构审查 + 5 份文档体系
> - 🆕 2026-02-23V2.0 核心功能完成SSE 流式架构 + 段落化思考日志 + 引用链接可见化
> - 🆕 2026-02-22V2.0 前后端联调完成!瀑布流 UI + Markdown 渲染 + Word 导出 + 中文数据源测试
> - 🆕 2026-02-22V2.0 开发计划确认 + Unifuncs API 网站覆盖测试完成
> - 🆕 2026-02-25**工具 3 M1+M2 开发完成!** 散装派发+Aggregator 全链路、MinerU 集成、XML Prompt 隔离、fuzzyQuoteMatch 溯源、HITL 审核抽屉、Excel 导出、数据归一化修复
> - 2026-02-24:工具 3 V2.0 架构升级Fan-out → 散装派发 + Aggregator 轮询收口,通用模式指南 v1.1 沉淀
> - 2026-02-23V2.0 核心功能完成SSE 流式架构 + 段落化思考日志 + 引用链接可见化
> - 2026-02-22V2.0 前后端联调完成!瀑布流 UI + Markdown 渲染 + Word 导出 + 中文数据源测试
> - 2026-01-18智能文献检索DeepSearchMVP完成 - unifuncs API 集成
> **文档目的:** 反映模块真实状态,帮助新开发人员快速上手
@@ -33,15 +32,17 @@
AI智能文献模块是一个基于大语言模型LLM的文献筛选系统用于帮助研究人员根据PICOS标准自动筛选文献。
### 当前状态
- **开发阶段**:🎉 V2.0 Deep Research 核心功能完成 + 🆕 工具 3 开发计划 v2.0 就绪
- **开发阶段**:🎉 工具 3 M1+M2 开发完成M3 待启动
- **已完成功能**
- ✅ 标题摘要初筛Title & Abstract Screening- 完整流程
- ✅ 全文复筛后端Day 2-5- LLM服务 + API + Excel导出
-**智能文献检索DeepSearchV1.x MVP** - unifuncs API 集成
-**Unifuncs API 网站覆盖测试** - 18 站点实测9 个一级可用
-**🎉 Deep Research V2.0 核心功能** — SSE 流式架构 + 瀑布流 UI + HITL + Word 导出
- **开发计划就绪(待编码)**
- 📋 **🆕 工具 3 全文智能提取工作台 V2.0** — 开发计划 v2.0 完成(散装派发 + Aggregator 架构9 条研发红线M1/M2/M3 三阶段,预计 22 天)
- **🆕 工具 3 M1 骨架管线** — 散装派发+Aggregator 全链路、PKB ACL 防腐层、DeepSeek-V3 纯文本盲提、3 步极简前端
- **🆕 工具 3 M2 HITL 工作台** — MinerU VLM 表格集成、XML Prompt 隔离、fuzzyQuoteMatch 溯源、SSE 实时日志、审核抽屉、Excel 宽表导出
- **待开发**
- 📋 **工具 3 M3 动态模板引擎** — 自定义字段 CRUD、Prompt 注入防护、E2E 测试
- **V2.0 已完成**
-**SSE 流式架构**:从 create_task/query_task 轮询改为 OpenAI Compatible SSE 流,实时推送 AI 思考过程
-**LLM 需求扩写**DeepSeek-V3 将粗略输入扩写为结构化检索指令书PICOS + MeSH
@@ -128,11 +129,11 @@ frontend-v2/src/modules/asl/
**通用能力指南**`docs/02-通用能力层/04-DeepResearch引擎/01-Unifuncs DeepSearch API 使用指南.md`
### 🆕 工具 3 全文智能提取工作台 V2.02026-02-24 开发计划 v2.0 完成,待编码
### 🆕 工具 3 全文智能提取工作台 V2.02026-02-25 M1+M2 开发完成
**功能定位:** 批量读取 PDF 全文 → 动态模板驱动 AI 结构化提取 → 人工 HITL 审核 → Excel 导出。是 ASL 证据整合 V2.0 三大工具中最复杂的一个。
**开发计划状态:**v2.0 定稿(经 8+ 轮架构审查 + 架构转型Fan-out → 散装派发 + Aggregator
**开发状态:**M1 骨架管线完成 ✅ M2 HITL 工作台完成 📋 M3 动态模板引擎待启动
**v2.0 架构转型2026-02-24**
@@ -176,11 +177,36 @@ frontend-v2/src/modules/asl/
**里程碑规划:**
| 里程碑 | 核心交付 | 时间 |
|--------|---------|------|
| M1 骨架管线 | 散装派发 + Aggregator 全链路 + PKB ACL + 纯文本盲提 + 极简前端 | Week 1 |
| M2 HITL 工作台 | MinerU + 审核抽屉 + SSE 日志 + Excel | Week 2-3 |
| M3 动态模板引擎 | 自定义字段 + Prompt 注入防护 + E2E 测试 | Week 4 |
| 里程碑 | 核心交付 | 时间 | 状态 |
|--------|---------|------|------|
| M1 骨架管线 | 散装派发 + Aggregator 全链路 + PKB ACL + 纯文本盲提 + 极简前端 | Week 1 | ✅ 完成 |
| M2 HITL 工作台 | MinerU + XML Prompt 隔离 + fuzzyQuoteMatch + SSE 日志 + 审核抽屉 + Excel 导出 | Week 2-3 | ✅ 完成 |
| M3 动态模板引擎 | 自定义字段 + Prompt 注入防护 + E2E 测试 | Week 4 | 📋 待启动 |
**M1+M2 已完成的核心代码组件:**
| 组件 | 文件 | 说明 |
|------|------|------|
| 散装派发 API | `ExtractionService.ts` | API 层直接 insert N 个独立 Job |
| 单文档 Worker | `ExtractionSingleWorker.ts` | PdfPipeline → DynamicPrompt → LLM → Validator |
| Aggregator 轮询 | `ExtractionAggregator.ts` | 定时 groupBy 收口 + 僵尸清理 |
| PKB 防腐层 | `PkbBridgeService.ts``PkbExportService.ts` | ACL 解耦DTO 传输 |
| PDF 管线 | `PdfProcessingPipeline.ts` | MinerU VLM 表格 + PKB extractedText fallback |
| XML Prompt | `DynamicPromptBuilder.ts` | 扁平 JSON 输出模板 + HIGH_FIDELITY_TABLES 优先 |
| Quote 溯源 | `ExtractionValidator.ts` | fuzzyQuoteMatch 三档置信度 |
| SSE 事件 | `ExtractionEventBus.ts` | 内存事件总线 + 历史回放 |
| Excel 导出 | `ExtractionExcelExporter.ts` | flattenModuleData 归一化 + 双行表头宽表 |
| 模板服务 | `TemplateService.ts` | 3 套系统模板RCT/Cohort/QC |
| 审核抽屉 | `ExtractionDrawer.tsx` | Schema-driven 动态字段渲染 |
| 审核工作台 | `ExtractionWorkbench.tsx` | 全宽表格 + 700px Drawer |
**M2 关键修复记录2026-02-25**
- 🔧 DynamicPromptBuilderLLM 返回数组格式 → 重写 Prompt 明确要求扁平 key-value 格式
- 🔧 ExcelExporter新增 `flattenModuleData` 归一化,兼容 `[{key,value,quote}]` 数组格式
- 🔧 ExtractionDrawer从硬编码字段改为 schema-driven 动态渲染
- 🔧 ExtractionValidator兼容数组格式 quote 验证
- 🔧 SSE 路由Fastify 插件封装隔离SSE 端点绕过 authenticate
- 🔧 LLM JSON 清洗sanitize 非法控制字符防止 JSON.parse 崩溃
**9 条研发红线**:详见架构总纲文档 M1 红线表。
@@ -188,6 +214,37 @@ frontend-v2/src/modules/asl/
- 🚀 `docs/02-通用能力层/散装派发与轮询收口任务模式指南.md`v1.1Level 2 Cookbook
- 📖 `docs/02-通用能力层/分布式Fan-out任务模式开发指南.md`v1.2Level 3 参考)
**工具 3 新增 API 端点:**
```http
GET /api/v1/asl/extraction/templates #
POST /api/v1/asl/extraction/templates/clone #
POST /api/v1/asl/extraction/tasks #
GET /api/v1/asl/extraction/tasks/:taskId/status # groupBy
GET /api/v1/asl/extraction/tasks/:taskId/results #
GET /api/v1/asl/extraction/results/:resultId # schema
PUT /api/v1/asl/extraction/results/:resultId/review # approved/rejected
GET /api/v1/asl/extraction/tasks/:taskId/stream # SSE
GET /api/v1/asl/extraction/tasks/:taskId/export # Excel
GET /api/v1/asl/extraction/pkb/knowledge-bases # PKB
GET /api/v1/asl/extraction/pkb/knowledge-bases/:kbId/documents # PKB
```
**工具 3 新增前端路由:**
```
/literature/extraction/setup # Step 1: 配置与启动
/literature/extraction/progress/:taskId # Step 2: 进度监控
/literature/extraction/workbench/:taskId # Step 3: 审核工作台
```
**工具 3 新增数据库表asl_schema**
| 表名 | 说明 |
|------|------|
| `extraction_templates` | 系统内置模板RCT/Cohort/QC |
| `extraction_project_templates` | 项目模板(克隆自系统模板,含 outcomeType/customFields |
| `extraction_tasks` | 提取任务idempotencyKey 幂等) |
| `extraction_results` | 单文档提取结果extractedData JSON + quoteVerification + reviewStatus |
### 智能文献检索 DeepSearch V1.x2026-01-18 MVP完成
**功能概述:**
@@ -1434,28 +1491,28 @@ Drawer打开: <50ms
## 🎯 下一步开发计划
### 当前(Deep Research V2.0 优化
1.**端到端回归测试**:完整流程测试(创建→扩写→确认→执行→结果→导出)
2.**用户体验打磨**:加载动画、错误提示、边界情况处理
3.**中文检索优化**:中英文混合检索策略调优(建议分批搜索)
4.**导出格式完善**Word 模板美化、更多导出格式
### 当前(工具 3 M3 动态模板引擎
1.**M3-1自定义字段 CRUD**:用户可在项目模板上增删改自定义提取字段
2.**M3-2Prompt 注入防护**:用户输入的字段 description 经过清洗再注入 Prompt
3.**M3-3E2E 完整测试**:从模板配置 → 提取 → 审核 → 导出的端到端自动化测试
4.**M3-4模板版本管理**:支持锁定/解锁、版本快照
### 工具 3 后续优化
1.**RoB 自动评价增强**Prompt 引导 LLM 基于方法学描述主动评价偏倚风险
2.**study_id 格式标准化**:强制 "FirstAuthor Year" 格式,后处理校验
3.**outcomes 模板匹配**:根据文献内容自动推荐 survival/continuous/dichotomous
4.**缺失字段补充**country、inclusion_criteria、primary_outcome 等M3 自定义字段支持)
### 短期优化
1.Prompt 优化(需求扩写质量提升)
2. ⏳ 搜索历史管理(历史任务列表、重新搜索
3.全文复筛前端 UI 开发
4. ⏳ 标题摘要初筛 Prompt 优化(准确率 60% → 85%+
1.Deep Research V2.0 端到端回归测试
2. ⏳ 搜索历史管理(历史任务列表)
3.标题摘要初筛 Prompt 优化(准确率 60% → 85%+
### 中期Month 2
1.全文复筛功能完善
2.证据图谱可视化
3.用户自定义数据源
4.生产环境部署
### 长期Month 3+
1. ⏳ 多语言检索策略自动优化
2. ⏳ 批量文献检索
3. ⏳ 成本控制和监控
### 中期Month 2-3
1.工具 4网状 Meta 分析)开发
2.工具 5证据质量评价 GRADE开发
3.生产环境部署
4.证据图谱可视化
---
@@ -1465,14 +1522,15 @@ Drawer打开: <50ms
---
**最后更新**2026-02-23Deep Research V2.0 核心功能完成
**最后更新**2026-02-25工具 3 M1+M2 开发完成 + 数据归一化修复
**文档状态**:✅ 反映真实状态
**下次更新时机**V2.0 端到端回归测试完成 或 全文复筛前端开发启动
**下次更新时机**工具 3 M3 动态模板引擎开发完成
**本次更新内容**v2.0
-更新当前状态V2.0 核心功能开发完成SSE 流式 + 瀑布流 UI + Word 导出)
-新增 V2.0 完整架构表、技术决策、API 端点、关键文件列表
-新增 5 个精选数据源配置(替代 9 站全量展示)
-更新下一步开发计划V2.0 优化 + 短期/中期/长期
**本次更新内容**v2.2
-工具 3 M1 骨架管线完成:散装派发+Aggregator、PKB ACL、纯文本盲提、3步极简前端
-工具 3 M2 HITL 工作台完成MinerU 集成、XML Prompt 隔离、fuzzyQuoteMatch、SSE 日志、审核抽屉、Excel 导出
-M2 关键修复DynamicPromptBuilder 扁平输出、ExcelExporter 数据归一化、Schema-driven 前端
-新增工具 3 API 端点12 个、前端路由3 个、数据库表4 个
- ✅ 更新下一步计划M3 动态模板引擎 + RoB 增强 + 后续工具 4/5

View File

@@ -0,0 +1,479 @@
# RVW V2.0 统计验证规则说明书
> **文档目的:** 供统计学专家评审和确认
> **版本:** v1.0
> **日期:** 2026-02-18
> **适用场景:** 医学期刊论文表格数据验证
---
## 目录
1. [概述](#概述)
2. [L1 算术验证规则](#l1-算术验证规则)
3. [L2 统计验证规则](#l2-统计验证规则)
4. [L2.5 一致性取证规则](#l25-一致性取证规则)
5. [容错阈值设置](#容错阈值设置)
6. [待评审问题清单](#待评审问题清单)
---
## 概述
### 验证层级架构
| 层级 | 名称 | 目标 | 复杂度 |
|------|------|------|--------|
| **L1** | 算术验证 | 检查基础计算(加减乘除)是否正确 | 低 |
| **L2** | 统计验证 | 逆向验证统计检验结果是否合理 | 中 |
| **L2.5** | 一致性取证 | 启发式规则,发现潜在数据问题 | 高 |
### 技术依赖
- **scipy.stats**用于统计计算t 分布、卡方分布、正态分布)
- **python-docx**Word 文档表格提取
- **正则表达式**:数据格式识别
---
## L1 算术验证规则
### 规则 L1-1百分比计算验证
**应用场景:** 分类变量描述统计(如 n (%) 格式)
**规则描述:**
对于格式为 `n (p%)` 的单元格,验证:
$$
\text{calculated\_percent} = \frac{n}{N} \times 100
$$
其中 N 为该列或该组的总数。
**判定条件:**
| 条件 | 判定 |
|------|------|
| `|reported_percent - calculated_percent| > 0.1%` | ❌ Error |
| `|reported_percent - calculated_percent| ≤ 0.1%` | ✅ Pass |
**示例:**
| 原始数据 | N | 报告值 | 计算值 | 判定 |
|---------|---|--------|--------|------|
| 45 (50.0%) | 90 | 50.0% | 50.0% | ✅ Pass |
| 45 (52.0%) | 90 | 52.0% | 50.0% | ❌ Error (差 2%) |
**识别模式(正则表达式):**
```
(\d+(?:\.\d+)?)\s*\(\s*(\d+(?:\.\d+)?)\s*%?\s*\)
```
**N 值获取策略:**
1. 首先从表头识别标记为 "n"、"N"、"Total"、"合计" 的列
2. 其次检查同行中是否有总数列
3. 最后尝试从上下文推断
---
### 规则 L1-2合计行验证
**应用场景:** 表格中的 Total/Sum/合计 行
**规则描述:**
对于标记为 "Total"、"Sum"、"合计"、"总计" 的行,验证该行的每个数值列是否等于上方各行之和。
$$
\text{Total}_{\text{col}} = \sum_{i=1}^{n-1} \text{Value}_{i, \text{col}}
$$
**判定条件:**
| 条件 | 判定 |
|------|------|
| `|reported_total - calculated_sum| > 0.5` | ❌ Error |
| `|reported_total - calculated_sum| ≤ 0.5` | ✅ Pass |
**示例:**
| 分组 | 人数 | 判定 |
|------|------|------|
| A 组 | 30 | - |
| B 组 | 25 | - |
| C 组 | 45 | - |
| **合计** | **100** | ✅ Pass (30+25+45=100) |
| **合计** | **110** | ❌ Error (30+25+45=100≠110) |
**识别关键词:**
- 英文total, sum, all
- 中文:合计, 总计, 总和
---
## L2 统计验证规则
### 规则 L2-1卡方检验 P 值逆向验证
**应用场景:** 分类变量组间比较(基线特征表、疗效比较表)
**规则描述:**
从表格中提取报告的 χ² 值根据自由度df反算 P 值,与报告的 P 值对比。
**计算公式:**
$$
P_{\text{calculated}} = 1 - F_{\chi^2}(\chi^2, df)
$$
其中 $F_{\chi^2}$ 是卡方分布的累积分布函数。
**自由度估计:**
- **默认 df = 1**(适用于大多数 2×2 比较)
- 对于 r×c 表df = (r-1) × (c-1)
**判定条件:**
| 条件 | 判定 |
|------|------|
| 显著性结论相反P<0.05 vs P≥0.05 | ❌ Error |
| `|P_reported - P_calculated| > 0.05` | ⚠️ Warning |
| `|P_reported - P_calculated| ≤ 0.05` | ✅ Pass |
**示例:**
| χ² 值 | df | 报告 P | 计算 P | 判定 |
|-------|-----|--------|--------|------|
| 57.52 | 1 | 0.001 | 0.0000 | ✅ Pass均显著 |
| 3.84 | 1 | 0.05 | 0.050 | ✅ Pass |
| 2.50 | 1 | 0.01 | 0.114 | ❌ Error显著性结论相反 |
**识别模式(正则表达式):**
```
# χ² 值识别
(?:χ[²2]|[χx]2|2)\s*[=:]\s*(\d+\.?\d*)
# P 值识别
[Pp][\s\-值]*[=<>≤≥]\s*(\d+\.?\d*)
```
**⚠️ 待专家确认:**
1. df=1 作为默认值是否合理?
2. 是否需要从表格结构推断实际自由度?
---
### 规则 L2-2T 检验 P 值逆向验证
**应用场景:** 连续变量两组比较Mean±SD 格式)
**规则描述:**
从表格中提取两组的 Mean±SD 和样本量 n使用独立样本 t 检验公式反算 P 值。
**计算公式:**
$$
t = \frac{|\bar{X}_1 - \bar{X}_2|}{\sqrt{\frac{SD_1^2}{n_1} + \frac{SD_2^2}{n_2}}}
$$
$$
df = n_1 + n_2 - 2
$$
$$
P_{\text{calculated}} = 2 \times (1 - F_t(t, df))
$$
其中 $F_t$ 是 t 分布的累积分布函数。
**判定条件:**
| 条件 | 判定 |
|------|------|
| `|P_reported - P_calculated| > 0.05` | ❌ Error |
| `0.01 < |P_reported - P_calculated| ≤ 0.05` | ⚠️ Warning |
| `|P_reported - P_calculated| ≤ 0.01` | ✅ Pass |
**示例:**
| 组1 Mean±SD | 组2 Mean±SD | n1 | n2 | 报告 P | 计算 P | 判定 |
|-------------|-------------|-----|-----|--------|--------|------|
| 65.2±10.5 | 58.3±9.8 | 50 | 48 | 0.001 | 0.0007 | ✅ Pass |
| 45.0±12.0 | 44.5±11.5 | 30 | 30 | 0.001 | 0.86 | ❌ Error |
**识别模式(正则表达式):**
```
# Mean±SD 格式
(\d+\.?\d*)\s*[±\+\-]\s*(\d+\.?\d*)
# 带括号的 SD 格式
(\d+\.?\d*)\s*\(\s*(\d+\.?\d*)\s*\)(?!\s*%)
```
**样本量获取策略:**
1. 从表头提取:`(n=50)``n=50``(50例)`
2. 从数据行提取:行首的 n 信息
3. 从上下文推断
**⚠️ 待专家确认:**
1. 使用 Welch's t-test不假设方差齐性是否更合适
2. 当前假设为独立样本 t 检验,是否需要区分配对 t 检验?
---
### 规则 L2-3CI 与 P 值逻辑一致性
**应用场景:** 回归分析结果表OR、HR、RR 及其 95% CI
**规则描述(黄金法则):**
95% 置信区间与 P 值之间存在严格的逻辑对应关系:
| 95% CI 与 1.0 的关系 | P 值要求 |
|--------------------|----------|
| CI 跨越 1.0 (如 0.8-1.2) | P **必须** ≥ 0.05(不显著) |
| CI 不跨越 1.0 (如 1.1-1.5) | P **必须** < 0.05(显著) |
**违反此规则 = 数据逻辑矛盾**
**判定条件:**
| 场景 | CI | P 值 | 判定 |
|------|-----|------|------|
| 矛盾 1 | 0.8-1.2(跨越 1 | 0.03<0.05 | ❌ Error |
| 矛盾 2 | 1.2-2.5(不跨越 1 | 0.10≥0.05 | ❌ Error |
| 正确 1 | 0.8-1.2(跨越 1 | 0.45≥0.05 | ✅ Pass |
| 正确 2 | 1.2-2.5(不跨越 1 | 0.01<0.05 | ✅ Pass |
**示例:**
| OR | 95% CI | 报告 P | 判定 |
|----|--------|--------|------|
| 1.5 | 1.2-2.0 | 0.001 | ✅ PassCI 不跨越 1P<0.05 |
| 0.9 | 0.7-1.1 | 0.30 | ✅ PassCI 跨越 1P≥0.05 |
| 1.3 | 0.9-1.8 | 0.02 | ❌ ErrorCI 跨越 1但 P<0.05 |
**识别模式(正则表达式):**
```
# OR/HR/RR 识别
(?:OR|HR|RR)\s*[=:]\s*(\d+\.?\d*)
# CI 识别(多种格式)
[\(\[]\s*(\d+\.?\d*)\s*[-–—,;]\s*(\d+\.?\d*)\s*[\)\]]
95%?\s*CI\s*[:\s]+(\d+\.?\d*)\s*[-–—,;to]+\s*(\d+\.?\d*)
```
**⚠️ 待专家确认:**
1. 此规则仅适用于比值指标OR、HR、RR对于回归系数β是否需要调整为 CI 跨越 0
2. 90% CI 和 95% CI 的判定标准应如何区分?
---
## L2.5 一致性取证规则
### 规则 L2.5-1SE 三角验证
**应用场景:** Logistic 回归、Cox 回归等报告 OR/HR/RR、95% CI 和 P 值的表格
**规则描述:**
利用 OR/HR 与 95% CI 的数学关系反推标准误SE再计算 Z 值和 P 值,与报告的 P 值对比。
**计算公式:**
$$
SE = \frac{\ln(CI_{\text{upper}}) - \ln(CI_{\text{lower}})}{3.92}
$$
3.92 = 2 × 1.96,对应 95% CI 的 Z 临界值)
$$
Z = \frac{|\ln(OR)|}{SE}
$$
$$
P_{\text{calculated}} = 2 \times (1 - \Phi(Z))
$$
其中 $\Phi$ 是标准正态分布的累积分布函数。
**判定条件:**
| 条件 | 判定 |
|------|------|
| `|P_reported - P_calculated| > 0.05` | ❌ Error |
| `0.01 < |P_reported - P_calculated| ≤ 0.05` | ⚠️ Warning |
| `|P_reported - P_calculated| ≤ 0.01` | ✅ Pass |
**示例:**
| OR | 95% CI | 报告 P | 计算 SE | 计算 Z | 计算 P | 判定 |
|----|--------|--------|---------|--------|--------|------|
| 2.0 | 1.2-3.3 | 0.008 | 0.258 | 2.69 | 0.007 | ✅ Pass |
| 1.5 | 1.0-2.25 | 0.001 | 0.206 | 1.97 | 0.049 | ❌ Error |
**⚠️ 待专家确认:**
1. SE 计算公式是否准确?是否需要考虑 CI 的不对称情况?
2. 对于 HR风险比此公式是否同样适用
---
### 规则 L2.5-2SD > Mean 检查
**应用场景:** 连续变量描述统计
**规则描述:**
对于**已知为正值的指标**如年龄、体重、血压、实验室指标标准差SD大于均值Mean通常是异常的可能暗示
1. 数据录入错误
2. SD 与 SEM 混淆
3. 数据分布异常
**计算公式:**
$$
CV = \frac{SD}{Mean}
$$
若 CV > 100%(即 SD > Mean则触发警告。
**判定条件:**
| 场景 | 判定 |
|------|------|
| 已知正值指标 + SD > Mean | ❌ Error |
| 未知指标类型 + SD > Mean | ⚠️ Warning建议核查 |
**已知正值指标关键词:**
| 类别 | 指标 |
|------|------|
| 人口学 | 年龄、身高、体重、BMI |
| 生命体征 | 收缩压、舒张压、心率、脉搏 |
| 血常规 | WBC、RBC、HGB、PLT |
| 生化 | 肌酐、尿素氮、血糖、ALT、AST、胆红素 |
| 其他 | 费用、时间、持续时间 |
**例外情况:**
- **差值指标**:如"治疗前后变化值"可正可负
- **某些偏态分布指标**:如住院天数(可能存在极端值)
**示例:**
| 指标 | Mean±SD | CV | 判定 |
|------|---------|-----|------|
| 年龄 | 65±12 | 18.5% | ✅ Pass |
| 体重 | 70±15 | 21.4% | ✅ Pass |
| 年龄 | 30±45 | 150% | ❌ ErrorSD>Mean |
| 变化值 | 5±12 | 240% | ⚠️ Warning可能合理 |
**⚠️ 待专家确认:**
1. CV > 100% 作为阈值是否合理?
2. 是否有其他需要排除的例外情况?
---
## 容错阈值设置
### 当前阈值配置
| 参数 | 值 | 说明 |
|------|-----|------|
| `PVALUE_ERROR_THRESHOLD` | 0.05 | P 值差异 > 此值 → Error |
| `PVALUE_WARNING_THRESHOLD` | 0.01 | P 值差异 > 此值 → Warning |
| `DEFAULT_TOLERANCE_PERCENT` | 0.1% | 百分比容错 ±0.1% |
| `CI_RELATIVE_TOLERANCE` | 2% | CI 端点相对误差 ±2% |
| `STAT_RELATIVE_TOLERANCE` | 5% | t/χ² 值相对误差 ±5% |
### 阈值设置依据
1. **P 值阈值 0.05**:当计算的 P 值与报告的 P 值差异超过 0.05 时,可能导致显著性结论相反,属于严重问题
2. **P 值阈值 0.01**0.01-0.05 之间的差异可能是舍入误差或计算方法差异,给予警告
3. **百分比容错 0.1%**:考虑四舍五入误差,允许 ±0.1% 的偏差
**⚠️ 待专家确认:**
1. 上述阈值是否合理?
2. 是否需要针对不同检验方法设置不同阈值?
---
## 待评审问题清单
### 高优先级(请专家重点关注)
| # | 问题 | 当前处理 | 请确认 |
|---|------|----------|--------|
| 1 | 卡方检验默认 df=1 | 适用于 2×2 比较 | 是否合理?如何推断多组比较? |
| 2 | T 检验使用 Welch's 还是 Student's | 当前用合并方差公式 | 是否应默认使用 Welch's |
| 3 | CI vs P 值规则中的 "1.0" | 仅适用于比值指标 | 回归系数应使用 0 |
| 4 | SE 三角公式的准确性 | 基于正态近似 | 对于小样本是否适用? |
| 5 | SD > Mean 的阈值 | CV > 100% 触发 | 是否过于严格? |
### 中优先级(功能扩展)
| # | 问题 | 说明 |
|---|------|------|
| 6 | 配对 T 检验验证 | 当前仅支持独立样本 |
| 7 | ANOVA P 值验证 | 多组比较 |
| 8 | 非参数检验验证 | Mann-Whitney、Wilcoxon |
| 9 | 相关性分析验证 | Pearson、Spearman |
### 低优先级(边缘情况)
| # | 问题 | 说明 |
|---|------|------|
| 10 | 90% CI vs 95% CI 区分 | 当前假设都是 95% CI |
| 11 | 单侧检验 vs 双侧检验 | 当前假设都是双侧 |
| 12 | Bonferroni 校正后的 P 值 | 多重比较场景 |
---
## 附录:识别模式汇总
### 正则表达式清单
```python
# 1. 百分比格式 n (%)
PERCENT_PATTERN = r"(\d+(?:\.\d+)?)\s*\(\s*(\d+(?:\.\d+)?)\s*%?\s*\)"
# 2. P 值
PVALUE_PATTERN = r"[Pp][\s\-值]*[=<>≤≥]\s*(\d+\.?\d*)"
# 3. 卡方值
CHI_SQUARE_PATTERN = r"(?:χ[²2]|[χx]2|2)\s*[=:]\s*(\d+\.?\d*)"
# 4. Mean±SD
MEAN_SD_PATTERN = r"(\d+\.?\d*)\s*[±\+\-]\s*(\d+\.?\d*)"
# 5. OR/HR/RR
EFFECT_SIZE_PATTERN = r"(?:OR|HR|RR)\s*[=:]\s*(\d+\.?\d*)"
# 6. 95% CI
CI_PATTERN = r"[\(\[]\s*(\d+\.?\d*)\s*[-–—,;]\s*(\d+\.?\d*)\s*[\)\]]"
```
---
**文档版本:** v1.0
**创建日期:** 2026-02-18
**待更新:** 专家评审反馈后更新

View File

@@ -0,0 +1,586 @@
# SSA 智能统计分析 — 统计专家配置清单与准备指南
> **文档版本:** v1.0
> **创建日期:** 2026-02-23
> **目标读者:** 统计学专家 / 生物统计师
> **文档目的:** 系统性梳理 QPER 架构中所有需要统计学专家审核/配置的内容,便于专家提前准备
---
## 📋 目录
1. [系统架构概览](#1-系统架构概览)
2. [配置总览清单(一览表)](#2-配置总览清单)
3. [A 类:统计方法决策表](#3-a-类统计方法决策表)
4. [B 类:分析流程模板](#4-b-类分析流程模板)
5. [C 类R 统计工具](#5-c-类r-统计工具)
6. [D 类:工具参数约束表](#6-d-类工具参数约束表)
7. [E 类LLM Prompt 模板](#7-e-类llm-prompt-模板)
8. [F 类:意图识别规则](#8-f-类意图识别规则)
9. [G 类:统计工具注册表](#9-g-类统计工具注册表)
10. [当前状态与待办事项](#10-当前状态与待办事项)
11. [专家审核工作流程建议](#11-专家审核工作流程建议)
---
## 1. 系统架构概览
### QPER 四层架构
系统采用 **QPER** 四层流水线架构处理用户的统计分析请求:
```
用户:"比较两组血压有没有差别"
┌─ Q · Query意图理解──────────────────────────┐
│ LLM 解析用户意图 → 结构化查询 │
│ 需要配置:意图识别规则(F)、意图 Prompt(E) │
│ 输出goal=comparison, Y=SBP, X=Group, design=ind │
└──────────────────────┬─────────────────────────────┘
┌─ P · Planner方法规划───────────────────────────┐
│ 决策表匹配 → 流程模板填充 │
│ 需要配置:决策表(A)、流程模板(B)、工具注册表(G) │
│ 输出WorkflowPlan [step1: 描述统计, step2: T检验] │
└──────────────────────┬─────────────────────────────┘
┌─ E · ExecuteR引擎执行──────────────────────────┐
│ 调用 R 工具执行统计计算 │
│ 需要配置R 工具脚本(C)、参数约束(D) │
│ 输出StepResult[](含 P 值、统计量、效应量等) │
└──────────────────────┬─────────────────────────────┘
┌─ R · Reflection论文级结论──────────────────────┐
│ LLM 基于真实 R 引擎结果生成论文结论 │
│ 需要配置:结论 Prompt(E) │
│ 输出ConclusionReport含摘要、方法学、局限性
└────────────────────────────────────────────────────┘
```
### 核心原则
| 原则 | 说明 |
|------|------|
| **LLM 不做计算** | LLM 只负责意图理解、方案规划、结果解读,所有统计计算由 R 引擎完成 |
| **白盒透明** | 用户可以看到每一步做了什么、为什么、R 代码是什么 |
| **自动降级** | 不满足参数检验前提条件时,自动切换非参数方法 |
| **可审计** | 生成可在本地运行的 R 代码,支持结果复现 |
---
## 2. 配置总览清单
> 🟢 = 已配置完成 | 🟡 = 已配置但需专家审核/完善 | 🔴 = 未配置
| 类别 | 配置项 | 文件路径 | 当前状态 | 专家需做什么 |
|------|--------|----------|---------|-------------|
| **A. 决策表** | 统计方法选择规则11 条) | `config/decision_tables.json` | 🟡 | 审核匹配规则、降级条件、补充缺失场景 |
| **B. 流程模板** | 分析步骤编排5 个模板) | `config/flow_templates.json` | 🟡 | 审核步骤合理性、补充新模板 |
| **C. R 工具** | 统计计算脚本12 个) | `r-statistics-service/tools/*.R` | 🟡 | 审核统计方法正确性、护栏阈值 |
| **D. 参数约束** | 变量类型/水平约束12 工具) | `config/tool_param_constraints.json` | 🟡 | 审核约束条件minLevels/maxLevels 等) |
| **E. Prompt** | LLM 提示词12 个) | 数据库 + seed 脚本 | 🟡 | 审核统计术语准确性、Few-Shot 示例 |
| **F. 意图规则** | 意图识别关键词5 类) | `config/intent_rules.json` | 🟡 | 补充统计领域关键词 |
| **G. 工具注册表** | 工具元信息12 工具) | `config/tools_registry.json` | 🟡 | 审核工具描述、参数说明、前提条件 |
---
## 3. A 类:统计方法决策表
**文件:** `backend/src/modules/ssa/config/decision_tables.json`
### 作用
当系统理解了用户意图后Q 层输出 goal + outcomeType + predictorType + design通过此表进行 **四维匹配**,选出最适合的统计方法。
### 当前已配置的 11 条规则
| 规则 ID | 分析目标 | 结局类型 | 自变量类型 | 设计 | 主方法 | 降级方法 | 降级触发条件 |
|---------|---------|---------|-----------|------|--------|---------|-------------|
| `DIFF_CONT_BIN_IND` | comparison | continuous | binary | independent | T 检验 | Mann-Whitney | Shapiro-Wilk P<0.05 |
| `DIFF_CONT_BIN_PAIRED` | comparison | continuous | binary | paired | 配对 T 检验 | Wilcoxon | 差值 Shapiro-Wilk P<0.05 |
| `DIFF_CONT_MULTI_IND` | comparison | continuous | categorical | independent | ANOVA | Kruskal-Wallis | Shapiro-Wilk P<0.05(内部自动切换) |
| `DIFF_CAT_CAT_IND` | comparison | categorical | categorical | independent | 卡方检验 | Fisher | 期望频数<5 超过 20% 且 2×2 表 |
| `DIFF_CAT_CAT_SMALL` | comparison | categorical | binary | independent | Fisher | 无 | 直接使用 |
| `ASSOC_CONT_CONT` | correlation | continuous | continuous | * | 相关分析 | 无 | Pearson/Spearman 自动选择 |
| `ASSOC_CAT_ANY` | correlation | categorical | * | * | 卡方检验 | Fisher | 期望频数<5 超过 20% |
| `PRED_BIN_ANY` | regression | binary | * | * | Logistic 回归 | 无 | — |
| `PRED_CONT_ANY` | regression | continuous | * | * | 线性回归 | 无 | — |
| `DESC_ANY` | descriptive | * | * | * | 描述性统计 | 无 | — |
| `COHORT_STUDY` | cohort_study | binary | * | * | 描述统计 | 无 | 对应队列研究模板 |
### 🔍 专家需审核的问题
1. **降级条件是否正确?**
- Shapiro-Wilk P<0.05 作为正态性检验阈值是否合理?
- 期望频数<5 超过 20% 的 Fisher 切换标准是否合理?
2. **缺失的分析场景:**
- 有序分类变量ordinal的比较方法
- 多因素方差分析(多个自变量)?
- 生存分析Kaplan-Meier、Cox 回归)?
- 重复测量设计?
- 倾向性评分匹配?
- 交叉表的多重比较?
3. **优先级是否合理?**
- 当多条规则同时匹配时,`priority` 值高的优先,需确认排序逻辑
4. **队列研究的 outcomeType 限定为 binary 是否合适?**
- 如果结局变量是连续型(如生存时间),是否需要新规则?
---
## 4. B 类:分析流程模板
**文件:** `backend/src/modules/ssa/config/flow_templates.json`
### 作用
决策表选出方法后,通过流程模板确定 **执行步骤的编排顺序**。每个模板定义了"先做什么、再做什么"。
### 当前已配置的 5 个模板
#### 模板 1`standard_analysis`(标准分析流程)
```
步骤 1: 描述性统计(固定)
步骤 2: 主分析(动态填入,如 T 检验)
步骤 3: 敏感性分析(动态填入降级方法,条件:有降级方法时才执行)
```
**适用:** 两组比较、多组比较、卡方检验、相关分析等
#### 模板 2`paired_analysis`(配对设计分析)
```
步骤 1: 描述性统计(固定)
步骤 2: 配对检验(动态填入,如配对 T 检验)
```
**适用:** 前后对比、配对设计
#### 模板 3`regression_analysis`(回归建模)
```
步骤 1: 描述性统计(固定)
步骤 2: 多因素回归(动态填入,如 Logistic 或线性回归)
```
**适用:** 多因素分析
#### 模板 4`descriptive_only`(纯描述统计)
```
步骤 1: 描述性统计(固定)
```
**适用:** 仅需数据概况
#### 模板 5`cohort_study_standard`(经典队列研究)
```
步骤 1: 表1 — 组间基线特征比较ST_BASELINE_TABLEgroup_var=分组变量)
步骤 2: 表2 — 结局指标单因素分析ST_BASELINE_TABLEgroup_var=结局变量)
步骤 3: 表3 — 多因素 Logistic 回归ST_LOGISTIC_BINARY含 EPV 截断)
```
**适用:** 队列研究 Table 1→2→3
### 🔍 专家需审核的问题
1. **标准分析是否都需要"敏感性分析"步骤?**
- 当主分析与敏感性分析结论不一致时,系统已有冲突处理准则
2. **队列研究模板是否完整?**
- 表1 基线比较 → 表2 单因素筛选 → 表3 多因素回归,这个流程是否标准?
- 是否需要增加表2 → 表3 之间的变量筛选逻辑(如 P<0.1 纳入多因素)?
- 表3 的 EPVEvents Per Variable截断规则当前 `epv_capped_predictors` 的计算方式是否合理?
3. **需要新增的流程模板:**
- 病例对照研究模板?
- 横断面调查模板?
- 生存分析模板KM + Log-rank + Cox
- 诊断试验模板敏感性、特异性、ROC
- 一致性分析模板Kappa、ICC
---
## 5. C 类R 统计工具
**目录:** `r-statistics-service/tools/`
### 作用
每个 R 工具实现一种统计方法的完整计算。系统通过 HTTP API 调用 R 工具传入数据和参数返回标准化的结果块Block-based 输出)。
### 当前已实现的 12 个 R 工具
| 工具代码 | 方法名称 | 文件 | 内置护栏 | 自动降级 |
|---------|---------|------|---------|---------|
| `ST_DESCRIPTIVE` | 描述性统计 | `descriptive.R` | NA 安全处理 | — |
| `ST_T_TEST_IND` | 独立样本 T 检验 | `t_test_ind.R` | 正态性(Shapiro-Wilk)、方差齐性(Levene) | → Mann-Whitney |
| `ST_T_TEST_PAIRED` | 配对 T 检验 | `t_test_paired.R` | 差值正态性(Shapiro-Wilk) | → Wilcoxon |
| `ST_MANN_WHITNEY` | Mann-Whitney U 检验 | `mann_whitney.R` | 样本量检查 | — |
| `ST_WILCOXON` | Wilcoxon 符号秩检验 | `wilcoxon.R` | 配对数据完整性 | — |
| `ST_CHI_SQUARE` | 卡方检验 | `chi_square.R` | 期望频数检查 | → Fisher |
| `ST_FISHER` | Fisher 精确检验 | `fisher.R` | 2×2 表检查 | — |
| `ST_ANOVA_ONE` | 单因素方差分析 | `anova_one.R` | 正态性、方差齐性(Bartlett) | → Kruskal-Wallis |
| `ST_CORRELATION` | 相关分析 | `correlation.R` | 正态性检测 | Pearson↔Spearman 自动 |
| `ST_LOGISTIC_BINARY` | 二元 Logistic 回归 | `logistic_binary.R` | 多重共线性(VIF)、EPV 检查 | — |
| `ST_LINEAR_REG` | 线性回归 | `linear_reg.R` | 残差正态性、多重共线性(VIF) | — |
| `ST_BASELINE_TABLE` | 基线特征表 | `baseline_table.R` | 变量类型自动判断 | gtsummary 自动选方法 |
### 每个 R 工具的标准输出结构
```
{
"success": true,
"tool_code": "ST_T_TEST_IND",
"blocks": [
{ "type": "key_value", "title": "检验结果", "items": {...} },
{ "type": "table", "title": "组间比较", "headers": [...], "rows": [...] },
{ "type": "chart", "title": "箱线图", "chartType": "boxplot", "base64": "..." },
{ "type": "text", "title": "结论", "content": "..." }
],
"guardrail_notes": ["正态性检验通过 (Shapiro-Wilk P=0.23)"],
"reproducible_code": "# 可复现 R 代码\nlibrary(...)..."
}
```
### 🔍 专家需审核的问题
1. **护栏阈值是否合理?**
- 正态性检验Shapiro-Wilk P<0.05 → 切换非参数,这个阈值是否标准?
- 方差齐性Levene/Bartlett P<0.05 → 使用 Welch 校正,是否合理?
- 期望频数:<5 超过 20% → Fisher标准是否准确
- EPVEvents Per Variable≥10 的门槛是否需要调整?
2. **统计方法实现是否正确?**
- T 检验Welch T 检验 vs Student T 检验的选择逻辑
- ANOVA 事后比较方法Tukey HSD vs Bonferroni
- Logistic 回归变量选择策略Enter 法 / Forward / Backward
- 相关分析:自动选择 Pearson vs Spearman 的依据
3. **缺失的 R 工具(需开发新工具时才需要配置):**
- Kaplan-Meier 生存分析
- Cox 比例风险回归
- 重复测量 ANOVA
- 混合效应模型
- ROC 曲线与 AUC
- Kappa/ICC 一致性分析
- 倾向性评分匹配
---
## 6. D 类:工具参数约束表
**文件:** `backend/src/modules/ssa/config/tool_param_constraints.json`
### 作用
定义每个统计工具对输入参数的**变量类型要求**,用于:
- 前端变量选择器的智能提示和⚠️警告标记
- 后端 API 的参数校验(防火墙)
- 帮助临床医生正确选择变量
### 当前已配置12 个工具,全覆盖)
| 工具 | 参数名 | 选择模式 | 类型要求 | 水平限制 | 提示语 |
|------|--------|---------|---------|---------|--------|
| **T 检验** | `group_var` | 单选 | categorical | maxLevels=2 | T检验要求二分类分组变量 |
| | `value_var` | 单选 | numeric | — | T检验要求连续型因变量 |
| **Mann-Whitney** | `group_var` | 单选 | categorical | maxLevels=2 | 要求二分类分组变量 |
| | `value_var` | 单选 | numeric | — | 要求连续型因变量 |
| **配对 T 检验** | `before_var` | 单选 | numeric | — | 前测变量应为连续型 |
| | `after_var` | 单选 | numeric | — | 后测变量应为连续型 |
| **Wilcoxon** | `before_var` | 单选 | numeric | — | 前测变量应为连续型 |
| | `after_var` | 单选 | numeric | — | 后测变量应为连续型 |
| **卡方检验** | `var1` | 单选 | categorical | — | 要求分类变量 |
| | `var2` | 单选 | categorical | — | 要求分类变量 |
| **Fisher** | `var1` | 单选 | categorical | — | 要求分类变量 |
| | `var2` | 单选 | categorical | — | 要求分类变量 |
| **相关分析** | `var_x` | 单选 | numeric | — | 要求连续型变量 |
| | `var_y` | 单选 | numeric | — | 要求连续型变量 |
| **Logistic 回归** | `outcome_var` | 单选 | categorical | maxLevels=2 | 要求二分类结局变量 |
| | `predictors` | 多选 | any | — | 预测变量 |
| | `confounders` | 多选 | any | — | 混杂因素(可选) |
| **线性回归** | `outcome_var` | 单选 | numeric | — | 要求连续型结局变量 |
| | `predictors` | 多选 | any | — | 预测变量 |
| | `confounders` | 多选 | any | — | 混杂因素(可选) |
| **ANOVA** | `group_var` | 单选 | categorical | minLevels=3 | 要求3组及以上分组变量 |
| | `value_var` | 单选 | numeric | — | 要求连续型因变量 |
| **基线表** | `group_var` | 单选 | categorical | minLevels=2, maxLevels=5 | 需要分类分组变量 |
| | `analyze_vars` | 多选 | any | — | 选择需要分析的变量 |
| **描述统计** | `variables` | 多选 | any | — | 选择需要描述的变量 |
| | `group_var` | 单选 | categorical | — | 分组变量(可选) |
### 🔍 专家需审核的问题
1. **水平限制是否准确?**
- 基线表 `maxLevels=5` 是否合理?分组变量超过 5 组的情况是否存在?
- ANOVA `minLevels=3` 是否排除了两组情况的正确性?(两组应走 T 检验)
2. **类型要求是否完整?**
- 相关分析Spearman 也可以接受有序分类变量,是否需要放宽为 `any`
- Logistic 回归的 `predictors`:是否应区分连续/分类?
3. **提示语是否专业且易懂?**
- 面向临床医生,提示语是否够简明?
---
## 7. E 类LLM Prompt 模板
### 作用
Prompt 模板控制 LLM 在不同场景下的行为。所有 Prompt 存储在数据库中,通过 seed 脚本初始化。
### 当前已配置的 12 个 Prompt
#### 7.1 核心角色定义
| Prompt Key | 用途 | 统计相关度 | 审核重点 |
|-----------|------|-----------|---------|
| `SSA_BASE_SYSTEM` | LLM 基础角色定义 | ⭐⭐⭐ | 确认"不做计算"的边界描述是否准确 |
**当前内容要点:**
- 定义 LLM 为"分析规划者"和"结果解读者"
- 严禁生成任何数值结果P值、均值、标准差等
- 所有计算由 R 引擎完成
#### 7.2 意图分类
| Prompt Key | 用途 | 统计相关度 | 审核重点 |
|-----------|------|-----------|---------|
| `SSA_INTENT_ROUTER` | 意图分类器 | ⭐⭐ | 6 种意图的定义和典型示例是否准确 |
| `SSA_QUERY_INTENT` | 分析意图解析 | ⭐⭐⭐⭐⭐ | Few-Shot 示例、goal 分类、confidence 评分 |
**`SSA_QUERY_INTENT` 审核重点:**
- **goal 分类是否完整?** 当前comparison / correlation / regression / descriptive / cohort_study
- 是否需要增加:`survival_analysis`, `diagnostic_test`, `agreement`, `meta_analysis`
- **Few-Shot 示例是否覆盖常见场景?** 当前 6 个示例
- 是否需要增加:生存分析、诊断试验、一致性分析的示例?
- **Confidence 评分标准是否合理?**
- 0.9-1.0 = 明确指定 Y 和 X
- 0.7-0.8 = 指定 Y 但 X 需推断
- 0.5-0.6 = 意图清楚但无变量名
- <0.5 = 模糊表达需追问
#### 7.3 对话场景
| Prompt Key | 用途 | 统计相关度 | 审核重点 |
|-----------|------|-----------|---------|
| `SSA_INTENT_CHAT` | 自由对话 | ⭐ | — |
| `SSA_INTENT_EXPLORE` | 数据探索 | ⭐⭐ | 数据质量问题的提醒清单是否完整 |
| `SSA_INTENT_CONSULT` | 方法咨询 | ⭐⭐⭐⭐ | 推荐逻辑、前提条件说明是否准确 |
| `SSA_INTENT_ANALYZE` | 分析协调 | ⭐⭐⭐ | 方案状态说明的措辞 |
| `SSA_INTENT_DISCUSS` | 结果讨论 | ⭐⭐⭐⭐ | P 值解读指导、临床意义讨论准则 |
| `SSA_INTENT_FEEDBACK` | 改进反馈 | ⭐⭐⭐ | 诊断问题的分类框架 |
#### 7.4 核心任务 Prompt
| Prompt Key | 用途 | 统计相关度 | 审核重点 |
|-----------|------|-----------|---------|
| `SSA_METHOD_CONSULT` | 方法推荐输出格式 | ⭐⭐⭐⭐ | 推荐理由、前提条件、降级方案的描述准则 |
| `SSA_ANALYZE_PLAN` | 分析方案解释 | ⭐⭐⭐ | 方案解释的非技术化表达准则 |
| `SSA_PICO_INFERENCE` | PICO 结构推断 | ⭐⭐⭐⭐⭐ | Few-Shot 示例、观察性研究处理、Confidence 准则 |
| `SSA_REFLECTION` | 论文级结论生成 | ⭐⭐⭐⭐⭐ | 冲突处理准则、方法学说明格式、局限性模板 |
### 🔍 专家需审核的关键 Prompt
**优先级 1最重要**
1. **`SSA_QUERY_INTENT`** — 决定了系统如何理解用户需求
- Few-Shot 示例是否覆盖临床常见场景?
- 队列研究 vs 横断面调查的区分规则
- "统计学意义"这类表达的意图分类是否正确
2. **`SSA_REFLECTION`** — 决定了最终报告的质量
- 冲突处理准则(主分析与敏感性分析不一致时)
- 方法学段落的撰写指导
- 局限性的标准表述
3. **`SSA_PICO_INFERENCE`** — 决定了数据理解的准确性
- 观察性研究 intervention=null 的判断准则
- 变量名引用规则
- Confidence 评分准则
**优先级 2**
4. **`SSA_INTENT_CONSULT`** — 方法咨询的准确性
5. **`SSA_INTENT_DISCUSS`** — P 值和效应量的解读指导
6. **`SSA_METHOD_CONSULT`** — 推荐方法的输出格式
---
## 8. F 类:意图识别规则
**文件:** `backend/src/modules/ssa/config/intent_rules.json`
### 作用
系统首先用 **关键词规则引擎**(零延迟)判断用户意图。规则无法确定时,才使用 LLM 兜底。
### 当前已配置的 5 类意图规则
| 意图 | 关键词 | 排除词 | 前置条件 | 优先级 |
|------|--------|--------|---------|--------|
| **analyze** | 分析、检验、t检验、卡方、回归、比较一下、跑一下、执行分析、做个分析、方差分析、ANOVA、相关分析、logistic、生存分析、Cox、基线表 | 什么方法、用什么、应该怎么、推荐 | 有数据 | 10 |
| **discuss** | 什么意思、说明什么、怎么解释、p值、置信区间、结果说明、为什么显著、为什么不显著、临床意义、效应量 | — | 有数据+有结果 | 9 |
| **feedback** | 结果不对、不太对、换个方法、重新分析、有问题、不满意、重做 | — | 有数据+有结果 | 9 |
| **explore** | 看看、分布、缺失、概况、有哪些变量、数据特征、异常值、样本量、描述一下数据、多少例、变量类型 | — | 有数据 | 8 |
| **consult** | 什么方法、用什么、应该怎么分析、推荐方法、分析方案、哪种检验、怎么选、前提条件 | — | 有数据 | 7 |
### 🔍 专家需审核的问题
1. **关键词是否完整?**
- analyze 缺少生存分析相关生存曲线、KM、hazard ratio、诊断试验相关ROC、AUC、敏感性
- consult 缺少:样本量估计、效能分析相关
- discuss 缺少多重比较校正相关Bonferroni、FDR
2. **排除词是否合理?**
- 当前 analyze 排除"什么方法、用什么"以避免误判为 consult但用户说"用 T 检验分析"是否会被误排除?
3. **默认意图 `chat` 是否是最佳兜底?**
---
## 9. G 类:统计工具注册表
**文件:** `backend/src/modules/ssa/config/tools_registry.json`
### 作用
注册所有可用的统计工具元信息,包括工具代码、参数列表、输出类型、前提条件和降级方法。
### 当前注册的 12 个工具
| 工具代码 | 工具名称 | 分类 | 前提条件 | 降级方法 |
|---------|---------|------|---------|---------|
| `ST_DESCRIPTIVE` | 描述性统计 | basic | — | — |
| `ST_T_TEST_IND` | 独立样本T检验 | parametric | 正态分布 | ST_MANN_WHITNEY |
| `ST_MANN_WHITNEY` | Mann-Whitney U检验 | nonparametric | — | — |
| `ST_T_TEST_PAIRED` | 配对T检验 | parametric | — | — |
| `ST_CHI_SQUARE` | 卡方检验 | categorical | — | ST_FISHER |
| `ST_CORRELATION` | 相关分析 | correlation | — | — |
| `ST_LOGISTIC_BINARY` | 二元Logistic回归 | regression | — | — |
| `ST_FISHER` | Fisher精确检验 | categorical | — | — |
| `ST_ANOVA_ONE` | 单因素方差分析 | parametric | 正态分布+方差齐性 | Kruskal-Wallis |
| `ST_WILCOXON` | Wilcoxon符号秩检验 | nonparametric | — | — |
| `ST_LINEAR_REG` | 线性回归 | regression | — | — |
| `ST_BASELINE_TABLE` | 基线特征表 | composite | — | — |
### 🔍 专家需审核的问题
1. **前提条件字段prerequisite需要补全**
- 多数工具未填写前提条件,但实际 R 代码中有检查
- 建议统一补全,用于向用户展示
2. **category 分类是否需要调整?**
- 当前basic / parametric / nonparametric / categorical / correlation / regression / composite
- 是否需要更精细的分类?
3. **配对 T 检验缺少 fallback 声明**
- `ST_T_TEST_PAIRED` 的 fallback 应为 `ST_WILCOXON`
---
## 10. 当前状态与待办事项
### ✅ 已完成(系统可运行)
| 项目 | 说明 |
|------|------|
| 12 个 R 工具全部实现 | 含内置护栏和自动降级 |
| 11 条决策表规则 | 覆盖常见分析场景 |
| 5 个流程模板 | 含队列研究全套模板 |
| 12 个 Prompt 入库 | 含角色定义、意图分类、结论生成 |
| 参数约束表全覆盖 | 12 工具 27 个参数 |
| 变量可编辑化 | 医生可修改系统默认选择 |
### 🟡 需要专家审核/完善
| 优先级 | 项目 | 预估工作量 |
|--------|------|-----------|
| P0 | 决策表降级条件审核 | 1-2 小时 |
| P0 | R 工具护栏阈值审核 | 2-3 小时 |
| P0 | `SSA_QUERY_INTENT` Prompt Few-Shot 审核 | 1 小时 |
| P0 | `SSA_REFLECTION` 冲突处理准则审核 | 1 小时 |
| P1 | 参数约束表水平限制审核 | 30 分钟 |
| P1 | 意图识别关键词补充 | 30 分钟 |
| P1 | 队列研究模板步骤审核 | 1 小时 |
| P2 | 工具注册表前提条件补全 | 30 分钟 |
| P2 | PICO 推断 Prompt 示例审核 | 30 分钟 |
### 🔴 未来扩展(新统计方法)
| 统计方法 | 涉及配置项 | 说明 |
|---------|-----------|------|
| **生存分析** | 新 R 工具 + 决策表 + 流程模板 + Prompt 示例 | Kaplan-Meier + Cox |
| **诊断试验** | 新 R 工具 + 决策表 + 流程模板 | ROC/AUC/敏感性/特异性 |
| **一致性分析** | 新 R 工具 + 决策表 | Kappa / ICC |
| **倾向性评分** | 新 R 工具 + 流程模板 | PSM + 匹配后分析 |
| **混合效应模型** | 新 R 工具 + 决策表 | 重复测量/多水平 |
| **样本量估计** | 新 R 工具 + 意图规则 | 效能分析 |
| **Meta 分析** | 新 R 工具 + 完整子系统 | 固定/随机效应 |
---
## 11. 专家审核工作流程建议
### 推荐审核顺序
```
第一轮理解架构30 分钟)
├── 阅读本文档第 1 节(系统架构概览)
└── 理解 QPER 四层流水线和配置关系
第二轮审核统计核心3-4 小时)
├── A. 决策表 → 确认方法选择规则和降级条件
├── C. R 工具 → 审核护栏阈值和统计实现
├── D. 参数约束 → 确认变量类型要求
└── B. 流程模板 → 审核步骤编排逻辑
第三轮:审核 LLM 指导2-3 小时)
├── E. SSA_QUERY_INTENT → 审核 Few-Shot 和 goal 分类
├── E. SSA_REFLECTION → 审核结论生成准则
├── E. SSA_PICO_INFERENCE → 审核研究设计推断
└── F. 意图规则 → 补充统计领域关键词
第四轮规划扩展1-2 小时)
├── 确定优先需要新增的统计方法
├── 为新方法准备决策表规则
└── 为新方法准备 Few-Shot 示例
```
### 配置文件位置速查
| 配置文件 | 路径 |
|---------|------|
| 决策表 | `backend/src/modules/ssa/config/decision_tables.json` |
| 流程模板 | `backend/src/modules/ssa/config/flow_templates.json` |
| 工具注册表 | `backend/src/modules/ssa/config/tools_registry.json` |
| 参数约束 | `backend/src/modules/ssa/config/tool_param_constraints.json` |
| 意图规则 | `backend/src/modules/ssa/config/intent_rules.json` |
| Prompt 种子 | `backend/scripts/seed-ssa-*.ts` |
| R 工具 | `r-statistics-service/tools/*.R` |
### 反馈格式建议
专家审核后,建议按以下格式反馈:
```markdown
## 审核反馈 — [配置项名称]
### 确认正确的部分
- [列出审核通过的规则/配置]
### 需要修改的部分
- [配置项]: [当前值] → [建议值]
- [原因说明]
### 需要新增的部分
- [新规则/新工具/新示例]
- [适用场景说明]
### 需要讨论的问题
- [有争议或需要权衡的决策]
```
---
**文档版本:** v1.0
**创建日期:** 2026-02-23
**维护者:** 开发团队
**下次更新触发条件:** 专家审核反馈后 / 新增统计工具时