- Add storage service (LocalAdapter + OSSAdapter stub) - Add database connection pool with graceful shutdown - Add logging system with winston (JSON format) - Add environment config management - Add async job queue (MemoryQueue + DatabaseQueue stub) - Add cache service (MemoryCache + RedisCache stub) - Add health check endpoints for SAE - Add monitoring metrics for DB, memory, API Key Features: - Zero-code switching between local and cloud environments - Adapter pattern for multi-environment support - Backward compatible with legacy modules - Ready for Aliyun Serverless deployment Related: Platform Infrastructure Planning (docs/09-鏋舵瀯瀹炴柦/04-骞冲彴鍩虹璁炬柦瑙勫垝.md)
21 KiB
下一阶段行动计划 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的重中之重?
- Schema隔离是独立部署的前提条件
- 影响后续所有代码的数据访问方式
- 越早做,后续改动成本越低
- 为三大模块(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:
-- 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 |
迁移策略:
-
阶段性迁移
- Phase 1:创建所有Schema(5分钟)
- Phase 2:迁移platform核心表(30分钟)
- Phase 3:迁移AIA和PKB表(1小时)
- Phase 4:创建ASL/DC/RVW新表(30分钟)
-
零停机迁移
- 使用数据库视图作为过渡
- 逐步切换应用代码
- 保留旧表作为备份
Day 2任务清单:
- 编写SQL迁移脚本
- 设计数据验证方案
- 准备回滚方案
- 在测试环境验证
输出文档:
09-架构实施/02-数据库迁移计划.md09-架构实施/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配置示例:
// 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 总结
交付成果:
- ✅ 8个Schema设计完成
- ✅ 数据库迁移完成
- ✅ Prisma Schema更新完成
- ✅ 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集成
- 配额检查
核心代码:
// 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 4:API路由隔离
统一API路由规范:
/api/asl/* - AI智能文献
/api/dc/* - 数据清洗
/api/rvw/* - 审稿系统
/api/aia/* - AI问答
/api/pkb/* - 知识库
任务:
- 重构API路由,按模块划分
- 实现路由级别的权限检查
- 为每个模块创建独立的API文档
Day 5:Docker化 + 独立部署测试
为每个模块创建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 总结
交付成果:
- ✅ 三层代码架构建立完成
- ✅ LLM网关实现完成
- ✅ ASL、DC、RVW三模块支持独立部署
- ✅ 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隔离
理由:
- 独立部署的前提条件
- 模块边界清晰
- 数据库级别的隔离
- 支持未来独立销售
影响: Week 1全部用于架构改造
决策002:三大模块优先 ✅
决策: 重点投入ASL、DC、RVW三大模块
理由:
- 90%独立部署需求
- 核心差异化产品
- 统一架构标准
优先级: ASL > DC = RVW
决策003:LLM网关Week 2实现 ✅
决策: LLM网关在Week 2实现,不是Week 1
理由:
- Week 1专注Schema隔离
- LLM网关需要Schema完成后才能正确配置
- 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可以并行多人开发
📚 相关文档
制定人: AI助手
审核人: 待审核
批准人: 待批准
最后更新: 2025-11-07
版本: V2.0