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

7.3 KiB
Raw Blame History

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 内网 Endpointoss-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 将具备极高的鲁棒性。