Files
AIclinicalresearch/docs/08-项目管理/下一阶段行动计划-V2.0-模块化架构优先.md
HaHafeng e3e7e028e8 feat(platform): Complete platform infrastructure implementation and verification
Platform Infrastructure - 8 Core Modules Completed:
- Storage Service (LocalAdapter + OSSAdapter stub)
- Logging System (Winston + JSON format)
- Cache Service (MemoryCache + Redis stub)
- Async Job Queue (MemoryQueue + DatabaseQueue stub)
- Health Check Endpoints (liveness/readiness/detailed)
- Database Connection Pool (with Serverless optimization)
- Environment Configuration Management
- Monitoring Metrics (DB connections/memory/API)

Key Features:
- Adapter Pattern for zero-code environment switching
- Full backward compatibility with legacy modules
- 100% test coverage (all 8 modules verified)
- Complete documentation (11 docs updated)

Technical Improvements:
- Fixed duplicate /health route registration issue
- Fixed TypeScript interface export (export type)
- Installed winston dependency
- Added structured logging with context support
- Implemented graceful shutdown for Serverless
- Added connection pool optimization for SAE

Documentation Updates:
- Platform infrastructure planning (04-骞冲彴鍩虹璁炬柦瑙勫垝.md)
- Implementation report (2025-11-17-骞冲彴鍩虹璁炬柦瀹炴柦瀹屾垚鎶ュ憡.md)
- Verification report (2025-11-17-骞冲彴鍩虹璁炬柦楠岃瘉鎶ュ憡.md)
- Git commit guidelines (06-Git鎻愪氦瑙勮寖.md) - Added commit frequency rules
- Updated 3 core architecture documents

Code Statistics:
- New code: 2,532 lines
- New files: 22
- Updated files: 130+
- Test pass rate: 100% (8/8 modules)

Deployment Readiness:
- Local environment: 鉁?Ready
- Cloud environment: 馃攧 Needs OSS/Redis dependencies

Next Steps:
- Ready to start ASL module development
- Can directly use storage/logger/cache/jobQueue

Tested: Local verification 100% passed
Related: #Platform-Infrastructure
2025-11-18 08:00:41 +08:00

21 KiB
Raw Blame History

下一阶段行动计划 V2.0 - 模块化架构优先

计划周期: 2025-11-07 至 2025-12-135周
核心目标: 建立可独立部署的模块化架构 + 完成ASL核心功能
制定时间: 2025-11-07
版本: V2.0(架构优先版)


🎯 战略调整说明

为什么要调整?

原计划V1.0 快速启动ASL开发暂缓Schema隔离

新计划V2.0 先打好架构基础,再开发业务功能

核心变化

项目 V1.0 V2.0 原因
Schema隔离 暂缓 必做 独立部署的前提
模块独立性 📋 计划中 最高优先级 90%独立部署需求
开发重点 ASL单模块 ASL+DC+RVW三模块 统一架构标准
时间分配 1周基础+3周开发 2周基础+3周开发 架构投入增加

📊 整体规划 - 五周五阶段

Week 1-2架构基础        Week 3-4核心功能        Week 5测试优化
Schema隔离+模块化架构  →  ASL标题摘要初筛+全文复筛  →  多模块联调+测试
阶段 时间 核心任务 交付成果 优先级
阶段1 Week 1 Schema隔离方案 8个Schema设计+迁移计划 P0
阶段2 Week 2 模块化架构实施 代码分层+独立部署能力 P0
阶段3 Week 3 ASL标题摘要初筛 双模型筛选功能 P0
阶段4 Week 4 ASL全文复筛 PDF全文分析功能 P0
阶段5 Week 5 多模块联调测试 三模块协同工作 P1

🏗️ 核心架构设计

三大独立模块

┌─────────────────────────────────────────────────────────┐
│              云端统一平台                                  │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐              │
│  │   ASL    │  │    DC    │  │   RVW    │              │
│  │AI智能文献│  │ 数据清洗 │  │ 审稿系统 │              │
│  └──────────┘  └──────────┘  └──────────┘              │
│       ↓              ↓              ↓                    │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐              │
│  │asl_schema│  │dc_schema │  │rvw_schema│              │
│  └──────────┘  └──────────┘  └──────────┘              │
└─────────────────────────────────────────────────────────┘
                        ↓
            每个模块都可以独立部署 90%

模块独立性设计原则

