Features - User Management (Phase 4.1): - Database: Add user_modules table for fine-grained module permissions - Database: Add 4 user permissions (view/create/edit/delete) to role_permissions - Backend: UserService (780 lines) - CRUD with tenant isolation - Backend: UserController + UserRoutes (648 lines) - 13 API endpoints - Backend: Batch import users from Excel - Frontend: UserListPage (412 lines) - list/filter/search/pagination - Frontend: UserFormPage (341 lines) - create/edit with module config - Frontend: UserDetailPage (393 lines) - details/tenant/module management - Frontend: 3 modal components (592 lines) - import/assign/configure - API: GET/POST/PUT/DELETE /api/admin/users/* endpoints Architecture Upgrade - Module Permission System: - Backend: Add getUserModules() method in auth.service - Backend: Login API returns modules array in user object - Frontend: AuthContext adds hasModule() method - Frontend: Navigation filters modules based on user.modules - Frontend: RouteGuard checks requiredModule instead of requiredVersion - Frontend: Remove deprecated version-based permission system - UX: Only show accessible modules in navigation (clean UI) - UX: Smart redirect after login (avoid 403 for regular users) Fixes: - Fix UTF-8 encoding corruption in ~100 docs files - Fix pageSize type conversion in userService (String to Number) - Fix authUser undefined error in TopNavigation - Fix login redirect logic with role-based access check - Update Git commit guidelines v1.2 with UTF-8 safety rules Database Changes: - CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled) - ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code) - INSERT 4 permissions + role assignments - UPDATE PUBLIC tenant with 8 module subscriptions Technical: - Backend: 5 new files (~2400 lines) - Frontend: 10 new files (~2500 lines) - Docs: 1 development record + 2 status updates + 1 guideline update - Total: ~4900 lines of code Status: User management 100% complete, module permission system operational
36 KiB
ASL 模块任务分解(To-do List)
文档版本: V3.2
创建日期: 2025-11-16
适用阶段: MVP(标题摘要初筛)
预计周期: 4 周
最后更新: 2025-11-21
⭐ 重要:基于真实架构(Frontend-v2 + Backend + asl_schema)
📊 MVP核心功能进度: ✅ 100% 完成(Week 1-3 提前完成)
📊 质量优化进度: 🔄 60% 完成(准确率60%,目标85%)
📋 使用说明
本文档是 ASL 标题摘要初筛模块 的详细任务分解清单,基于 真实的架构基础:
- ✅ Frontend-v2(顶部导航 + 模块注册)- Week 2 已完成
- ✅ Backend 增量演进(legacy/ + common/ + modules/)- Week 2 已完成
- ✅ 数据库 10个Schema隔离 - Week 1 已完成
任务状态标记:
[ ]- 待开始[🔄]- 进行中[✅]- 已完成[❌]- 已取消/跳过
🌥️ 云原生开发要求(2025-11-16 新增)
⭐ 重要提醒:所有任务必须遵循云原生开发规范
详细规范:云原生开发规范
核心要求
| 要求 | 说明 |
|---|---|
| ✅ 存储抽象层 | 使用 StorageFactory,支持本地/OSS切换 |
| ✅ 内存解析 | Excel导入使用 xlsx.read(buffer),不落盘 |
| ✅ 异步任务 | LLM筛选必须异步处理(> 10秒) |
| ✅ 环境变量 | 所有配置从 .env 读取 |
| ✅ 数据库连接池 | 使用全局 prisma 实例 |
| ✅ OSS字段预留 | pdfUrl, pdfOssKey, pdfFileSize |
每日检查清单
提交代码前必须确认:
- 是否使用存储抽象层?
- 是否避免文件落盘?
- 是否使用全局 prisma 实例?
- 是否所有配置都从环境变量读取?
- 长时间任务是否异步处理?
🗓️ Week 1: 数据库Schema与后端API框架(Day 1-5)✅ 已完成
完成日期: 2025-11-18
实际耗时: 1天(提前4天)
完成报告: Week 1完成报告
API测试: ASL-API测试报告
Day 1: Prisma Schema 设计 ✅
数据库任务
-
[✅] T1.1.1 设计 asl_schema 表结构
- 文件:
backend/prisma/schema.prisma - 新增4个模型:
AslScreeningProject(筛选项目表)AslLiterature(文献条目表)AslScreeningResult(筛选结果表)AslScreeningTask(筛选任务表)
- 使用
@@schema("asl_schema")指定Schema - ⭐ 新增要求(云原生):在
AslLiterature中添加 OSS 字段pdfUrl String? @map("pdf_url")- PDF访问URLpdfOssKey String? @map("pdf_oss_key")- OSS存储KeypdfFileSize Int? @map("pdf_file_size")- 文件大小(字节)- 说明:MVP阶段预留,V1.0阶段使用
- 预计耗时:2 小时
- 负责人:后端开发
- 参考:
02-标题摘要初筛开发计划.mdWeek 1 Day 1
- 文件:
-
[✅] T1.1.2 在 User 模型中添加关联
// backend/prisma/schema.prisma - User模型添加 aslProjects AslScreeningProject[] @relation("AslProjects")- 实际耗时:5 分钟
- 完成人:AI Assistant
-
[✅] T1.1.3 运行 Prisma 迁移
cd backend npx tsx scripts/create-asl-tables.ts # 手动SQL创建- 实际耗时:10 分钟
- 完成人:AI Assistant
-
[✅] T1.1.4 生成 Prisma Client
npx prisma generate- 实际耗时:3 分钟
- 完成人:AI Assistant
-
[✅] T1.1.5 验证数据库表创建
- 使用脚本验证数据库
- 检查 asl_schema 下的4个表 ✅
- 检查索引和外键 ✅
- 实际耗时:5 分钟
- 完成人:AI Assistant
Day 1 验收标准 ✅:
- ✅ asl_schema 4张表创建成功
- ✅ Prisma Client 生成无错误
- ✅ 可查询 asl_schema 表
Day 2: 后端目录结构创建 ✅
⭐ 前置条件(2025-11-17 更新):平台基础设施已完成实施 ✅
完成状态:8个核心模块,100%测试通过
完成报告:平台基础设施实施完成报告
使用指南:backend/src/common/README.md
平台已提供的8个核心模块(ASL模块无需实现)
平台基础设施已完成(2025-11-17):
| # | 服务 | 路径 | 使用方式 | 说明 |
|---|---|---|---|---|
| 1 | 存储服务 | common/storage/ |
import { storage } from '@/common/storage' |
文件上传下载(本地/OSS切换) |
| 2 | 日志系统 | common/logging/ |
import { logger } from '@/common/logging' |
结构化JSON日志 |
| 3 | 缓存服务 | common/cache/ |
import { cache } from '@/common/cache' |
内存/Redis缓存 |
| 4 | 异步任务 | common/jobs/ |
import { jobQueue } from '@/common/jobs' |
长时间任务处理 |
| 5 | 健康检查 | common/health/ |
import { registerHealthRoutes } from '@/common/health' |
SAE健康检查 |
| 6 | 监控指标 | common/monitoring/ |
import { Metrics } from '@/common/monitoring' |
性能监控和告警 |
| 7 | 数据库连接池 | config/database.ts |
import { prisma } from '@/config/database' |
全局Prisma实例 |
| 8 | 环境配置 | config/env.ts |
import { env } from '@/config/env' |
统一配置管理 |
示例代码:
// ASL模块直接使用平台服务
import { storage, logger, cache, jobQueue } from '@/common'
import { prisma } from '@/config/database'
import { Metrics } from '@/common/monitoring'
// 上传文件
const url = await storage.upload('asl/literature/123.pdf', pdfBuffer)
// 记录日志
logger.info('Literature uploaded', { projectId, url })
// 缓存数据
await cache.set(`project:${projectId}`, data, 3600)
// 创建异步任务
const job = await jobQueue.push('asl:screening', { projectId })
// 记录监控指标
Metrics.recordAPIResponseTime('POST', '/api/v1/asl/screening', 200, 150)
⚠️ 禁止的操作(必须遵守):
| 禁止操作 | 正确做法 | 原因 |
|---|---|---|
fs.writeFileSync() |
使用 storage.upload() |
Serverless容器重启丢失文件 |
new PrismaClient() |
使用全局 prisma 实例 |
避免连接数暴增(已配置连接池) |
| 硬编码配置 | 使用 process.env 或 env |
配置管理混乱 |
| 同步处理LLM批量任务 | 使用 jobQueue.push() |
避免Serverless超时 |
直接使用 console.log() |
使用 logger.info() |
日志格式标准化 |
| 自己实现缓存逻辑 | 使用 cache.set() / cache.get() |
平台已提供分布式缓存 |
后端任务
-
[✅] T1.2.1 创建 ASL 模块目录结构
cd backend/src/modules mkdir -p asl/{routes,controllers,services,schemas,types,utils}- 预计耗时:5 分钟
- 负责人:后端开发
-
T1.2.2 创建路由文件
routes/index.ts- 路由注册- 实现占位函数(返回404或空数组)
- 预计耗时:30 分钟
- 负责人:后端开发
-
T1.2.3 创建控制器文件
controllers/projectController.ts- 项目控制器controllers/literatureController.ts- 文献控制器controllers/screeningController.ts- 筛选控制器- 创建占位函数(每个控制器5-7个函数)
- 预计耗时:1 小时
- 负责人:后端开发
-
T1.2.4 创建服务层文件
services/projectService.ts- 项目业务逻辑services/literatureService.ts- 文献业务逻辑services/llmScreeningService.ts- LLM筛选服务- 预计耗时:30 分钟
- 负责人:后端开发
-
[✅] T1.2.5 创建类型定义文件
// types/screening.types.ts export interface Literature { ... } export interface ScreeningResult { ... } export interface Protocol { ... }- 预计耗时:30 分钟
- 负责人:后端开发
Day 2 验收标准 ✅:
- ✅ ASL 模块目录结构完整(5个子目录,9个文件)
- ✅ 所有占位文件创建完成
- ✅ 可正常使用平台服务(8个核心模块):
- ✅
import { storage } from '@/common/storage'可用 - ✅
import { logger } from '@/common/logging'可用 - ✅
import { cache } from '@/common/cache'可用 - ✅
import { jobQueue } from '@/common/jobs'可用 - ✅
import { prisma } from '@/config/database'可用 - ✅
import { Metrics } from '@/common/monitoring'可用
- ✅
Day 3: 注册ASL路由 ✅
后端任务
-
[✅] T1.3.1 实现
routes/index.ts- 注册所有API路由
- 参考
legacy/routes/的风格 - 预计耗时:1 小时
- 负责人:后端开发
- 参考:
02-标题摘要初筛开发计划.mdWeek 1 Day 2
-
[✅] T1.3.2 在
src/index.ts中注册ASL路由import { aslRoutes } from './modules/asl/routes/index.js' await app.register(aslRoutes, { prefix: '/api/v1/asl' }) console.log('✅ ASL 路由已注册到 /api/v1/asl/*')- 预计耗时:10 分钟
- 负责人:后端开发
-
[✅] T1.3.3 测试路由可访问性
# 启动后端服务 cd backend && npm run dev # 测试健康检查 curl http://localhost:3001/api/v1/asl/projects- 预计耗时:10 分钟
- 负责人:后端开发
Day 3 验收标准 ✅:
- ✅ 后端服务正常启动
- ✅ ASL路由注册成功(/api/v1/asl)
- ✅ API可访问(10个端点)
Day 4-5: 实现基础API ✅
后端任务
-
[✅] T1.4.1 实现
projectService.tscreateProject(userId, data)- 创建项目listProjects(userId)- 获取项目列表getProject(projectId)- 获取项目详情- 使用 Prisma Client 操作 asl_schema
- 预计耗时:2 小时
- 负责人:后端开发
-
[✅] T1.4.2 实现
projectController.tscreateProject- 控制器listProjects- 控制器getProject- 控制器- 请求验证、响应格式化
- 预计耗时:1.5 小时
- 负责人:后端开发
-
[✅] T1.4.3 实现
literatureService.tsimportBatch(projectId, literatures)- 批量导入listLiteratures(projectId, page, pageSize)- 分页查询- 去重逻辑(基于DOI和标题)
- 预计耗时:2 小时
- 负责人:后端开发
-
[✅] T1.4.4 实现
literatureController.tsimportLiteratures- 导入控制器listLiteratures- 列表控制器- Excel数据验证
- 预计耗时:1.5 小时
- 负责人:后端开发
-
[✅] T1.4.5 API测试(完整测试脚本)
- 创建 Postman 测试集合
- 测试所有已实现的API
- 预计耗时:1 小时
- 负责人:后端开发
Day 4-5 验收标准 ✅:
- ✅ 项目管理API可调用(5个接口)
- ✅ 文献导入API可调用(4个接口)
- ✅ 数据正确保存到 asl_schema
- ✅ 所有测试通过(7/7 - 100%)
🗓️ Week 2: LLM筛选核心(Day 6-10)✅ 已完成
完成日期: 2025-11-21
实际耗时: 3天
完成报告: Prompt设计与测试完成报告
实际准确率: 60%(目标85%,需优化)
Day 6: JSON Schema 与提示词设计 ✅
后端任务
-
[✅] T2.1.1 定义 JSON Schema
- 文件:
backend/src/modules/asl/schemas/screening.schema.ts - 定义输出结构(decision, reason, confidence, pico)
- 实际耗时:1 小时
- 完成人:AI Assistant
- 文件:
-
[✅] T2.1.2 安装验证库
cd backend npm install ajv- 实际耗时:5 分钟
- 完成人:AI Assistant
-
[✅] T2.1.3 编写 Schema 验证函数
- 使用
Ajv验证 - 错误信息格式化
- 实际耗时:30 分钟
- 完成人:AI Assistant
- 使用
-
[✅] T2.1.4 设计提示词模板 v1.0.0
- 文件:
backend/prompts/asl/screening/v1.0.0-mvp.txt - 包含:PICO标准、纳排标准、输出格式
- 实际耗时:4 小时
- 完成人:AI Assistant + 用户
- 文件:
-
[✅] T2.1.5 人工测试提示词
- 手动调用 LLM(使用 10 篇样本)
- 评估输出质量
- 迭代优化提示词
- 实际耗时:2 小时
- 完成人:AI Assistant + 用户
Day 6 验收标准 ✅:
- ✅ JSON Schema 定义完成
- ⚠️ 提示词人工测试准确率 60%(目标80%,需后续优化)
Day 7: LLM 服务封装 ✅
后端任务
-
[✅] T2.2.1 创建
llmScreeningService.ts- 实际耗时:10 分钟
- 完成人:AI Assistant
-
[✅] T2.2.2 实现
callModel方法- 调用
LLMFactory.createLLM()(复用 common/llm) - 设置参数(temperature: 0)
- 错误处理
- 实际耗时:1 小时
- 完成人:AI Assistant
- 调用
-
[✅] T2.2.3 实现
parseModelOutput方法- JSON 解析(使用
common/utils/jsonParser.js) - Schema 验证
- 格式化为
ModelDecision - 实际耗时:1 小时
- 完成人:AI Assistant
- JSON 解析(使用
-
[✅] T2.2.4 实现
compareDecisions方法- 对比两个模型的 PICO 判断
- 识别冲突字段(仅结论不一致)
- 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T2.2.5 实现
shouldReview方法- 自动分流规则
- 置信度阈值(< 0.7)
- 实际耗时:30 分钟
- 完成人:AI Assistant
-
[✅] T2.2.6 实现
dualModelScreening方法- 并行调用两个模型(
Promise.all) - 汇总结果
- 实际耗时:1 小时
- 完成人:AI Assistant
- 并行调用两个模型(
-
[✅] T2.2.7 单元测试
- 测试 JSON 解析
- 测试冲突检测
- 测试分流规则
- 实际耗时:2 小时
- 完成人:AI Assistant
Day 7 验收标准 ✅:
- ✅ 可成功调用 DeepSeek 和 Qwen3
- ✅ JSON Schema 验证通过率 100%
- ✅ 冲突检测准确(仅结论不一致)
Day 8: 批量筛选任务管理 ✅
后端任务
-
[✅] T2.3.1 实现
batchScreening方法- 串行处理(避免API限流)
- 进度计算
- 实际耗时:2 小时
- 完成人:AI Assistant
-
[✅] T2.3.2 实现任务创建
screeningService.startScreeningTask- 初始化任务记录(AslScreeningTask表)
- 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T2.3.3 实现任务状态更新
screeningService.processLiteraturesInBackground- 更新 processedItems, deepseekProcessed, qwenProcessed 等
- 实际耗时:1.5 小时
- 完成人:AI Assistant
-
[✅] T2.3.4 实现结果保存
- 单篇保存到
AslScreeningResult表 - 冲突检测(仅结论不一致)
- 实际耗时:2 小时
- 完成人:AI Assistant
- 单篇保存到
-
[✅] T2.3.5 错误处理和重试
- 单篇失败不影响整体
- 记录错误信息
- 实际耗时:1 小时
- 完成人:AI Assistant
Day 8 验收标准 ✅:
- ✅ 可批量处理 199 篇文献(串行)
- ✅ 任务状态正确记录
- ✅ 结果正确保存到数据库
- ✅ 进度实时更新(每1条)
Day 9: 筛选 API 开发 ✅
后端任务
-
[✅] T2.4.1 实现启动筛选 API
- 自动在文献导入后启动(
literatureController.importLiteratures) - 创建任务
- ⭐ 云原生要求:异步执行筛选(立即返回taskId,后台处理)
- 避免请求超时(SAE默认30秒超时限制)
- 实际耗时:2 小时
- 完成人:AI Assistant
- 自动在文献导入后启动(
-
[✅] T2.4.2 实现进度查询 API
GET /api/v1/asl/projects/:projectId/screening-task- 返回实时进度(总数、已处理、成功、冲突、失败、DS处理数、Qwen处理数)
- 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T2.4.3 实现结果查询 API
GET /api/v1/asl/projects/:projectId/screening-results- 支持过滤(all, conflict, included, excluded, reviewed)
- 分页(后端分页)
- 实际耗时:2 小时
- 完成人:AI Assistant
-
[✅] T2.4.4 实现更新决策 API
POST /api/v1/asl/screening-results/:resultId/review- 人工复核提交
- 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T2.4.5 Postman 测试
- 创建测试集合
- 测试各种场景
- 实际耗时:1 小时
- 完成人:AI Assistant
Day 9 验收标准 ✅:
- ✅ API 调用成功
- ✅ 任务可异步执行
- ✅ 进度查询实时准确(1秒轮询)
Day 10: 后端集成测试 ✅
后端任务
-
[✅] T2.5.1 端到端测试(199篇文献)
- 导入文献 → 自动启动筛选 → 查询结果
- 实际耗时:1 小时执行 + 1小时分析
- 完成人:AI Assistant + 用户
-
[✅] T2.5.2 性能测试
- 测试 199 篇文献筛选时间
- 实际:约33-66分钟(串行处理)
- 实际耗时:1 小时
- 完成人:AI Assistant + 用户
-
[✅] T2.5.3 质量评估
- 计算准确率(对比金标准)
- 计算双模型一致率
- 计算冲突率
- 实际耗时:2 小时
- 完成人:AI Assistant + 用户
- 结果:准确率60%, 一致率70-100%, JSON验证率100%
-
[✅] T2.5.4 修复 Bug
- 修复字段映射问题(PICOS、模型名称)
- 修复列表顺序问题
- 修复进度显示问题
- 实际耗时:3 小时
- 完成人:AI Assistant
Week 2 总验收标准 ⚠️ 部分达标:
- ✅ 可成功筛选 199 篇文献
- ⚠️ 准确率 60%(目标85%,需Prompt优化)
- ✅ 双模型一致率 70-100%
- ⚠️ 性能:199篇约33-66分钟(串行处理,可优化为并发)
- ✅ JSON Schema验证率100%
🗓️ Week 3: 前端模块开发(Day 11-15)✅ 已完成
完成日期: 2025-11-21
实际耗时: 2天
完成报告: Week2-Day2完成报告
说明: Week 3任务实际在Week 2完成
Day 11: 前端模块结构创建 ✅
前端任务
-
[✅] T3.1.1 更新
modules/asl/index.tsx- 创建左侧导航布局(ASLLayout)
- 7个主模块,标题摘要初筛含3个子页面
- 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T3.1.2 创建 ASL 子目录
cd frontend-v2/src/modules/asl mkdir pages components api hooks types utils- 实际耗时:5 分钟
- 完成人:AI Assistant
-
[✅] T3.1.3 创建路由配置
- 直接在
index.tsx中使用<Route>定义 - 使用
lazy()懒加载 - 实际耗时:30 分钟
- 完成人:AI Assistant
- 直接在
-
[✅] T3.1.4 创建3个主页面
pages/TitleScreeningSettings.tsx- 设置与启动pages/ScreeningWorkbench.tsx- 审核工作台pages/ScreeningResults.tsx- 初筛结果(占位)- 实际耗时:30 分钟
- 完成人:AI Assistant
-
[✅] T3.1.5 测试路由
- 启动前端:
cd frontend-v2 && npm run dev - 访问
http://localhost:3001/literature - 确认顶部导航显示"AI智能文献"
- 实际耗时:10 分钟
- 完成人:AI Assistant + 用户
- 启动前端:
Day 11 验收标准 ✅:
- ✅ 顶部导航显示"AI智能文献"
- ✅ 左侧导航显示7个模块
- ✅ 点击后进入"设置与启动"页面
Day 12: Excel 上传功能 ✅
前端任务
-
[✅] T3.2.1 安装依赖
cd frontend-v2 npm install xlsx- 实际耗时:5 分钟
- 完成人:AI Assistant
-
[✅] T3.2.2 创建 Excel上传组件
- 集成在
TitleScreeningSettings.tsx中 - 文件选择(
antd Upload.Dragger) - 文件类型验证(.xls, .xlsx)
- 实际耗时:1 小时
- 完成人:AI Assistant
- 集成在
-
[✅] T3.2.3 实现 Excel 解析逻辑
- 使用
xlsx库解析 - ⭐ 云原生要求:内存解析
xlsx.read(buffer),禁止落盘 - 字段映射(Title/title → title,支持中英文)
- 数据验证(title和abstract必填)
- 文件:
utils/excelUtils.ts - 实际耗时:3 小时
- 完成人:AI Assistant
- 使用
-
[✅] T3.2.4 实现去重逻辑
- 基于 DOI 去重(优先)
- 基于标题去重(标准化,去空格/标点)
- 去重统计展示
- 文件:
utils/excelUtils.ts - 实际耗时:1.5 小时
- 完成人:AI Assistant
-
[✅] T3.2.5 实现文献预览表格
- 使用
Ant Design Table - 显示:序号、标题、摘要、作者、年份、期刊、PMID、DOI
- 固定列宽、Tooltip显示全文
- 无分页(内存中)
- 实际耗时:2 小时
- 完成人:AI Assistant
- 使用
-
[✅] T3.2.6 实现Excel模板下载
- 生成包含字段说明的Excel模板
- 两个Sheet:文献列表、字段说明
- 实际耗时:1 小时
- 完成人:AI Assistant
Day 12 验收标准 ✅:
- ✅ 可成功上传 Excel 文件
- ✅ 解析后数据正确展示
- ✅ 去重功能正常(DOI优先,标题辅助)
- ✅ Excel模板下载正常
Day 13: API 客户端封装 ✅
前端任务
-
[✅] T3.3.1 创建 API 客户端
api/index.ts- 使用
fetch+ 统一错误处理 - 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T3.3.2 实现项目 API
createProject(data)listProjects()getProject(id)- 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T3.3.3 实现文献 API
importLiteratures(projectId, literatures)- 实际耗时:30 分钟
- 完成人:AI Assistant
-
[✅] T3.3.4 实现筛选 API
getScreeningTask(projectId)- 获取任务进度getScreeningResultsList(projectId, params)- 获取结果列表getScreeningResultDetail(resultId)- 获取结果详情reviewScreeningResult(resultId, data)- 人工复核- 实际耗时:2 小时
- 完成人:AI Assistant
-
[✅] T3.3.5 前后端联调
- 测试所有API调用
- 错误处理(统一message提示)
- Loading 状态
- 实际耗时:2 小时
- 完成人:AI Assistant + 用户
Day 13 验收标准 ✅:
- ✅ API 客户端可正常调用后端
- ✅ 上传Excel后数据保存到数据库
- ✅ 自动启动筛选任务
Day 14-15: 审核工作台(核心UI)✅
前端任务
-
[✅] T3.4.1 实现
ScreeningWorkbench页面- 任务进度显示(轮询1秒/次)
- 双行表格结构(使用
rowSpan) - 实际耗时:3 小时
- 完成人:AI Assistant
-
[✅] T3.4.2 实现表头
- 序号、文献标题、结论、操作、模型、P、I、C、S
- 压缩列宽、模型名缩写(DS/Qw)
- 实际耗时:2 小时
- 完成人:AI Assistant
-
[✅] T3.4.3 实现主行(双行)
- 点击标题展开/收起证据
- 文献标题、DS和Qwen的PICO判断(单字母)
- 冲突状态(红色背景)
- 结论Tag(纳入/排除)
- 实际耗时:4 小时
- 完成人:AI Assistant
-
[✅] T3.4.4 实现展开行
- 显示DS和Qwen的详细PICOS判断、证据、理由
- 两栏布局(左DS,右Qwen)
- 实际耗时:2 小时
- 完成人:AI Assistant
-
[✅] T3.4.5 实现冲突高亮
- 冲突行背景色浅红(仅结论不一致)
- 冲突Tag显示
- 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T3.4.6 实现复核Drawer
- 使用
Ant Design Drawer(1000px宽) - 左侧70%:文献详情、模型判断、证据
- 右侧30%:人工复核表单(sticky)
- 实际耗时:4 小时
- 完成人:AI Assistant
- 使用
-
[✅] T3.4.7 实现筛选Tab
- 全部、冲突、已纳入、已排除、已复核
- 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T3.4.8 实现分页
- 后端分页(20条/页)
- 实际耗时:30 分钟
- 完成人:AI Assistant
Day 14-15 验收标准 ✅:
- ✅ 审核工作台完整可用
- ✅ 表格可正确展示筛选结果(双行)
- ✅ 冲突项高亮显示(红色背景)
- ✅ 复核Drawer可弹出并提交
- ✅ 进度实时更新(1秒轮询)
- ✅ 列表顺序与Excel上传一致
🗓️ Week 4: 结果展示与集成测试(Day 16-20)✅ 已完成
完成日期: 2025-11-21
实际耗时: 1天(3小时)
完成报告: Week4完成报告
架构验证: ✅ 完全符合云原生开发规范
Day 16: 结果统计与展示 ✅
前端任务
-
[✅] T4.1.1 实现统计概览卡片
- 4个卡片(总数、纳入、排除、待复核)
- 使用
Ant Design Statistic - 实际耗时:30 分钟
- 完成人:AI Assistant
-
[✅] T4.1.2 实现 PRISMA 式排除总结
- 按排除原因分组统计(后端聚合)
- 柱状图展示(Progress组件)
- 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T4.1.3 实现结果列表 Tab 页
- 全部、已纳入、已排除、待复核 Tab
- Tab数量动态显示
- 实际耗时:30 分钟
- 完成人:AI Assistant
-
[✅] T4.1.4 实现结果表格(混合方案)
- 列:序号、标题、AI共识、排除原因、人工最终决策、状态、操作
- 可点击标题展开查看双模型详细判断
- 总宽度870px(无需横向滚动)
- 实际耗时:2 小时
- 完成人:AI Assistant
-
[✅] T4.1.5 实现后端统计API
- GET /projects/:projectId/statistics
- Prisma并行聚合查询
- 实际耗时:1 小时
- 完成人:AI Assistant
Day 16 验收标准 ✅:
- ✅ 统计数据正确展示
- ✅ PRISMA 排除总结清晰
- ✅ 结果列表可正常查看
- ✅ 混合方案解决逻辑矛盾
- ✅ 云原生架构验证通过
Day 17: Excel 导出功能
后端任务
-
T4.2.1 后端实现导出逻辑
- 使用
exceljs库 - 生成 Excel 文件
- 预计耗时:2 小时
- 负责人:后端开发
- 使用
-
T4.2.2 实现导出 API
GET /api/v1/asl/projects/:id/screening/results/export- 支持过滤参数(导出全部/仅纳入/仅排除)
- 预计耗时:1.5 小时
- 负责人:后端开发
前端任务
-
T4.2.3 前端实现导出按钮
- 调用导出 API
- 下载文件
- 预计耗时:1 小时
- 负责人:前端开发
-
[✅] T4.2.1 创建Excel导出工具
- 文件:
utils/excelExport.ts - 使用
xlsx库(前端生成,零文件落盘) - 实际耗时:1.5 小时
- 完成人:AI Assistant
- 文件:
-
[✅] T4.2.2 实现导出功能
- 导出统计摘要(2个Sheet)
- 导出初筛结果(当前Tab)
- 导出选中项
- 实际耗时:1 小时
- 完成人:AI Assistant
-
[✅] T4.2.3 Excel格式优化(混合方案)
- 共40列完整信息
- 包含AI共识、双模型详细判断、人工决策
- 一行显示全部信息
- 自动设置列宽
- 实际耗时:30 分钟
- 完成人:AI Assistant
Day 17 验收标准 ✅:
- ✅ 可成功导出 Excel(3种方式)
- ✅ 导出格式规范(40列)
- ✅ 数据完整准确
- ✅ 云原生:前端生成,零文件落盘
Day 18: 完整流程测试 ✅
集成测试任务
-
[✅] T4.3.1 端到端完整流程测试
- 上传 → 筛选 → 复核 → 统计 → 导出
- 使用真实的 7 篇测试数据
- 实际耗时:1 小时
- 完成人:AI Assistant + 用户
-
[✅] T4.3.2 UI/UX优化
- 修复逻辑矛盾(纳入不显示排除原因)
- 实现混合方案(AI共识+人工决策)
- 优化表格宽度(870px,无需滚动)
- 实际耗时:1 小时
- 完成人:AI Assistant + 用户
-
[✅] T4.3.3 性能测试
- 统计API:<500ms(199篇)
- Excel导出:<3秒(199篇)
- 实际耗时:30 分钟
- 完成人:AI Assistant
-
[✅] T4.3.4 创建快速测试工具
scripts/get-test-projects.mjs- 自动推荐有数据的项目
- 生成测试URL
- 实际耗时:30 分钟
- 完成人:AI Assistant
Day 18 验收标准 ✅:
- ✅ 完整流程无阻塞
- ✅ 混合方案解决问题
- ✅ 性能达标
- ✅ 符合云原生规范
Day 19: 质量验收
质量验收任务
-
T4.4.1 准确率测试
- 使用金标准数据集(199 篇)
- 计算准确率、召回率、F1
- 目标:准确率 ≥ 85%
- 预计耗时:2 小时
- 负责人:AI工程师 + 医学专家
-
T4.4.2 双模型一致性测试
- 计算一致率
- 目标:≥ 80%
- 预计耗时:1 小时
- 负责人:AI工程师
-
T4.4.3 JSON Schema 验证率测试
- 统计验证通过率
- 目标:≥ 95%
- 预计耗时:30 分钟
- 负责人:后端开发
-
T4.4.4 人工复核队列测试
- 统计需人工复核的比例
- 目标:≤ 20%
- 预计耗时:30 分钟
- 负责人:AI工程师
-
T4.4.5 根据测试结果优化
- 调整提示词
- 调整分流阈值
- 预计耗时:3 小时
- 负责人:AI工程师
Day 19 验收标准:
- ✅ 准确率 ≥ 85%
- ✅ 双模型一致率 ≥ 80%
- ✅ JSON Schema 验证通过率 ≥ 95%
- ✅ 人工复核队列 ≤ 20%
Day 20: 文档与交付
文档任务
-
T4.5.1 编写用户手册
- 功能介绍
- 操作步骤
- 常见问题
- 预计耗时:3 小时
- 负责人:产品经理
-
T4.5.2 编写技术文档
- 架构设计
- API 文档
- 数据库设计
- 预计耗时:2 小时
- 负责人:后端开发
-
T4.5.3 编写测试报告
- 测试用例
- 测试结果
- 质量指标
- 预计耗时:2 小时
- 负责人:测试
-
T4.5.4 代码审查
- 代码规范检查
- 安全性检查
- 性能检查
- 预计耗时:2 小时
- 负责人:技术 Leader
-
T4.5.5 准备演示环境
- 部署到测试环境
- 准备演示数据
- 预计耗时:1 小时
- 负责人:运维
Day 20 验收标准:
- ✅ 文档完整
- ✅ 代码质量合格
- ✅ 测试报告完整
- ✅ 演示环境就绪
📊 总体验收清单(2025-11-21 更新)
功能完整性(MVP核心)
- [✅] 用户可上传 Excel 文件
- [✅] Excel 格式验证正常(中英文表头)
- [✅] 文献去重功能正常(DOI优先,标题辅助)
- [✅] AI 双模型筛选可运行(DeepSeek + Qwen)
- [✅] 冲突自动检测和标记(仅结论不一致)
- [✅] 人工复核界面完整(DetailReviewDrawer)
- [✅] 批量选择功能正常(Checkbox多选)
- [✅] 结果统计正确展示(统计概览+PRISMA排除分析)
- [✅] Excel 导出功能正常(3种导出方式)
- [✅] ASL模块在顶部导航显示并可点击
- [✅] 混合方案解决逻辑矛盾(AI决策+人工决策明确区分)
质量指标
- [⚠️] 准确率 60%(目标85%,需Prompt优化)
- [✅] 双模型一致率 70-100%
- [✅] JSON Schema 验证通过率 100%
- [⚠️] 人工复核队列 20-30%(目标≤20%)
性能指标
- [⚠️] 199 篇文献筛选 33-66 分钟(串行,可优化为3-5并发)
- [✅] Excel 上传响应 < 1 秒(内存解析)
- [✅] 页面加载 < 2 秒
架构验证
- [✅] ASL模块正确注册(左侧导航)
- [✅] 后端路由注册到 /api/v1/asl/*
- [✅] 数据保存到 asl_schema
- [✅] 复用 common/llm 成功(LLMFactory)
- [✅] Prisma Client 正常工作(全局实例)
- [✅] 云原生要求:内存解析Excel
- [✅] 云原生要求:异步处理筛选任务
🚀 Phase 2: 智能Prompt生成模块(Week 5-7)
前置条件: MVP阶段(Week 1-4)完成
开发周期: 3周
优先级: P1(高级功能)
详细设计: 智能Prompt生成模块开发计划
核心目标
解决问题: 消除AI与人类对边界情况的理解差异
核心流程:
用户输入PICOS → AI分析边界情况 → 用户确认 → 生成自定义Prompt → 筛选
🗓️ Week 5: 后端开发(Day 21-25)
Day 21-22: PICOS分析服务
-
T5.1.1 创建Prompt配置数据表
- 文件:
backend/prisma/schema.prisma - 新增模型:
PromptConfiguration - 预计耗时:2小时
- 文件:
-
T5.1.2 实现PICOS分析服务
- 文件:
backend/src/modules/asl/services/picosAnalyzer.ts - 功能:调用LLM分析PICOS,生成边界问题
- 预计耗时:1天
- 文件:
-
T5.1.3 API: 分析PICOS
- 路由:
POST /api/v1/asl/prompt/analyze - 预计耗时:3小时
- 路由:
Day 23: Prompt生成服务
-
T5.2.1 实现Prompt生成逻辑
- 文件:
backend/src/modules/asl/services/promptGenerator.ts - 预计耗时:1天
- 文件:
-
T5.2.2 API: 确认边界规则并生成Prompt
- 路由:
POST /api/v1/asl/prompt/confirm-rules - 预计耗时:2小时
- 路由:
Day 24: Prompt保存与使用
-
T5.3.1 API: 保存最终Prompt
- 路由:
POST /api/v1/asl/prompt/save - 预计耗时:3小时
- 路由:
-
T5.3.2 修改筛选服务支持自定义Prompt
- 新增参数:
customPromptOverride?: string - 预计耗时:2小时
- 新增参数:
Day 25: 测试与优化
-
T5.4.1 单元测试
- 预计耗时:3小时
-
T5.4.2 集成测试
- 预计耗时:3小时
🗓️ Week 6: 前端开发(Day 26-30)
Day 26: PICOS输入界面
-
T6.1.1 创建PICOS配置页面
- 路径:
/asl/projects/:id/prompt-config - 预计耗时:4小时
- 路径:
-
T6.1.2 PICOS输入表单组件
- 7个输入字段
- 预计耗时:4小时
Day 27-28: 用户确认界面
-
T6.2.1 AI理解展示组件
- 显示必须纳入/排除的要素
- 预计耗时:1天
-
T6.2.2 边界问题确认组件
- 逐个确认边界问题
- 预计耗时:1天
Day 29: Prompt编辑器
- T6.3.1 Prompt预览与编辑组件
- 支持用户编辑和保存
- 预计耗时:1天
Day 30: 集成与测试
-
T6.4.1 完整流程集成
- 预计耗时:3小时
-
T6.4.2 UI/UX优化
- 预计耗时:3小时
🗓️ Week 7: 优化与上线(Day 31-35)
Day 31-32: 功能完善
-
T7.1.1 Prompt模板管理
- 预计耗时:1天
-
T7.1.2 在筛选任务中使用自定义Prompt
- 预计耗时:4小时
Day 33: 测试
- T7.2.1 端到端测试
- 预计耗时:1天
Day 34-35: 优化与上线
-
T7.3.1 性能优化
- 预计耗时:4小时
-
T7.3.2 用户文档
- 预计耗时:4小时
-
T7.3.3 上线部署
- 预计耗时:4小时
Phase 2 验收标准
- 用户可以输入PICOS和纳排标准
- AI可以分析并生成5-8个边界问题
- 用户可以确认每个边界问题的处理方式
- 系统可以自动生成自定义Prompt
- 用户可以编辑生成的Prompt
- 筛选任务可以使用自定义Prompt
- Prompt生成准确率 ≥ 90%
📊 完整进度跟踪(2025-11-21 更新)
| 阶段 | Week | 任务 | 状态 | 完成时间 | 备注 |
|---|---|---|---|---|---|
| MVP | Week 1 | 数据库+后端API | ✅ | 2025-11-18 | 提前4天完成 |
| MVP | Week 2 | LLM筛选核心 | ✅ | 2025-11-21 | 准确率60%,需优化 |
| MVP | Week 3 | 前端UI(设置+工作台) | ✅ | 2025-11-21 | 实际在Week 2完成 |
| MVP | Week 4 | 结果展示+导出 | ✅ | 2025-11-21 | 混合方案,云原生架构 |
| MVP优化 | - | Prompt优化 | 🔄 | - | 下一步:提升至85% |
| MVP优化 | - | 并发处理优化 | ⏸️ | - | 3-5并发,提升性能 |
| Phase 2 | Week 5 | 智能Prompt后端 | ⬜ | - | 待MVP质量达标后开始 |
| Phase 2 | Week 6 | 智能Prompt前端 | ⬜ | - | - |
| Phase 2 | Week 7 | 优化+上线 | ⬜ | - | - |
📚 相关文档
更新日志:
- 2025-11-21: V3.3 更新,Week 4功能完成(结果展示+Excel导出,混合方案解决逻辑矛盾)
- 2025-11-21: V3.2 更新,反映MVP核心功能完成状态(Week 1-3已完成,准确率60%需优化)
- 2025-11-18: V4.0 更新,整合智能Prompt生成模块(Phase 2: Week 5-7)
- 2025-11-18: V3.1 更新,补充平台基础设施完成状态(8个核心模块,禁止操作清单)
- 2025-11-16: V3.0 完全重写,基于真实架构(Frontend-v2 + Backend + asl_schema),详细到每个任务
- 2025-11-16: V2.0 完全重写,详细到每个任务(预计耗时、负责人、验收标准)
- 2025-10-29: V1.0 创建,初始占位符