Files
AIclinicalresearch/docs/00-系统总体设计/08-架构设计全景图.md
HaHafeng 8eef9e0544 feat(asl): Complete Week 4 - Results display and Excel export with hybrid solution
Features:
- Backend statistics API (cloud-native Prisma aggregation)
- Results page with hybrid solution (AI consensus + human final decision)
- Excel export (frontend generation, zero disk write, cloud-native)
- PRISMA-style exclusion reason analysis with bar chart
- Batch selection and export (3 export methods)
- Fixed logic contradiction (inclusion does not show exclusion reason)
- Optimized table width (870px, no horizontal scroll)

Components:
- Backend: screeningController.ts - add getProjectStatistics API
- Frontend: ScreeningResults.tsx - complete results page (hybrid solution)
- Frontend: excelExport.ts - Excel export utility (40 columns full info)
- Frontend: ScreeningWorkbench.tsx - add navigation button
- Utils: get-test-projects.mjs - quick test tool

Architecture:
- Cloud-native: backend aggregation reduces network transfer
- Cloud-native: frontend Excel generation (zero file persistence)
- Reuse platform: global prisma instance, logger
- Performance: statistics API < 500ms, Excel export < 3s (1000 records)

Documentation:
- Update module status guide (add Week 4 features)
- Update task breakdown (mark Week 4 completed)
- Update API design spec (add statistics API)
- Update database design (add field usage notes)
- Create Week 4 development plan
- Create Week 4 completion report
- Create technical debt list

Test:
- End-to-end flow test passed
- All features verified
- Performance test passed
- Cloud-native compliance verified

Ref: Week 4 Development Plan
Scope: ASL Module MVP - Title Abstract Screening Results
Cloud-Native: Backend aggregation + Frontend Excel generation
2025-11-21 20:12:38 +08:00

38 KiB
Raw Blame History

架构设计全景图

文档版本: v1.0
创建日期: 2025-11-06
文档目的: 一图看懂整个系统架构


🎯 完整架构全景

┌───────────────────────────────────────────────────────────────────────────────┐
│                        壹证循AI科研平台 - 完整架构                               │
└───────────────────────────────────────────────────────────────────────────────┘

┌───────────────────────────────────────────────────────────────────────────────┐
│                              用户层4类用户                                   │
│  ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐         │
│  │  临床医生    │ │  研究者      │ │  期刊编辑部  │ │  运营人员    │         │
│  │  研究机构    │ │  医学生      │ │  出版社      │ │  管理员      │         │
│  └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘         │
└───────────────────────────────────────────────────────────────────────────────┘
         ↓                ↓                ↓                ↓
┌───────────────────────────────────────────────────────────────────────────────┐
│                            前端应用层4个独立应用                              │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐             │
│  │  Web前端    │ │  单机版     │ │  独立产品   │ │  运营管理端  │             │
│  │  (React)    │ │(Electron)   │ │  前端       │ │ (Admin)     │             │
│  │             │ │             │ │             │ │             │             │
│  │ app.xxx.com │ │ 桌面应用    │ │ 独立域名    │ │admin.xxx.com│             │
│  └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘             │
└───────────────────────────────────────────────────────────────────────────────┘
         ↓                ↓                ↓                ↓
┌───────────────────────────────────────────────────────────────────────────────┐
│                            API网关层可选微服务时                            │
│                        Kong / Traefik - 统一路由和鉴权                          │
└───────────────────────────────────────────────────────────────────────────────┘
         ↓
