# 下一阶段行动计划 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 { // 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