Files
AIclinicalresearch/docs/03-业务模块/SSA-智能统计分析/06-开发记录/J技术报告审核评估与建议/SSA-Pro 方案深度审查与风险评估报告.md
HaHafeng 371e1c069c 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>
2026-02-21 18:15:53 +08:00

119 lines
7.3 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 方案深度审查与风险评估报告**
**审查对象:** SSA-Pro V4.1 架构及配套开发计划 (v1.0)
**审查视角:** 系统架构、工程落地、安全性、可维护性
**审查结论:** **总体优秀 (A-)**,架构逻辑清晰,但 R 服务工程化细节存在隐患,需在开发前修正。
## **1\. 架构层面的潜在风险 (Architecture Risks)**
### **1.1 R 服务并发瓶颈 (The Single-Threaded Bottleneck)**
* **现状**:设计采用同步 HTTP (Plumber) 调用 R。
* **问题**R 是**单线程**的。虽然 MVP 限制了数据量,但如果 SAE 实例配置为单进程,当一个 T 检验正在计算(耗时 2秒第二个请求会被阻塞。如果并发量稍大如 20 人同时点击),请求会排队导致超时。
* **建议**
1. **SAE 弹性策略**:必须配置 SAE 的自动扩容策略(例如 CPU \> 60% 或 并发数 \> 5 时扩容)。
2. **Plumber 配置**:在生产环境,建议使用 future 包或在 Docker 中配置多个 R Worker 进程(利用 pm2 或类似工具管理多个 R 进程端口,前端 Nginx 做负载均衡),而不仅仅依赖 SAE 的容器级扩容。
### **1.2 "网络隔离"与"OSS下载"的矛盾**
* **现状**
* 架构文档提到R 容器配置 Egress Deny禁止外网
* 数据协议提到R 服务需要从 OSS 下载大于 1MB 的文件。
* **问题**:如果 OSS 是公网 Endpoint配置 Egress Deny 后 R 服务将**无法下载数据**,导致系统瘫痪。
* **建议**
* 务必使用阿里云 OSS 的 **VPC 内网 Endpoint**oss-cn-beijing-internal.aliyuncs.com
* 网络策略应配置为:**Deny All Public Internet**,但 **Allow VPC Internal Traffic**
### **1.3 临时文件堆积 (Storage Leak)**
* **现状**R 服务会生成临时图片 (tempfile) 和下载 OSS 数据。
* **问题**:文档中未提及**清理策略**。长期运行后,/tmp 目录会爆满,导致 Docker 容器崩溃。
* **建议**
* 在 plumber.R 中添加 on.exit(unlink(tmp\_files)) 逻辑。
* 或者在 Docker 启动脚本中添加定时清理任务Cron
## **2\. R 工程化细节审查 (R Engineering Review)**
### **2.1 代码生成方式过于脆弱 (Fragile Code Gen)**
* **现状**02-R服务开发指南.md 中使用 code\_lines \<- c(..., paste0(...)) 进行字符串拼接。
* **问题**
* 这种硬编码方式非常**难以维护**。一旦需要修改代码模板,很容易拼错引号或括号。
* 生成的代码缺乏缩进和格式化,用户下载后可读性差。
* **建议**
* 引入 **模板引擎**(如 R 的 glue 包或 whisker
* 将代码模板存为独立的 .R 模板文件(如 templates/t\_test.R.template运行时读取并填充参数。
* **强力推荐**:使用 styler 包在生成代码后自动美化格式。
### **2.2 依赖包管理的隐患 (Dependency Hell)**
* **现状**Dockerfile 中通过 install.packages 安装了一堆包。
* **问题**100 个工具可能依赖 50+ 个包。如果不锁定版本,下个月重新构建镜像时,某个包升级(如 ggplot2 API 变动)可能导致整个服务挂掉。
* **建议**
* 使用 **renv** 进行包管理。生成 renv.lock 文件,确保生产环境安装的包版本与开发环境完全一致。
* 或者使用 RStudio Public Package Manager (P3M) 的**快照日期源**(已在指南中提及,需严格执行)。
### **2.3 错误处理的颗粒度**
* **现状**Wrapper 使用 tryCatch 捕获所有错误并返回 message。
* **问题**R 的报错信息(如 object 'x' not found对 LLM 来说可能不够明确,或者包含了系统路径等敏感信息。
* **建议**
* 在 Wrapper 中区分 **"业务错误"**(如列名不存在、数据类型不对)和 **"系统错误"**。
* 对于业务错误,返回特定的 error\_code方便 Planner 进行针对性的参数自愈。
## **3\. 后端逻辑审查 (Backend Review)**
### **3.1 LLM 生成 JSON 的稳定性**
* **现状**:依赖 Prompt 让 LLM 输出 JSON。
* **问题**DeepSeek 虽然强,但偶尔也会输出 Markdown 包裹的 JSON或者 JSON 格式错误(如末尾多逗号)。单纯的 JSON.parse 很容易挂。
* **建议**
* 引入 json-repair 库或使用正则表达式提取 JSON 块。
* 或者使用 **Structured Output (JSON Mode)** 如果模型支持。
* 增加一层 **Schema Validation (Zod)**:在收到 LLM 的 Plan 后,先用 Zod 校验参数结构是否符合 tools\_library 中的定义,如果不符合,直接触发重试,不要发给 R。
### **3.2 数据 Schema 提取的隐私风险**
* **现状**DataParserService 计算数值列的 Min/Max/Mean。
* **问题**对于罕见病或小样本数据N\<10极值Min/Max可能导致患者身份泄露年龄=102岁
* **建议**
* 增加 **隐私阈值**:如果行数 \< 10不计算 Min/Max或者进行模糊化处理如向下取整
## **4\. 前端交互审查 (Frontend Review)**
### **4.1 大图与多图渲染**
* **现状**R 返回 Base64 图片。
* **问题**如果图片很大高DPI或者一次返回 10 张图如相关性矩阵拆解Base64 字符串会极大,导致 HTTP 响应慢,且前端卡顿。
* **建议**
* 对于复杂图表R 服务应将图片上传到 OSS返回 **URL** 而不是 Base64。
* Base64 仅限于 MVP 阶段的小图预览。
### **4.2 长连接与超时**
* **现状**:同步 HTTP超时 60s。
* **问题**:虽然大部分 T 检验很快,但如果是 Bootstrap 或 MCMC很容易超过 60s。前端 Nginx 或浏览器可能会提前断开连接。
* **建议**
* 前端 axios 请求需显式设置 timeout: 120000 (2分钟)。
* 增加 **"正在计算..."** 的动态文案(如:正在进行第 500 次置换检验...),这需要 R 支持流式日志输出SSE但在同步架构下较难实现。MVP 阶段至少要有一个假的进度条动画,缓解焦虑。
## **5\. 补充的任务清单 (Missing Items)**
在当前的开发计划中,缺少以下关键任务,建议补充进 Phase 2 或 3
1. **🔍 审计日志查看器**后台管理端ADMIN需要一个界面查看 execution\_logs方便运营人员排查 AI 为什么规划错了。
2. **🧹 自动清理任务**:编写 CronJob定期清理 R 容器的 /tmp 和 OSS 中的临时数据文件24小时过期
3. **📊 资源监控**:在运营看板中增加 R 服务的内存/CPU 监控,防止内存泄漏导致的 OOM。
4. **📚 帮助文档生成**:不仅是 R 代码生成 JSON还需要一个脚本将 R 的注释自动生成前端可见的“工具说明书”,展示在 Chat 的侧边栏或悬停提示中。
## **6\. 最终修订建议**
**请研发团队在开工前,重点落实以下 3 点变更:**
1. **R 代码生成**:放弃 paste0 拼接,改用 glue 模板技术。
2. **网络配置**:确认 SAE 与 OSS 的内网连通性,配置精确的 ACL。
3. **JSON 容错**:后端增加 LLM 输出的 JSON 修复与 Zod 强校验层。
**总评:** 方案非常扎实以上问题属于“精益求精”的工程细节。解决这些问题后SSA-Pro 将具备极高的鲁棒性。