- Implement 5 core API endpoints (create task, get progress, get results, update decision, export Excel) - Add FulltextScreeningController with Zod validation (652 lines) - Implement ExcelExporter service with 4-sheet report generation (352 lines) - Register routes under /api/v1/asl/fulltext-screening - Create 31 REST Client test cases - Add automated integration test script - Fix PDF extraction fallback mechanism in LLM12FieldsService - Update API design documentation to v3.0 - Update development plan to v1.2 - Create Day 5 development record - Clean up temporary test files
38 KiB
38 KiB
架构设计全景图
文档版本: 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 │
└─────────────────────────────────────────┘
医院内网部署,数据不外泄
模式3:Electron单机版
┌─────────────────────────────────────────┐
│ 用户电脑 (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 |
| AIA(AI问答) | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⚠️ 与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-7:ASL模块开发
风险:
- ❌ 技术债累积
- ❌ 未来改造成本高(1个月)
方案B:夯实基础,稳步推进 ⭐⭐⭐⭐⭐ 强烈推荐
适合:重视长期架构健康,愿意投入1周
Week 1:架构改造(6天)
-
Day 1-3:Schema隔离
- 设计Schema结构
- 修改Prisma Schema
- 数据迁移
- 测试验证
-
Day 4-6:Monorepo转换
- 学习pnpm workspaces
- 重构代码结构
- 提取共享代码
- 测试验证
Week 2-4:ASL模块开发
- 享受清晰的架构
- 享受代码复用的便利
优点:
- ✅ 一次性还清技术债
- ✅ 为7个模块打基础
- ✅ 避免未来1个月的重构成本
投入产出比: ⭐⭐⭐⭐⭐ 极高
方案C:折中方案 ⭐⭐⭐⭐
适合:部分认同,希望快速看到业务进展
本周:
- Day 1-3:Monorepo转换(必须,近期开发运营管理端)
- Day 4-7:ASL模块开发
未来(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隔离
💼 需要讨论的问题
技术决策
-
Schema隔离: 现在做 or 延后?
- 建议:现在做(成本最低)
-
Monorepo: 现在转换 or 延后?
- 建议:现在转换(近期开发运营管理端)
-
部署优先级: 先做哪种部署?
- 建议:专注云端SaaS(阶段一)
业务规划
-
模块开发顺序: ASL → DC → SSA?
- 建议:ASL(已有PRD)→ DC(核心竞争力)
-
运营管理端时机: 何时开发?
- 建议:ASL完成后(1-2个月后)
-
独立产品时机: 何时打包独立产品?
- 建议:阶段二(6-12个月后)
🎯 我的最终建议
推荐:方案B(夯实基础,稳步推进)
实施计划:
Week 1(本周):架构改造
Day 1-3:Schema隔离
Day 4-6:Monorepo转换
Week 2-4(下2-3周):ASL模块开发
标题摘要初筛 + 全文复筛
Week 5-6(第5-6周):ASL模块完善
全文解析与数据提取
Week 7-8(第7-8周):运营管理端P0功能
用户管理 + Feature Flag + LLM模型管理
核心理由:
- ✅ 投入1周,节省未来1个月
- ✅ 为7个模块打下坚实基础
- ✅ 架构清晰,长期收益巨大
- ✅ 避免技术债累积
最后更新: 2025-11-06
总结人: 技术架构师