┌───────────────────────────────────────────────────────────────────────────────┐
│                        业务模块层8个独立业务模块                              │
│                                                                                │
│  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐          │
│  │  AIA   │ │  ASL   │ │  PKB   │ │  DC    │ │  SSA   │ │  ST    │          │
│  │智能问答│ │智能文献│ │知识库  │ │数据清洗│ │智能统计│ │分析工具│          │
│  │        │ │        │ │        │ │        │ │        │ │        │          │
│  │✅已完成│ │⏳重点  │ │✅已完成│ │⏳规划中│ │⏳规划中│ │⏳规划中│          │
│  └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘          │
│                                                                                │
│  ┌────────┐ ┌────────┐                                                       │
│  │  RVW   │ │ ADMIN  │                                                       │
│  │稿件审查│ │运营管理│                                                       │
│  │        │ │        │                                                       │
│  │⚡独立  │ │⭐新增  │                                                       │
│  └────────┘ └────────┘                                                       │
└───────────────────────────────────────────────────────────────────────────────┘
         ↓ 依赖
┌───────────────────────────────────────────────────────────────────────────────┐
│                      通用能力层5个核心技术能力                               │
│                                                                                │
│  ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐        │
│  │  LLM网关     │ │  文档处理    │ │  RAG引擎     │ │  ETL引擎     │        │
│  │              │ │              │ │              │ │              │        │
│  │ 5模块依赖    │ │ 6模块依赖    │ │ 3模块依赖    │ │ 2模块依赖    │        │
│  │ 71%复用      │ │ 86%复用      │ │ 43%复用      │ │ 29%复用      │        │
│  │              │ │              │ │              │ │              │        │
│  │ ❌待实现     │ │ ✅已实现     │ │ ✅已实现     │ │ ❌待实现     │        │
│  └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘        │
│                                                                                │
│  ┌──────────────┐                                                            │
│  │  医学NLP     │                                                            │
│  │              │                                                            │
│  │ 1模块依赖    │                                                            │
│  │ 14%复用      │                                                            │
│  │              │                                                            │
│  │ ❌待实现     │                                                            │
│  └──────────────┘                                                            │
└───────────────────────────────────────────────────────────────────────────────┘
         ↓ 依赖
┌───────────────────────────────────────────────────────────────────────────────┐
│                        平台基础层(通用基础设施)                                │
│                                                                                │
│  ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐        │
│  │用户与权限中心│ │  存储服务    │ │  通知服务    │ │  监控与日志  │        │
│  │              │ │              │ │              │ │              │        │
│  │ - 用户认证   │ │ - 文件上传   │ │ - 站内消息   │ │ - 操作日志   │        │
│  │ - JWT Token  │ │ - OSS/本地   │ │ - 邮件通知   │ │ - 错误监控   │        │
│  │ - RBAC权限   │ │ - 临时URL    │ │ - WebSocket  │ │ - 审计日志   │        │
│  │ - Feature Flag│ │             │ │              │ │              │        │
│  │              │ │              │ │              │ │              │        │
│  │ ✅已有基础   │ │ ✅已实现     │ │ ⏳待实现     │ │ ✅已实现     │        │
│  └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘        │
│                                                                                │
│  ┌──────────────┐                                                            │
│  │  系统配置    │                                                            │
│  │              │                                                            │
│  │ - 全局配置   │                                                            │
│  │ - 动态配置   │                                                            │
│  │              │                                                            │
│  │ ⏳待增强     │                                                            │
│  └──────────────┘                                                            │
└───────────────────────────────────────────────────────────────────────────────┘
         ↓
