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
19 KiB
19 KiB
ASL 模块开发里程碑
文档版本: V3.0
创建日期: 2025-11-16
维护者: AI智能文献开发团队
最后更新: 2025-11-16
⭐ 重要:基于真实架构(Frontend-v2 + Backend增量演进)
📋 文档概述
本文档定义 ASL(AI智能文献)模块的完整开发里程碑,采用 MVP → V1.0 → V2.0 三阶段渐进式演进策略。
架构前提:
- ✅ Frontend-v2 全新架构(顶部导航 + 模块注册)- Week 2 Day 6-7 已完成
- ✅ Backend 增量演进架构(legacy/ + common/ + modules/)- Week 2 Day 8-9 已完成
- ✅ 数据库 10个Schema隔离 - Week 1 已完成
- 🚧 ASL 模块占位就绪,等待 Week 3 开发
🏗️ 当前架构基础(已完成)
Frontend-v2 真实架构
frontend-v2/src/
├── framework/ # ✅ 已实现(Week 2 Day 6-7)
│ ├── layout/
│ │ ├── MainLayout.tsx # ✅ 主布局(顶部导航)
│ │ └── TopNavigation.tsx # ✅ 顶部导航栏(6个模块)
│ ├── modules/
│ │ ├── moduleRegistry.ts # ✅ 模块注册中心
│ │ ├── ErrorBoundary.tsx # ✅ 错误边界
│ │ └── types.ts # ✅ 模块类型定义
│ ├── router/
│ │ └── RouteGuard.tsx # ✅ 路由守卫
│ └── permission/
│ ├── PermissionContext.tsx # ✅ 权限控制
│ └── usePermission.ts # ✅ 权限Hook
│
└── modules/ # 📦 业务模块
├── asl/ # 🚧 ASL模块(占位,Week 3开发)
│ └── index.tsx # ✅ 占位页面
├── aia/ # ✅ AI问答(占位)
├── pkb/ # ✅ 知识库(占位)
├── dc/ # ✅ 数据清洗(占位)
├── ssa/ # ✅ 统计分析(占位)
└── st/ # ✅ 统计工具(占位)
Backend 真实架构
backend/src/
├── legacy/ # ✅ 现有业务(Week 2 Day 8-9完成迁移)
│ ├── routes/ # 7个路由文件
│ │ ├── projects.ts # AIA: 项目路由
│ │ ├── agents.ts # AIA: 智能体路由
│ │ ├── conversations.ts # AIA: 对话路由
│ │ ├── chatRoutes.ts # AIA: 通用对话
│ │ ├── knowledgeBases.ts # PKB: 知识库路由
│ │ ├── batchRoutes.ts # PKB: 批处理路由
│ │ └── reviewRoutes.ts # RVW: 稿件审查路由
│ ├── controllers/ # 控制器
│ └── services/ # 服务
│
├── common/ # ✅ 通用能力层(已实现)
│ ├── llm/adapters/ # LLM适配器
│ │ ├── DeepSeekAdapter.ts # ✅ DeepSeek-V3
│ │ ├── QwenAdapter.ts # ✅ Qwen3-72B
│ │ └── LLMFactory.ts # ✅ 工厂类
│ ├── rag/
│ │ └── DifyClient.ts # ✅ RAG客户端
│ ├── document/
│ │ └── ExtractionClient.ts # ✅ 文档提取客户端
│ ├── middleware/
│ │ └── validateProject.ts # ✅ 验证中间件
│ └── utils/
│ └── jsonParser.ts # ✅ JSON解析工具
│
└── modules/ # 🌟 新模块开发区
└── asl/ # 🚧 ASL模块(空目录,Week 3开发)
└── (待创建)
Database Schema(已隔离)
PostgreSQL 15 + Prisma 6.17.0
✅ platform_schema - 用户表(users)
✅ aia_schema - AI问答(projects, conversations, messages等)
✅ pkb_schema - 知识库(knowledge_bases, documents, batch_tasks等)
🚧 asl_schema - AI智能文献(Week 3 定义表结构)
📋 common_schema - 通用能力层(预留)
📋 dc_schema - 数据清洗(预留)
📋 rvw_schema - 稿件审查(预留)
📋 admin_schema - 运营管理(预留)
📋 ssa_schema - 统计分析(预留)
📋 st_schema - 统计工具(预留)
🎯 总体战略
┌──────────────────────────────────────────────────────────────┐
│ ASL 三阶段演进路线图 │
├──────────────────────────────────────────────────────────────┤
│ MVP (4周) V1.0 (6周) V2.0 (8周) │
│ ├─ 基础可用 ├─ 高质量 ├─ 医学级 │
│ ├─ 快速验证 ├─ 智能优化 ├─ 自动审计 │
│ ├─ 成本优先 ├─ 质量提升 ├─ 完整追溯 │
│ └─ 人工复核 └─ 规则验证 └─ HITL智能分流 │
└──────────────────────────────────────────────────────────────┘
核心设计原则:
1. 架构先行:在已完成的 Frontend-v2 和 Backend 架构基础上开发
2. 分步实施:每阶段交付可用功能
3. 质量可控:准确率从85% → 90% → 95%
4. 成本可控:优先使用DeepSeek+Qwen3,可切换高端模型
📊 三阶段里程碑对比
| 维度 | MVP (4周) | V1.0 (6周) | V2.0 (8周) |
|---|---|---|---|
| 交付范围 | 标题摘要初筛 | + 全文复筛 + PDF提取 | + 数据提取 + 质量审计 |
| 准确率目标 | ≥ 85% | ≥ 90% | ≥ 95% |
| 模型组合 | DeepSeek + Qwen3 | 成本优化策略 | 三模型仲裁 |
| 质量控制 | 双模型验证 + JSON Schema | + Few-shot + 规则引擎 | + HITL + 自动审计 |
| 可追溯性 | 基本日志 | 完整证据链 | 审计级记录 |
| 前端 | 基础工作台(Frontend-v2) | 优化交互 | 完整UI |
| 后端 | modules/asl/核心功能 | + PDF服务集成 | + 高级质量保障 |
| 成本/1000篇 | ¥5 | ¥21 | ¥24 + 仲裁 |
🚀 MVP 阶段(第 1-4 周)
阶段目标
交付标准:
- ✅ 标题摘要初筛功能完整可用
- ✅ Excel 导入、AI 双模型筛选、人工复核
- ✅ 准确率 ≥ 85%
- ✅ 成本控制:≤ ¥50/1000 篇
- ✅ 前端集成到 Frontend-v2 顶部导航
- ✅ 后端 API 注册到 /api/v1/asl/*
里程碑划分
M1.1 - 数据库Schema设计(Week 1, Day 1)
任务:
- 设计 asl_schema 表结构(4张核心表)
asl_screening_projects(筛选项目表)asl_literatures(文献条目表)asl_screening_results(筛选结果表)asl_screening_tasks(筛选任务表)
- 在
backend/prisma/schema.prisma中添加模型定义- 使用
@@schema("asl_schema")指定Schema - 定义外键关系(引用
platform_schema.users) - 添加 OSS 相关字段(支持云原生部署):
pdfUrl- PDF访问URLpdfOssKey- OSS存储KeypdfFileSize- 文件大小
- 使用
- 运行 Prisma 迁移
cd backend npx prisma migrate dev --name add_asl_tables npx prisma generate
交付物:
- ✅ asl_schema 表创建完成
- ✅ Prisma Client 生成成功
- ✅ 数据库迁移成功
- ✅ OSS 字段预留完成
M1.2 - 后端API搭建(Week 1, Day 2-3)
⭐ 前置条件(2025-11-17 更新):平台基础设施已完成实施 ✅
完成状态:8个核心模块,100%测试通过
完成报告:平台基础设施实施完成报告
使用指南:backend/src/common/README.md
平台已提供的8个核心模块(无需ASL模块实现):
| # | 模块 | 路径 | 使用方式 | 说明 |
|---|---|---|---|---|
| 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' |
统一配置管理 |
任务:
- 创建
backend/src/modules/asl/目录结构modules/asl/ ├── routes/ │ └── index.ts # 路由注册 ├── controllers/ │ ├── projectController.ts # 项目控制器 │ ├── literatureController.ts # 文献控制器 │ └── screeningController.ts # 筛选控制器 ├── services/ │ ├── projectService.ts # 项目业务逻辑 │ ├── literatureService.ts # 文献业务逻辑 │ └── llmScreeningService.ts # LLM筛选服务 ├── schemas/ │ └── screening.schema.ts # JSON Schema定义 └── types/ └── screening.types.ts # TypeScript类型 - 在
backend/src/index.ts中注册ASL路由import { aslRoutes } from './modules/asl/routes/index.js' await app.register(aslRoutes, { prefix: '/api/v1/asl' }) - 实现核心API(参考 API设计规范文档)
POST /api/v1/asl/projects- 创建项目POST /api/v1/asl/projects/:id/literatures/import- 导入文献POST /api/v1/asl/projects/:id/screening/start- 启动筛选GET /api/v1/asl/projects/:id/screening/results- 获取结果
- 配置环境变量
# .env.development(本地开发) STORAGE_TYPE=local # .env.production(生产环境,SAE配置) STORAGE_TYPE=oss OSS_REGION=oss-cn-hangzhou OSS_BUCKET=aiclinical-prod
交付物:
- ✅ ASL后端目录结构完整
- ✅ API路由注册成功
- ✅ 核心API可调用(Postman测试通过)
- ✅ 正常使用平台服务(storage/logger/cache/jobQueue/prisma等8个模块)
M1.3 - LLM筛选核心(Week 2, Day 1-2)
任务:
- 实现双模型并行调用逻辑
- 复用
common/llm/adapters/LLMFactory.ts - 调用 DeepSeek-V3 + Qwen3-72B
- 复用
- 定义JSON Schema(PICO判断结构)
- 设计提示词模板(v1.0.0)
- 存放在
backend/prompts/asl/screening/v1.0.0-basic.txt
- 存放在
- 实现冲突检测算法
- 实现自动分流规则(置信度 < 0.7 → 人工复核)
交付物:
- ✅ 双模型可成功调用
- ✅ JSON Schema验证通过率 > 95%
- ✅ 冲突检测准确
M1.4 - 前端模块开发(Week 2-3)
任务:
- 更新
frontend-v2/src/modules/asl/index.tsx// 移除占位标记,实现真实模块 const ASLModule: ModuleDefinition = { id: 'literature-platform', name: 'AI智能文献', path: '/literature', icon: FileSearchOutlined, component: lazy(() => import('./routes')), placeholder: false, // ← 改为 false requiredVersion: 'advanced', } - 创建
frontend-v2/src/modules/asl/子目录asl/ ├── index.tsx # 模块定义 ├── routes.tsx # 路由配置 ├── pages/ │ ├── ProjectList.tsx # 项目列表 │ ├── ScreeningSettings.tsx # 设置与启动 │ ├── ScreeningWorkbench.tsx # 审核工作台 │ └── ScreeningResults.tsx # 初筛结果 ├── components/ │ ├── ExcelUploader.tsx # Excel上传 │ ├── ScreeningTable.tsx # 筛选表格 │ ├── DualModelModal.tsx # 双视图模态框 │ └── ResultsExport.tsx # 结果导出 ├── api/ │ ├── projectApi.ts # 项目API │ ├── screeningApi.ts # 筛选API │ └── index.ts ├── hooks/ │ ├── useScreening.ts # 筛选Hook │ └── useLiterature.ts # 文献Hook └── types/ └── screening.ts # 类型定义 - 实现Excel上传功能(使用
xlsx库) - 实现审核工作台(表格化布局,参考原型图)
- 实现双视图原文审查模态框
- 实现结果展示和导出
交付物:
- ✅ ASL模块在顶部导航显示并可点击
- ✅ 前端3个主要页面完整
- ✅ 前后端联调成功
M1.5 - 集成测试与验收(Week 4)
任务:
- 端到端完整流程测试
- 上传 199篇文献 Excel → 筛选 → 复核 → 导出
- 准确率测试(使用金标准数据集)
- 目标:≥ 85%
- 性能测试
- 100篇文献筛选 ≤ 10分钟
- 修复Bug和优化
交付物:
- ✅ 准确率 ≥ 85%
- ✅ 双模型一致率 ≥ 80%
- ✅ JSON Schema验证通过率 ≥ 95%
- ✅ 人工复核队列 ≤ 20%
📈 V1.0 阶段(第 5-10 周)
阶段目标
交付标准:
- ✅ 新增全文复筛功能
- ✅ PDF 提取集成(Nougat + PyMuPDF)
- ✅ Unpaywall API 集成(自动下载全文)
- ✅ Few-shot 示例库
- ✅ 规则引擎验证
- ✅ 准确率 ≥ 90%
里程碑划分
M2.1 - PDF 提取服务集成(Week 5)
任务:
- 封装
ExtractionClient(已有common/document/ExtractionClient.ts,需优化) - 实现自动语言检测和策略选择
- Python 微服务优化(
extraction_service/)- 优化 Nougat 调用性能
- 添加超时和错误处理
- 实现 PDF 质量评估逻辑
交付物:
- ✅ 可成功提取英文医学PDF(10-30页)
- ✅ 提取准确率 > 90%
M2.2 - Unpaywall API 集成(Week 5)
任务:
- 创建
backend/src/common/literature/UnpaywallClient.ts - 实现批量查询 DOI 可下载性
- 实现 PDF 下载功能
- 文件存储管理
交付物:
- ✅ 用户可一键检查 100 篇文献的可下载性
- ✅ 可自动下载 OA 全文
M2.3 - 全文复筛功能(Week 6-7)
任务:
- 扩展数据库表(
asl_full_text_screening_results) - 后端全文复筛API
- 前端全文审核工作台(复用组件 + PDF查看器)
交付物:
- ✅ 用户可对初筛纳入文献进行全文复筛
- ✅ 支持 PDF 在线查看和标注
M2.4 - 质量增强功能(Week 8-10)
任务:
- 人工标注 20-30 个 Few-shot 示例
- 定义验证规则(样本量、P值、必填字段)
- 实现成本优化策略(快速初筛 + 高价值复核)
- 完善证据链记录
交付物:
- ✅ Few-shot 示例库 ≥ 20 个
- ✅ 规则引擎覆盖率 ≥ 80%
- ✅ 证据链完整性 100%
- ✅ 准确率 ≥ 90%
🏆 V2.0 阶段(第 11-18 周)
阶段目标
交付标准:
- ✅ 新增全文数据提取功能
- ✅ 三模型共识仲裁
- ✅ HITL 智能分流
- ✅ 提示词版本管理
- ✅ 自动质量审计
- ✅ 准确率 ≥ 95%(医学级)
里程碑划分
M3.1 - 全文数据提取模块(Week 11-13)
任务:
- 扩展数据库表(
asl_extraction_results,asl_extraction_revisions) - 后端分段提取逻辑
- 前端表格化数据审查台(文献×变量矩阵)
交付物:
- ✅ 用户可配置提取变量清单
- ✅ 批量提取 50 篇文献的结构化数据
- ✅ 提取准确率 ≥ 92%
M3.2 - 医学级质量保障(Week 14-16)
任务:
- 三模型仲裁(冲突 → 启用 Claude-4.5)
- HITL 智能分流(优先级评分)
- 提示词版本管理(Git + 语义化版本)
- 自动质量审计系统
交付物:
- ✅ 三模型仲裁成功率 > 95%
- ✅ HITL 分流准确率 > 85%
- ✅ 提示词版本管理系统上线
- ✅ 自动质量审计每周运行
M3.3 - 高级功能与优化(Week 17-18)
任务:
- Chain of Thought (CoT) 推理
- 动态示例选择(语义相似度)
- 批处理性能优化(Bull + Redis)
- 用户体验优化(实时进度、PDF标注、快捷键)
交付物:
- ✅ 系统稳定性测试通过
- ✅ 性能测试:1000 篇文献 < 30 分钟
- ✅ 用户验收测试通过
- ✅ 准确率 ≥ 95%
📋 交付物检查清单
MVP 阶段
-
数据库
- asl_schema 4张表创建
- Prisma 迁移成功
-
后端
modules/asl/目录结构完整- API 路由注册到
/api/v1/asl/* - LLM筛选服务可用
-
前端
- ASL模块注册到
moduleRegistry.ts - 顶部导航显示"AI智能文献"
- 3个主页面完整
- ASL模块注册到
-
测试
- 准确率测试 ≥ 85%
- 端到端测试通过
V1.0 阶段
-
新增功能
- PDF 提取服务
- Unpaywall API 集成
- 全文复筛
- Few-shot 示例库
-
测试
- 准确率 ≥ 90%
V2.0 阶段
-
新增功能
- 全文数据提取
- 三模型仲裁
- HITL 智能分流
- 自动质量审计
-
测试
- 准确率 ≥ 95%
- 医学专家验证
📊 关键指标跟踪
质量指标
| 指标 | MVP 目标 | V1.0 目标 | V2.0 目标 |
|---|---|---|---|
| 提取准确率 | ≥ 85% | ≥ 90% | ≥ 95% |
| 双模型一致率 | ≥ 80% | ≥ 85% | ≥ 90% |
| JSON Schema 验证通过率 | ≥ 95% | ≥ 98% | ≥ 99% |
| 人工复核队列占比 | ≤ 20% | ≤ 15% | ≤ 10% |
成本指标
| 场景 | MVP | V1.0 | V2.0 |
|---|---|---|---|
| 标题摘要筛选(1000篇) | ¥5 | ¥21 | ¥24 |
| 全文复筛(200篇) | - | ¥30 | ¥35 |
| 数据提取(50篇) | - | ¥60 | ¥80 |
📚 相关文档
更新日志:
- 2025-11-18: V3.1 更新,补充平台基础设施完成状态(8个核心模块)
- 2025-11-16: V3.0 重写,基于真实架构(Frontend-v2 + Backend增量演进 + 10个Schema)
- 2025-11-16: V2.0 重写,基于三阶段路线图详细规划里程碑
- 2025-10-29: V1.0 创建,初始版本