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

> **计划周期：** 2025-11-07 至 2025-12-13（5周）  
> **核心目标：** 建立可独立部署的模块化架构 + 完成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组件
- 🔗 部署基础设施

---

## 🚀 阶段1：Schema隔离方案（Week 1）

> **时间：** 2025-11-07 至 2025-11-13（7天）  
> **目标：** 完成8个Schema设计和数据库迁移

### 核心目标

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

---

### Day 1-2：Schema设计

#### 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 |

#### 重点关注三大模块

**ASL（AI智能文献）Schema：**
```sql
-- 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：**
```sql
-- 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：**
```sql
-- 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：创建所有Schema（5分钟）
   - 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 5：Prisma Schema更新

**核心任务：**
- [ ] 更新Prisma Schema配置（支持多Schema）
- [ ] 为ASL、DC、RVW创建Prisma模型
- [ ] 生成Prisma Client
- [ ] 更新现有代码的数据库查询

**Prisma多Schema配置示例：**
```prisma
// 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-20（7天）  
> **目标：** 建立清晰的代码分层 + 实现模块独立部署能力

### 核心目标

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

```
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 2：LLM网关实现 ⭐ 核心

**为什么LLM网关如此重要？**
- ASL的标题摘要初筛完全依赖它
- DC的智能清洗建议需要它
- RVW的审稿评估需要它
- 统一管理所有AI调用

**实现任务：**
- [ ] 实现BaseLLMAdapter抽象类
- [ ] 实现DeepSeekAdapter
- [ ] 实现QwenAdapter
- [ ] 实现LLMGateway主服务
- [ ] Feature Flag集成
- [ ] 配额检查

**核心代码：**
```typescript
// 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：独立部署配置

**为每个模块创建独立配置：**

```typescript
// 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 4：API路由隔离

**统一API路由规范：**
```
/api/asl/*    - AI智能文献
/api/dc/*     - 数据清洗
/api/rvw/*    - 审稿系统
/api/aia/*    - AI问答
/api/pkb/*    - 知识库
```

**任务：**
- [ ] 重构API路由，按模块划分
- [ ] 实现路由级别的权限检查
- [ ] 为每个模块创建独立的API文档

#### Day 5：Docker化 + 独立部署测试

**为每个模块创建Dockerfile：**

```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示例：**
```yaml
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-4：ASL核心功能开发（Week 3-4）

> **时间：** 2025-11-21 至 2025-12-04（2周）  
> **目标：** 完成ASL标题摘要初筛 + 全文复筛

**详细内容参考原计划，核心任务：**
- Week 3：项目管理 + CSV导入 + 标题摘要初筛
- Week 4：全文复筛 + PDF处理

---

## 🔗 阶段5：多模块联调（Week 5）

> **时间：** 2025-12-05 至 2025-12-13（9天）  
> **目标：** 验证三大模块的协同工作能力

### 核心测试场景

**场景1：用户跨模块使用**
- 用户登录 → 使用ASL筛选文献 → 使用DC清洗数据 → 使用RVW审稿

**场景2：数据共享测试**
- ASL筛选出的文献 → 导出到DC进行数据提取
- DC清洗的数据 → 用于RVW的稿件准备

**场景3：独立部署测试**
- ASL独立部署 → 调用平台认证服务 → 正常工作
- DC独立部署 → 调用LLM网关 → 正常工作

**任务清单：**
- [ ] 端到端测试
- [ ] 性能测试
- [ ] 独立部署验证
- [ ] 文档完善

---

## 📊 关键决策记录

### 决策001：Schema隔离必须执行 ✅

**决策：** Week 1必须完成Schema隔离

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

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

---

### 决策002：三大模块优先 ✅

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

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

**优先级：** ASL > DC = RVW

---

### 决策003：LLM网关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%
- [ ] 支持独立部署并对外销售
- [ ] 用户体验流畅

---

## 🔄 风险管理

### 风险1：Schema迁移复杂度高

**风险等级：** 高  
**缓解措施：**
- 在测试环境充分验证
- 准备完善的回滚方案
- 分阶段迁移，降低风险

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

**风险等级：** 中  
**缓解措施：**
- 先实现统一部署，再实现独立部署
- 充分的日志和监控
- 详细的部署文档

### 风险3：时间延长到5周

**风险等级：** 中  
**缓解措施：**
- 架构投入是必要的
- 长期来看节省时间
- Week 3-4可以并行多人开发

---

## 📚 相关文档

- [里程碑4 - 架构改造](./02-里程碑规划/04-里程碑4-架构改造.md)
- [Schema隔离方案](../00-系统总体设计/05-Schema隔离方案与成本分析.md)
- [模块独立部署方案](../00-系统总体设计/06-模块独立部署与单机版方案.md)
- [ASL快速上下文](../03-业务模块/ASL-AI智能文献/[AI对接]%20ASL快速上下文.md)

---

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