┌───────────────────────────────────────────────────────────────────────────────┐
│                          数据存储层Schema隔离                                │
│                                                                                │
│  ┌────────────────────────────────────────────────────────────────────────┐  │
│  │                    PostgreSQL当前逻辑隔离                           │  │
│  │                                                                          │  │
│  │  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐      │  │
│  │  │platform     │ │aia_schema   │ │asl_schema   │ │pkb_schema   │      │  │
│  │  │_schema      │ │             │ │             │ │             │      │  │
│  │  │             │ │ - projects  │ │ - projects  │ │ - kb        │      │  │
│  │  │ - users     │ │ - conv      │ │ - items     │ │ - documents │      │  │
│  │  │ - roles     │ │ - messages  │ │ - screening │ │             │      │  │
│  │  │ - feature   │ │             │ │ - extraction│ │             │      │  │
│  │  │   _flags    │ │             │ │             │ │             │      │  │
│  │  └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘      │  │
│  │                                                                          │  │
│  │  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐      │  │
│  │  │dc_schema    │ │ssa_schema   │ │st_schema    │ │review       │      │  │
│  │  │             │ │             │ │             │ │_schema      │      │  │
│  │  │ - projects  │ │ - projects  │ │ - usage     │ │             │      │  │
│  │  │ - raw_files │ │ - tasks     │ │             │ │ - tasks     │      │  │
│  │  │ - cleaned   │ │ - results   │ │             │ │ - journals  │      │  │
│  │  │ - ner       │ │             │ │             │ │ - reviewers │      │  │
│  │  └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘      │  │
│  │                                                                          │  │
│  │  ┌─────────────┐                                                        │  │
│  │  │admin        │                                                        │  │
│  │  │_schema      │                                                        │  │
│  │  │             │                                                        │  │
│  │  │ - admin_users│                                                       │  │
│  │  │ - llm_models│                                                        │  │
│  │  │ - tenants   │                                                        │  │
│  │  │ - audit_logs│                                                        │  │
│  │  └─────────────┘                                                        │  │
│  └────────────────────────────────────────────────────────────────────────┘  │
│                                                                                │
│  ┌────────────────────────────────────────────────────────────────────────┐  │
│  │                    Dify向量数据库RAG                                   │  │
│  │                    通过API访问不直接连接                                  │  │
│  └────────────────────────────────────────────────────────────────────────┘  │
└───────────────────────────────────────────────────────────────────────────────┘
         ↓
┌───────────────────────────────────────────────────────────────────────────────┐
│                          外部服务层                                             │
│                                                                                │
│  ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐        │
│  │  DeepSeek    │ │   Qwen3      │ │  Qwen-Long   │ │   Claude     │        │
│  │   API        │ │    API       │ │    API       │ │    API       │        │
│  │              │ │              │ │              │ │              │        │
│  │ ¥1/百万tokens│ │ ¥5/百万tokens│ │ ¥20/百万     │ │ ¥50/百万     │        │
│  └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘        │
│                                                                                │
│  ┌──────────────┐ ┌──────────────┐                                          │
│  │  Dify API    │ │  Python微服务│                                          │
│  │  (RAG)       │ │  (文档提取)  │                                          │
│  └──────────────┘ └──────────────┘                                          │
└───────────────────────────────────────────────────────────────────────────────┘

📦 四种部署模式

模式1云端SaaS版当前重点

┌─────────────────────────────────────────┐
│           云端服务器                      │
│                                          │
│  ┌────────────────────────────────────┐ │
│  │  Nginx (反向代理)                   │ │
│  │  ├─ app.yizhengxun.com            │ │
│  │  └─ admin.yizhengxun.com          │ │
│  └────────────────────────────────────┘ │
│         ↓                                │
│  ┌────────────────────────────────────┐ │
│  │  Web前端 (React)                    │ │
│  │  Admin前端 (React + Ant Design Pro)│ │
│  └────────────────────────────────────┘ │
│         ↓                                │
│  ┌────────────────────────────────────┐ │
│  │  后端 (Node.js + Fastify)           │ │
│  │  - 8个业务模块                      │ │
│  │  - 通用能力层                       │ │
│  │  - 平台基础层                       │ │
│  └────────────────────────────────────┘ │
│         ↓                                │
│  ┌────────────────────────────────────┐ │
│  │  PostgreSQL (Docker)                │ │
│  │  - 多Schema隔离                     │ │
│  └────────────────────────────────────┘ │
│                                          │
│  ┌────────────────────────────────────┐ │
│  │  Redis (缓存)                       │ │
│  └────────────────────────────────────┘ │
│                                          │
│  ┌────────────────────────────────────┐ │
│  │  Dify (RAG服务)                     │ │
│  └────────────────────────────────────┘ │
│                                          │
│  ┌────────────────────────────────────┐ │
│  │  Python微服务 (文档提取)            │ │
│  └────────────────────────────────────┘ │
└─────────────────────────────────────────┘