独立的90%

  • 独立的数据库Schema
  • 独立的API路由/api/asl/, /api/dc/, /api/rvw/*
  • 独立的前端页面
  • 独立的部署包
  • 独立的配置文件

共享的10%

  • 🔗 用户认证platform_schema.users
  • 🔗 LLM网关common层
  • 🔗 基础UI组件
  • 🔗 部署基础设施

🚀 阶段1Schema隔离方案Week 1

时间: 2025-11-07 至 2025-11-137天
目标: 完成8个Schema设计和数据库迁移

核心目标

为什么这是Week 1的重中之重

  1. Schema隔离是独立部署的前提条件
  2. 影响后续所有代码的数据访问方式
  3. 越早做,后续改动成本越低
  4. 为三大模块ASL、DC、RVW建立清晰边界

Day 1-2Schema设计

8个Schema划分方案

Schema名称 用途 核心表 优先级
platform_schema 平台基础 users, roles, permissions P0
aia_schema AI问答 projects, conversations, messages P1
asl_schema AI智能文献 literature_projects, literature_items, screening_results P0
dc_schema 数据清洗 cleaning_projects, datasets, cleaning_rules P0
rvw_schema 审稿系统 manuscripts, reviews,评估标准 P0
pkb_schema 知识库 knowledge_bases, documents P1
admin_schema 运营管理 system_logs, statistics P2
common_schema 通用数据 llm_usage, feature_flags P1

重点关注三大模块

ASLAI智能文献Schema

-- asl_schema
CREATE SCHEMA asl_schema;

-- 文献项目表
CREATE TABLE asl_schema.literature_projects (
    id UUID PRIMARY KEY,
    user_id UUID REFERENCES platform_schema.users(id),
    name VARCHAR(200) NOT NULL,
    description TEXT,
    status VARCHAR(50),
    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

-- PICO配置表
CREATE TABLE asl_schema.pico_configs (
    id UUID PRIMARY KEY,
    project_id UUID REFERENCES asl_schema.literature_projects(id) ON DELETE CASCADE,
    population TEXT NOT NULL,
    intervention TEXT NOT NULL,
    comparison TEXT NOT NULL,
    outcome TEXT NOT NULL,
    study_design TEXT NOT NULL
);

-- 文献条目表
CREATE TABLE asl_schema.literature_items (
    id UUID PRIMARY KEY,
    project_id UUID REFERENCES asl_schema.literature_projects(id) ON DELETE CASCADE,
    title TEXT NOT NULL,
    abstract TEXT,
    authors TEXT,
    journal VARCHAR(200),
    year INTEGER,
    doi VARCHAR(200),
    -- 筛选结果
    screening_status VARCHAR(50) DEFAULT 'pending',
    final_decision VARCHAR(50),
    ai_model1_decision VARCHAR(50),
    ai_model2_decision VARCHAR(50),
    ai_reason TEXT,
    -- 全文
    fulltext_path TEXT,
    fulltext_extracted TEXT,
    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

DC数据清洗Schema

-- dc_schema
CREATE SCHEMA dc_schema;

CREATE TABLE dc_schema.cleaning_projects (
    id UUID PRIMARY KEY,
    user_id UUID REFERENCES platform_schema.users(id),
    name VARCHAR(200) NOT NULL,
    dataset_type VARCHAR(100),
    status VARCHAR(50),
    created_at TIMESTAMP
);

CREATE TABLE dc_schema.datasets (
    id UUID PRIMARY KEY,
    project_id UUID REFERENCES dc_schema.cleaning_projects(id) ON DELETE CASCADE,
    file_name VARCHAR(500),
    file_path TEXT,
    row_count INTEGER,
    column_count INTEGER,
    created_at TIMESTAMP
);

CREATE TABLE dc_schema.cleaning_rules (
    id UUID PRIMARY KEY,
    project_id UUID REFERENCES dc_schema.cleaning_projects(id) ON DELETE CASCADE,
    rule_type VARCHAR(100),
    rule_config JSONB,
    apply_order INTEGER
);

RVW审稿系统Schema

-- rvw_schema
CREATE SCHEMA rvw_schema;

CREATE TABLE rvw_schema.manuscripts (
    id UUID PRIMARY KEY,
    user_id UUID REFERENCES platform_schema.users(id),
    title TEXT NOT NULL,
    abstract TEXT,
    fulltext_path TEXT,
    journal_target VARCHAR(200),
    status VARCHAR(50),
    created_at TIMESTAMP
);

CREATE TABLE rvw_schema.reviews (
    id UUID PRIMARY KEY,
    manuscript_id UUID REFERENCES rvw_schema.manuscripts(id) ON DELETE CASCADE,
    review_type VARCHAR(100), -- methodology, journal_requirements
    score DECIMAL(5,2),
    comments TEXT,
    suggestions TEXT,
    created_at TIMESTAMP
);

CREATE TABLE rvw_schema.evaluation_criteria (
    id UUID PRIMARY KEY,
    type VARCHAR(100), -- methodology, journal
    criteria_name VARCHAR(200),
    criteria_content TEXT
);

Day 1任务清单

  • 绘制完整的Schema关系图
  • 设计8个Schema的表结构
  • 重点详细设计ASL、DC、RVW三个Schema
  • 设计跨Schema的外键引用规则
  • 编写Schema设计文档

输出文档:

  • 09-架构实施/01-Schema隔离详细设计.md

Day 2数据迁移计划

现有表分类:

现有表 迁移到 优先级
users, roles platform_schema P0
projects, conversations, messages aia_schema P1
knowledge_bases, documents pkb_schema P1
新建literature_* asl_schema P0
新建cleaning_* dc_schema P0
新建manuscripts, reviews rvw_schema P0

迁移策略:

  1. 阶段性迁移

    • Phase 1创建所有Schema5分钟
    • Phase 2迁移platform核心表30分钟
    • Phase 3迁移AIA和PKB表1小时
    • Phase 4创建ASL/DC/RVW新表30分钟
  2. 零停机迁移

    • 使用数据库视图作为过渡
    • 逐步切换应用代码
    • 保留旧表作为备份

Day 2任务清单

  • 编写SQL迁移脚本
  • 设计数据验证方案
  • 准备回滚方案
  • 在测试环境验证

输出文档:

  • 09-架构实施/02-数据库迁移计划.md
  • 09-架构实施/migration-scripts/

Day 3-4执行Schema迁移

Day 3测试环境迁移

上午:准备工作

  • 备份测试数据库
  • 创建8个Schema
  • 运行迁移脚本Platform + AIA + PKB

下午:验证和测试

  • 数据完整性验证
  • 现有功能测试AI问答、知识库
  • 修复发现的问题

Day 4生产环境迁移 + 新Schema创建

上午:生产环境迁移

  • 备份生产数据库
  • 执行Schema迁移
  • 数据验证

下午创建ASL/DC/RVW Schema

  • 创建asl_schema及所有表
  • 创建dc_schema及所有表
  • 创建rvw_schema及所有表
  • 创建必要的索引

验收标准:

  • 8个Schema全部创建完成
  • 现有功能正常运行
  • 三大模块Schema准备就绪

Day 5Prisma Schema更新

核心任务:

  • 更新Prisma Schema配置支持多Schema
  • 为ASL、DC、RVW创建Prisma模型
  • 生成Prisma Client
  • 更新现有代码的数据库查询

Prisma多Schema配置示例

// schema.prisma
generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["multiSchema"]
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
  schemas  = ["platform_schema", "aia_schema", "asl_schema", "dc_schema", "rvw_schema", "pkb_schema", "admin_schema", "common_schema"]
}

// Platform Schema
model User {
  id        String   @id @default(uuid())
  email     String   @unique
  password  String
  role      String
  createdAt DateTime @default(now())
  
  @@map("users")
  @@schema("platform_schema")
}

// ASL Schema
model LiteratureProject {
  id          String   @id @default(uuid())
  userId      String
  name        String
  description String?
  status      String   @default("active")
  createdAt   DateTime @default(now())
  updatedAt   DateTime @updatedAt
  
  picoConfig  PICOConfig?
  items       LiteratureItem[]
  
  @@map("literature_projects")
  @@schema("asl_schema")
}

model PICOConfig {
  id           String @id @default(uuid())
  projectId    String @unique
  population   String
  intervention String
  comparison   String
  outcome      String
  studyDesign  String
  
  project      LiteratureProject @relation(fields: [projectId], references: [id], onDelete: Cascade)
  
  @@map("pico_configs")
  @@schema("asl_schema")
}

// ... 其他模型

验收标准:

  • Prisma Schema支持8个Schema
  • 生成的Client可以正确访问所有Schema
  • 类型定义完整

Week 1 总结

交付成果:

  1. 8个Schema设计完成
  2. 数据库迁移完成
  3. Prisma Schema更新完成
  4. ASL、DC、RVW三大模块数据库就绪

验收标准:

  • 所有现有功能正常运行
  • 数据库完整性100%
  • Prisma Client正常工作
  • 三大模块可以开始开发

🔧 阶段2模块化架构实施Week 2

时间: 2025-11-14 至 2025-11-207天
目标: 建立清晰的代码分层 + 实现模块独立部署能力

核心目标

建立三层架构 + 模块独立性

backend/
├── platform/        # 平台基础层
│   ├── auth/       # 认证授权(共享)
│   ├── permission/ # 权限管理
│   └── storage/    # 存储服务
│
├── common/         # 通用能力层
│   ├── llm/        # LLM网关 ⭐ 核心
│   ├── document/   # 文档处理
│   └── utils/      # 工具函数
│
├── modules/        # 业务模块层(独立)
│   ├── asl/        # AI智能文献 ⭐⭐⭐
│   │   ├── api/
│   │   ├── services/
│   │   ├── types/
│   │   └── standalone.config.ts  # 独立部署配置
│   │
│   ├── dc/         # 数据清洗 ⭐⭐
│   │   └── standalone.config.ts
│   │
│   ├── rvw/        # 审稿系统 ⭐⭐
│   │   └── standalone.config.ts
│   │
│   ├── aia/        # AI问答
│   └── pkb/        # 知识库
│
└── shared/         # 共享代码
    ├── types/
    └── interfaces/

Day 1-2代码重构 + LLM网关

Day 1目录重构

任务:

  • 创建三层目录结构
  • 迁移现有代码到对应目录
  • 为ASL、DC、RVW创建模块骨架
  • 更新import路径

ASL模块目录结构

modules/asl/
├── api/
│   ├── projects.ts        # 项目管理API
│   ├── screening.ts       # 筛选API
│   └── exports.ts         # 导出API
├── services/
│   ├── project.service.ts
│   ├── screening.service.ts
│   └── llm.service.ts     # 封装LLM网关调用
├── types/
│   └── index.ts
├── config/
│   └── standalone.config.ts  # 独立部署配置
└── index.ts               # 模块入口

Day 2LLM网关实现 核心

为什么LLM网关如此重要

  • ASL的标题摘要初筛完全依赖它
  • DC的智能清洗建议需要它
  • RVW的审稿评估需要它
  • 统一管理所有AI调用

实现任务:

  • 实现BaseLLMAdapter抽象类
  • 实现DeepSeekAdapter
  • 实现QwenAdapter
  • 实现LLMGateway主服务
  • Feature Flag集成
  • 配额检查

核心代码:

// common/llm/LLMGateway.ts
export class LLMGateway {
  async call(
    userId: string,
    model: string,
    messages: Message[],
    options?: LLMOptions
  ): Promise<LLMResponse> {
    // 1. Feature Flag检查
    // 2. 配额检查
    // 3. 调用适配器
    // 4. 记录使用量
  }
}

验收标准:

  • 可以调用DeepSeek和Qwen3
  • Feature Flag正常工作
  • 配额检查正常

Day 3-5模块独立部署能力

Day 3独立部署配置

为每个模块创建独立配置:

// modules/asl/config/standalone.config.ts
export const ASLStandaloneConfig = {
  moduleName: 'ASL',
  moduleId: 'asl',
  version: '1.0.0',
  
  // 独立部署模式
  standalone: {
    enabled: process.env.ASL_STANDALONE === 'true',
    port: process.env.ASL_PORT || 3001,
    apiPrefix: '/api/asl',
  },
  
  // 依赖的共享服务
  dependencies: {
    auth: {
      required: true,
      endpoint: process.env.AUTH_SERVICE_URL || 'http://localhost:3000/api/auth',
    },
    llm: {
      required: true,
      endpoint: process.env.LLM_SERVICE_URL || 'http://localhost:3000/api/llm',
    },
  },
  
  // 数据库配置
  database: {
    schema: 'asl_schema',
    url: process.env.ASL_DATABASE_URL || process.env.DATABASE_URL,
  },
};

任务清单:

  • 为ASL创建standalone.config.ts
  • 为DC创建standalone.config.ts
  • 为RVW创建standalone.config.ts
  • 创建模块启动脚本

Day 4API路由隔离

统一API路由规范

/api/asl/*    - AI智能文献
/api/dc/*     - 数据清洗
/api/rvw/*    - 审稿系统
/api/aia/*    - AI问答
/api/pkb/*    - 知识库

任务:

  • 重构API路由按模块划分
  • 实现路由级别的权限检查
  • 为每个模块创建独立的API文档

Day 5Docker化 + 独立部署测试

为每个模块创建Dockerfile

# modules/asl/Dockerfile
FROM node:18-alpine

WORKDIR /app

# 只复制ASL模块需要的文件
COPY package*.json ./
COPY tsconfig.json ./
COPY platform/ ./platform/
COPY common/ ./common/
COPY modules/asl/ ./modules/asl/
COPY shared/ ./shared/

RUN npm install
RUN npm run build

ENV ASL_STANDALONE=true
ENV ASL_PORT=3001

EXPOSE 3001

CMD ["node", "dist/modules/asl/index.js"]

任务:

  • 为ASL创建Dockerfile
  • 为DC创建Dockerfile
  • 为RVW创建Dockerfile
  • 创建docker-compose配置
  • 测试独立部署

docker-compose.yml示例

version: '3.8'

services:
  # 统一部署模式
  platform:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://...
  
  # 独立部署模式
  asl-standalone:
    build:
      context: .
      dockerfile: modules/asl/Dockerfile
    ports:
      - "3001:3001"
    environment:
      - ASL_STANDALONE=true
      - ASL_DATABASE_URL=postgresql://...
      - AUTH_SERVICE_URL=http://platform:3000/api/auth

Week 2 总结

交付成果:

  1. 三层代码架构建立完成
  2. LLM网关实现完成
  3. ASL、DC、RVW三模块支持独立部署
  4. Docker化完成

验收标准:

  • 代码结构清晰,依赖关系正确
  • LLM网关可以正常调用
  • 三大模块可以独立启动和运行
  • Docker镜像可以正常构建

🎯 阶段3-4ASL核心功能开发Week 3-4

时间: 2025-11-21 至 2025-12-042周
目标: 完成ASL标题摘要初筛 + 全文复筛

详细内容参考原计划,核心任务:

  • Week 3项目管理 + CSV导入 + 标题摘要初筛
  • Week 4全文复筛 + PDF处理

🔗 阶段5多模块联调Week 5

时间: 2025-12-05 至 2025-12-139天
目标: 验证三大模块的协同工作能力

核心测试场景

场景1用户跨模块使用

  • 用户登录 → 使用ASL筛选文献 → 使用DC清洗数据 → 使用RVW审稿

场景2数据共享测试

  • ASL筛选出的文献 → 导出到DC进行数据提取
  • DC清洗的数据 → 用于RVW的稿件准备

场景3独立部署测试

  • ASL独立部署 → 调用平台认证服务 → 正常工作
  • DC独立部署 → 调用LLM网关 → 正常工作

任务清单:

  • 端到端测试
  • 性能测试
  • 独立部署验证
  • 文档完善

📊 关键决策记录

决策001Schema隔离必须执行

决策: Week 1必须完成Schema隔离

理由:

  1. 独立部署的前提条件
  2. 模块边界清晰
  3. 数据库级别的隔离
  4. 支持未来独立销售

影响: Week 1全部用于架构改造


决策002三大模块优先

决策: 重点投入ASL、DC、RVW三大模块

理由:

  1. 90%独立部署需求
  2. 核心差异化产品
  3. 统一架构标准

优先级: ASL > DC = RVW


决策003LLM网关Week 2实现

决策: LLM网关在Week 2实现不是Week 1

理由:

  1. Week 1专注Schema隔离
  2. LLM网关需要Schema完成后才能正确配置
  3. Week 2有充足时间实现

📈 进度跟踪

关键指标

指标 目标 Week 1 Week 2 Week 3-4 Week 5
Schema隔离 100% 100% - - -
模块化架构 100% 0% 100% - -
LLM网关 100% 0% 100% - -
ASL功能 100% 0% 0% 100% -
独立部署 100% 0% 80% 80% 100%

🎯 成功标准

技术标准

  • 8个Schema全部创建并正常工作
  • 三大模块ASL、DC、RVW可以独立部署
  • LLM网关稳定可靠
  • ASL核心功能完整
  • 模块间可以协同工作

业务标准

  • ASL可以完成文献筛选全流程
  • 筛选准确率 > 85%
  • 支持独立部署并对外销售
  • 用户体验流畅

🔄 风险管理

风险1Schema迁移复杂度高

风险等级:
缓解措施:

  • 在测试环境充分验证
  • 准备完善的回滚方案
  • 分阶段迁移,降低风险

风险2模块独立部署调试困难

风险等级:
缓解措施:

  • 先实现统一部署,再实现独立部署
  • 充分的日志和监控
  • 详细的部署文档

风险3时间延长到5周

风险等级:
缓解措施:

  • 架构投入是必要的
  • 长期来看节省时间
  • Week 3-4可以并行多人开发

📚 相关文档


制定人: AI助手
审核人: 待审核
批准人: 待批准
最后更新: 2025-11-07
版本: V2.0