用户通过浏览器访问

模式2独立产品包Docker打包

┌─────────────────────────────────────────┐
│      审稿系统独立产品包                   │
│      (Docker Compose一键部署)            │
│                                          │
│  ┌────────────────────────────────────┐ │
│  │  前端容器 (Nginx + React)           │ │
│  └────────────────────────────────────┘ │
│         ↓                                │
│  ┌────────────────────────────────────┐ │
│  │  后端容器 (Node.js)                 │ │
│  │  - RVW模块审稿功能              │ │
│  │  - LLM网关精简版                │ │
│  │  - 文档处理(精简版)               │ │
│  │  - 用户认证(精简版)               │ │
│  └────────────────────────────────────┘ │
│         ↓                                │
│  ┌────────────────────────────────────┐ │
│  │  PostgreSQL容器                     │ │
│  │  - 只包含review_schema和users       │ │
│  └────────────────────────────────────┘ │
│                                          │
│  一键部署脚本deploy.sh                 │
│  配置文件docker-compose.yml           │
└─────────────────────────────────────────┘

医院内网部署,数据不外泄

模式3Electron单机版

┌─────────────────────────────────────────┐
│        用户电脑 (Windows/Mac)            │
│                                          │
│  ┌────────────────────────────────────┐ │
│  │     Electron应用                    │ │
│  │                                     │ │
│  │  ┌──────────────────────────────┐  │ │
│  │  │  渲染进程 (Chromium)          │  │ │
│  │  │  React前端复用90%+        │  │ │
│  │  └──────────────────────────────┘  │ │
│  │         ↓ IPC通信                  │ │
│  │  ┌──────────────────────────────┐  │ │
│  │  │  主进程 (Node.js)             │  │ │
│  │  │  后端逻辑复用80%+         │  │ │
│  │  └──────────────────────────────┘  │ │
│  │         ↓                          │ │
│  │  ┌──────────────────────────────┐  │ │
│  │  │  SQLite (本地数据库)          │  │ │
│  │  │  ~/Documents/YizhengxunData/  │  │ │
│  │  └──────────────────────────────┘  │ │
│  │         ↓                          │ │
│  │  ┌──────────────────────────────┐  │ │
│  │  │  Python子进程                 │  │ │
│  │  │  文档提取(打包在应用内)     │  │ │
│  │  └──────────────────────────────┘  │ │
│  └────────────────────────────────────┘ │
│                                          │
│  安装包500MB+                          │
│  100%离线运行                            │
└─────────────────────────────────────────┘

模式4私有化部署K8s/Docker

┌─────────────────────────────────────────┐
│      医院内网服务器                       │
│                                          │
│  ┌────────────────────────────────────┐ │
│  │  K8s / Docker Swarm                 │ │
│  │                                     │ │
│  │  Pod/Container:                     │ │
│  │  ├─ 前端服务 x2高可用           │ │
│  │  ├─ 后端服务 x3负载均衡         │ │
│  │  ├─ PostgreSQL x1主从           │ │
│  │  ├─ Redis x1                        │ │
│  │  ├─ Python微服务 x2                 │ │
│  │  └─ Dify服务可选                │ │
│  │                                     │ │
│  │  Ingress: hospital-a.yizhengxun.com│ │
│  └────────────────────────────────────┘ │
│                                          │
│  一键部署脚本 + 运维监控                  │
└─────────────────────────────────────────┘

数据100%留在医院内网

🎯 代码组织架构

当前结构(简单)

AIclinicalresearch/
  ├── frontend/          # Web前端
  ├── backend/           # 后端
  └── extraction_service/ # Python服务

目标结构Monorepo

AIclinicalresearch/
  ├── packages/                    # 共享包(可复用)
  │   ├── shared-types/            # 类型定义(前后端共享)
  │   ├── platform-core/           # 平台核心
  │   │   ├── auth/                # 用户认证
  │   │   ├── storage/             # 存储服务
  │   │   └── monitoring/          # 监控日志
  │   ├── capabilities-core/       # 通用能力
  │   │   ├── llm-gateway/         # LLM网关
  │   │   ├── document-processor/  # 文档处理
  │   │   └── rag-engine/          # RAG引擎
  │   └── ui-components/           # UI组件库可选
  │
  ├── apps/                        # 应用
  │   ├── web-frontend/            # Web前端
  │   ├── web-backend/             # Web后端
  │   ├── admin-frontend/          # 运营管理端前端
  │   └── electron/                # Electron单机版未来
  │       ├── main/                # 主进程
  │       └── renderer/            # 渲染进程
  │
  ├── products/                    # 独立产品打包(未来)
  │   ├── review-system/           # 审稿系统独立产品
  │   ├── literature-system/       # AI文献独立产品
  │   └── data-cleaning-system/    # 数据清洗独立产品
  │
  ├── services/                    # 微服务(未来)
  │   ├── platform/                # 平台服务
  │   ├── capabilities/            # 通用能力服务
  │   └── modules/                 # 业务模块服务
  │
  ├── extraction_service/          # Python服务保持原位
  ├── docker-compose.yml           # Docker配置
  ├── pnpm-workspace.yaml          # Workspace配置
  └── package.json                 # 根package.json

转换成本: 2-3天
未来收益: 节省7-11天


📊 关键指标

模块复用分析

通用能力 使用频率 依赖模块 优先级 状态
LLM网关 71% AIA、ASL、PKB、DC、RVW P0 待实现
文档处理 86% AIA、ASL、PKB、DC、SSA、ST、RVW P0 已实现
RAG引擎 43% AIA、ASL、PKB P1 已实现
ETL引擎 29% DC、SSA P2 待实现
医学NLP 14% DC P2 待实现

模块独立性分析

模块 独立性 商业价值 可独立销售 优先级
RVW审稿 P1
ASL文献 P0
DC数据清洗 P1
ADMIN运营 SaaS P1
SSA统计分析 ⚠️ 与ST协同 P2
ST分析工具 ⚠️ 与SSA协同 P2
AIAAI问答 ⚠️ 与PKB关联 P2
PKB知识库 ⚠️ 与AIA关联 P2

🎯 技术债务与投资决策

两个关键技术改造

改造项目 现在做 未来做 投入产出比 建议
Schema隔离 1周 3-5周 300-500% 现在做
Monorepo转换 2-3天 7-11天 300-400% 现在做

核心结论:

现在投入:
- Schema隔离3天
- Monorepo转换3天
- 总计6天1周

未来节省:
- Schema隔离15-25天
- Monorepo转换7-11天
- 总计22-36天1个月+

投入产出比300-500%

建议:立即做!

📋 下一步行动方案

方案A快速推进业务

适合时间紧迫必须立即上线ASL模块

本周:

  • Day 1-7ASL模块开发

风险:

  • 技术债累积
  • 未来改造成本高1个月

方案B夯实基础稳步推进 强烈推荐

适合重视长期架构健康愿意投入1周

Week 1架构改造6天

  • Day 1-3Schema隔离

    • 设计Schema结构
    • 修改Prisma Schema
    • 数据迁移
    • 测试验证
  • Day 4-6Monorepo转换

    • 学习pnpm workspaces
    • 重构代码结构
    • 提取共享代码
    • 测试验证

Week 2-4ASL模块开发

  • 享受清晰的架构
  • 享受代码复用的便利

优点:

  • 一次性还清技术债
  • 为7个模块打基础
  • 避免未来1个月的重构成本

投入产出比: 极高


方案C折中方案

适合:部分认同,希望快速看到业务进展

本周:

  • Day 1-3Monorepo转换必须近期开发运营管理端
  • Day 4-7ASL模块开发

未来1-2个月后

  • Schema隔离数据量增长前

优点:

  • 解决最紧迫的问题
  • 快速推进业务

缺点:

  • ⚠️ Schema隔离成本会增加

🎉 今日成就总结

完成的核心工作

1. 系统架构设计100%

  • 三层架构设计
  • 8个业务模块规划
  • 5个通用能力定义
  • 依赖关系分析

2. 部署方案设计100%

  • 云端SaaS部署
  • 独立产品包部署
  • Electron单机版方案
  • 私有化部署

3. 数据库架构100%

  • PostgreSQL Docker部署说明
  • Schema隔离方案
  • 逻辑vs物理隔离对比
  • 改造成本分析

4. 运营管理端100%

  • 15个功能模块设计
  • 3阶段实施计划
  • 权限体系设计
  • 数据库Schema设计

5. 模块独立部署100%

  • 完整打包方案
  • 共享服务方案
  • Electron架构设计
  • 代码复用率分析

6. Monorepo架构100%

  • 必要性评估
  • 成本收益分析
  • 实施方案设计
  • 时机建议

7. 文档体系重构100%

  • v2.0文档结构设计
  • 模块文档模板
  • 迁移计划

产出的核心价值

技术价值:

  • 清晰的技术路线图未来6-12个月
  • 完整的架构设计三层架构、8个模块
  • 详细的实施方案(部署、数据库、代码组织)

商业价值:

  • 支持模块独立销售审稿、AI文献、数据清洗
  • 支持多种部署模式(覆盖全市场)
  • 支持灵活商业模式订阅、License、模块化售卖

决策价值:

  • 明确的优先级P0-P2
  • 清晰的成本收益分析
  • 具体的实施建议

📈 架构成熟度评估

设计完整性: (5/5)

  • 系统架构:三层架构,职责清晰
  • 业务模块8个模块完整规划
  • 部署方案4种模式覆盖全市场
  • 数据库架构Schema隔离支持微服务
  • 代码组织Monorepo支持复用
  • 运营管理15个功能商业基础

可实施性: (5/5)

  • 详细的实施步骤
  • 明确的时间估算
  • 清晰的成本收益分析
  • 具体的技术方案
  • 现实的风险评估

商业价值: (5/5)

  • 支持模块独立销售
  • 支持多种部署模式
  • 支持灵活定价策略
  • 成本控制机制完善

🚀 明确的下一步

立即可做的3件事

1. 开始ASL模块开发方案A

  • 使用现有架构
  • 快速推进业务
  • 风险:累积技术债

2. Schema隔离 + Monorepo方案B

  • 投入1周
  • 夯实基础
  • 避免未来1个月改造成本

3. Monorepo转换后开发方案C

  • 投入2-3天
  • 快速推进
  • 延后Schema隔离

💼 需要讨论的问题

技术决策

  1. Schema隔离 现在做 or 延后?

    • 建议:现在做(成本最低)
  2. Monorepo 现在转换 or 延后?

    • 建议:现在转换(近期开发运营管理端)
  3. 部署优先级: 先做哪种部署?

    • 建议专注云端SaaS阶段一

业务规划

  1. 模块开发顺序: ASL → DC → SSA

    • 建议ASL已有PRD→ DC核心竞争力
  2. 运营管理端时机: 何时开发?

    • 建议ASL完成后1-2个月后
  3. 独立产品时机: 何时打包独立产品?

    • 建议阶段二6-12个月后

🎯 我的最终建议

推荐方案B夯实基础稳步推进

实施计划:

Week 1本周架构改造
  Day 1-3Schema隔离
  Day 4-6Monorepo转换

Week 2-4下2-3周ASL模块开发
  标题摘要初筛 + 全文复筛

Week 5-6第5-6周ASL模块完善
  全文解析与数据提取

Week 7-8第7-8周运营管理端P0功能
  用户管理 + Feature Flag + LLM模型管理

核心理由:

  1. 投入1周节省未来1个月
  2. 为7个模块打下坚实基础
  3. 架构清晰,长期收益巨大
  4. 避免技术债累积

最后更新: 2025-11-06
总结人: 技术架构师


📖 相关文档