Files
AIclinicalresearch/docs/03-业务模块/ASL-AI智能文献/04-开发计划/03-任务分解.md
HaHafeng 1b53ab9d52 feat(aia): Complete AIA V2.0 with universal streaming capabilities
Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
2026-01-14 19:15:01 +08:00

970 lines
36 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ASL 模å<C2A1>—任务分解(To-do Listï¼?
> **文档版本�* V3.2
> **创建日期�* 2025-11-16
> **适用阶段ï¼?* MVP(标题æ˜è¦<C3A8>åˆ<C3A5>ç­ï¼‰
> **预计周期�* 4 �
> **最å<E282AC>Žæ´æ°ï¼š** 2025-11-21
> **â­?é‡<C3A9>è¦<C3A8>:基于真实架构(Frontend-v2 + Backend + asl_schemaï¼?*
> **📊 MVP核心功能è¿åº¦ï¼?* âœ?100% 完æˆ<C3A6>(Week 1-3 æ<><C3A6>å‰<C3A5>完æˆ<C3A6>ï¼?
> **📊 è´¨é‡<C3A9>优åŒè¿åº¦ï¼?* 🔄 60% 完æˆ<C3A6>(准确率60%,目æ ?5%ï¼?
---
## 📋 使用说明
本文档是 **ASL 标题æ˜è¦<C3A8>åˆ<C3A5>ç­æ¨¡å<C2A1>** 的详细任务分解清å<E280A6>•,基于 **真实的架构基础**ï¼?- âœ?Frontend-v2(顶部导èˆ?+ 模å<C2A1>—注册ï¼? Week 2 已完æˆ?- âœ?Backend 增é‡<C3A9>æ¼”è¿ï¼ˆlegacy/ + common/ + modules/ï¼? Week 2 已完æˆ?- âœ?æ•°æ<C2B0>®åº?10个Schema隔离 - Week 1 已完æˆ?
**任务状æ€<C3A6>æ ‡è®?*ï¼?- `[ ]` - å¾…å¼€å§?- `[🔄]` - 进行ä¸?- `[✅]` - 已完æˆ?- `[â<>Œ]` - å·²å<C2B2>æ¶?跳过
---
## 🌥ï¸?äºåŽŸç”Ÿå¼€å<E282AC>è¦<C3A8>æ±ï¼ˆ2025-11-16 新增ï¼?
> **â­?é‡<C3A9>è¦<C3A8>æ<EFBFBD><C3A6>é†**:所有任务必须é<C2BB>µå¾ªäºåŽŸç”Ÿå¼€å<E282AC>è§„èŒ?
> **详细规范**:[äºåŽŸç”Ÿå¼€å<E282AC>规范](../../../04-å¼€å<E282AC>è§„èŒ?08-äºåŽŸç”Ÿå¼€å<E282AC>è§„èŒ?md)
### 核心è¦<C3A8>æ±
| è¦<C3A8>æ± | 说明 |
|------|------|
| âœ?**存储抽象å±?* | 使用 `StorageFactory`,支æŒ<EFBFBD>本åœ?OSS切æ<E280A1>¢ |
| âœ?**内存解æž<C3A6>** | Excel导入使用 `xlsx.read(buffer)`,ä¸<EFBFBD>è<EFBFBD>½ç˜ |
| âœ?**异步任务** | LLMç­é€‰å¿…须弿­¥å¤„ç<E2809E>†ï¼ˆ> 10ç§ï¼‰ |
| âœ?**环境å<C692>˜é‡<C3A9>** | 所有é…<C3A9>置从 `.env` 读å<C2BB> |
| âœ?**æ•°æ<C2B0>®åº“连接池** | 使用全局 `prisma` 实例 |
| �**OSS字段预留** | `pdfUrl`, `pdfOssKey`, `pdfFileSize` |
### æ¯<C3A6>日检查清å<E280A6>?
æ<EFBFBD><EFBFBD>交代ç <EFBFBD>å‰<EFBFBD>必须确认:
- [ ] 是å<C2AF>¦ä½¿ç”¨å­˜å¨æŠ½è±¡å±ï¼Ÿ
- [ ] 是å<C2AF>¦é<C2A6>¿å…<C3A5>æ‡ä»¶è<C2B6>½ç˜ï¼?- [ ] 是å<C2AF>¦ä½¿ç”¨å…¨å±€ prisma 实例ï¼?- [ ] 是å<C2AF>¦æ‰€æœ‰é…<C3A9>置都从环境å<C692>˜é‡<C3A9>读å<C2BB>?
- [ ] 长时间任务是å<C2AF>¦å¼æ­¥å¤„ç<E2809E>†ï¼Ÿ
---
## 🗓ï¸?Week 1: æ•°æ<C2B0>®åº“Schema与å<C5BD>Žç«¯API框架(Day 1-5)✅ 已完æˆ?
**完æˆ<C3A6>日期**: 2025-11-18
**实际耗时**: 1天(æ<CB86><C3A6>å‰<C3A5>4天)
**完æˆ<C3A6>报åŠ**: [Week 1完æˆ<C3A6>报åŠ](../05-å¼€å<E282AC>è®°å½?2025-11-18-Week1完æˆ<C3A6>报åŠ.md)
**APIæµè¯•**: [ASL-APIæµè¯•报åŠ](../../../../backend/ASL-API-测试报告.md)
### Day 1: Prisma Schema 设计 �
#### æ•°æ<C2B0>®åº“ä»»åŠ?
- [✅] **T1.1.1** 设计 asl_schema 表结� - 文件:`backend/prisma/schema.prisma`
- æ°å¢ž4个模åžï¼š
- `AslScreeningProject`(筛选项目表ï¼? - `AslLiterature`(æ‡çŒ®æ<EFBFBD>¡ç®è¡¨ï¼? - `AslScreeningResult`(筛选结果表ï¼? - `AslScreeningTask`(筛选任务表ï¼? - 使用 `@@schema("asl_schema")` 指定Schema
- **â­?æ°å¢žè¦<C3A8>æ±ï¼ˆäºåŽŸç”Ÿï¼?*:在 `AslLiterature` 中添åŠ?OSS 字段
- `pdfUrl String? @map("pdf_url")` - PDF访问URL
- `pdfOssKey String? @map("pdf_oss_key")` - OSSå­˜å¨Key
- `pdfFileSize Int? @map("pdf_file_size")` - æ‡ä»¶å¤§å°<C3A5>(字èŠï¼‰
- 说明:MVP阶段预留,V1.0阶段使用
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>? - å<>考:`02-标题æ˜è¦<C3A8>åˆ<C3A5>ç­å¼€å<E282AC>计åˆ?md` Week 1 Day 1
- [✅] **T1.1.2** åœ?User 模åžä¸­æ·»åŠ å…³è<C2B3>? ```prisma
// backend/prisma/schema.prisma - Useræ¨¡åžæ·»åŠ 
aslProjects AslScreeningProject[] @relation("AslProjects")
```
- 实际耗时� 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T1.1.3** è¿<C3A8>行 Prisma è¿<C3A8>ç§»
```bash
cd backend
npx tsx scripts/create-asl-tables.ts # æ‰åЍSQLåˆå»º
```
- 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T1.1.4** 生æˆ<C3A6> Prisma Client
```bash
npx prisma generate
```
- 实际耗时� 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T1.1.5** 验è¯<C3A8>æ•°æ<C2B0>®åº“表åˆå»º
- 使用脚本验è¯<C3A8>æ•°æ<C2B0>®åº? - 检æŸ?asl_schema ä¸çš„4个表 âœ? - 检查索引和外键 âœ? - 实际耗时ï¼? 分钟
- 完æˆ<C3A6>人:AI Assistant
**Day 1 验收标准** ✅:
- âœ?asl_schema 4张表åˆå»ºæˆ<C3A6>功
- âœ?Prisma Client 生æˆ<C3A6>æ— é”™è¯?- âœ?å<>¯æŸ¥è¯?asl_schema è¡?
---
### Day 2: å<>Žç«¯ç®å½•结构åˆå»º âœ?
> **â­?å‰<C3A5>ç½®æ<C2AE>¡ä»¶ï¼?025-11-17 æ›´æ–°ï¼?*:平å<C2B3>°åŸºç¡€è®¾æ½å·²å®Œæˆ<C3A6>实æ?âœ?
> **完æˆ<C3A6>状æ€?*ï¼?个核心模å<C2A1>—,100%测试通过
> **完æˆ<C3A6>报åŠ**:[å¹³å<C2B3>°åŸºç¡€è®¾æ½å®žæ½å®Œæˆ<C3A6>报åŠ](../../../08-项ç®ç®¡ç<C2A1>†/03-æ¯<C3A6>å¨è®¡åˆ/2025-11-17-å¹³å<C2B3>°åŸºç¡€è®¾æ½å®žæ½å®Œæˆ<C3A6>报åŠ.md)
> **使用指å<E280A1>—**:[backend/src/common/README.md](../../../../backend/src/common/README.md)
#### å¹³å<C2B3>°å·²æ<C2B2><C3A6>ä¾çš„8个核心模å<C2A1>—(ASL模å<C2A1>—无需实现ï¼?
**å¹³å<C2B3>°åŸºç¡€è®¾æ½å·²å®Œæˆ<C3A6>(2025-11-17ï¼?*ï¼?
| # | æœ<C3A6>务 | 路径 | 使用æ¹å¼<C3A5> | 说明 |
|---|------|------|---------|------|
| 1 | å­˜å¨æœ<C3A6>务 | `common/storage/` | `import { storage } from '@/common/storage'` | 文件上传下载(本åœ?OSS切æ<E280A1>¢ï¼?|
| 2 | 日志系统 | `common/logging/` | `import { logger } from '@/common/logging'` | 结构åŒJSON日志 |
| 3 | 缓存æœ<C3A6>务 | `common/cache/` | `import { cache } from '@/common/cache'` | 内存/Redis缓存 |
| 4 | 异步任务 | `common/jobs/` | `import { jobQueue } from '@/common/jobs'` | 长时间任务处ç<E2809E>?|
| 5 | å<>¥åº·æ£€æŸ?| `common/health/` | `import { registerHealthRoutes } from '@/common/health'` | SAEå<45>¥åº·æ£€æŸ?|
| 6 | 监控指标 | `common/monitoring/` | `import { Metrics } from '@/common/monitoring'` | 性能监控和告�|
| 7 | æ•°æ<C2B0>®åº“连接池 | `config/database.ts` | `import { prisma } from '@/config/database'` | 全局Prismaå®žä¾ |
| 8 | 环境é…<C3A9>ç½® | `config/env.ts` | `import { env } from '@/config/env'` | 统一é…<C3A9>置管ç<C2A1>† |
**示ä¾ä»£ç <C3A7>**ï¼?```typescript
// ASL模å<C2A1>—ç´æŽ¥ä½¿ç”¨å¹³å<C2B3>°æœ<C3A6>务
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 })
// 缓存数æ<C2B0>®
await cache.set(`project:${projectId}`, data, 3600)
// 创建异步任务
const job = await jobQueue.push('asl:screening', { projectId })
// 记录监控指标
Metrics.recordAPIResponseTime('POST', '/api/v1/asl/screening', 200, 150)
```
**âš ï¸<C3AF> ç¦<C3A7>止的æ“<C3A6>作(必须é<C2BB>µå®ˆï¼?*ï¼?
| ç¦<C3A7>æ­¢æ“<C3A6>作 | 正确å<C2AE>𿳕 | 原因 |
|---------|---------|------|
| `fs.writeFileSync()` | 使用 `storage.upload()` | Serverless容器é‡<C3A9>å<EFBFBD>¯ä¸¢å¤±æ‡ä»¶ |
| `new PrismaClient()` | 使用全局 `prisma` 实例 | é<>¿å…<C3A5>连接数暴增(已é…<C3A9>置连接池ï¼?|
| 硬ç¼ç <C3A7>é…<C3A9>ç½?| 使用 `process.env` æˆ?`env` | é…<C3A9>置管ç<C2A1>†æ··ä¹± |
| å<>Œæ­¥å¤„ç<E2809E>†LLM批é‡<C3A9>任务 | 使用 `jobQueue.push()` | é<>¿å…<C3A5>Serverlessè¶…æ—¶ |
| 直接使用 `console.log()` | 使用 `logger.info()` | 日志格å¼<C3A5>标准åŒ?|
| 自己实现缓存逻辑 | 使用 `cache.set()` / `cache.get()` | å¹³å<C2B3>°å·²æ<C2B2><C3A6>ä¾åˆ†å¸ƒå¼<C3A5>缓存 |
---
#### å<>Žç«¯ä»»åŠ¡
- [✅] **T1.2.1** 创建 ASL 模å<C2A1>—ç®å½•结构
```bash
cd backend/src/modules
mkdir -p asl/{routes,controllers,services,schemas,types,utils}
```
- 预计耗时� 分钟
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [ ] **T1.2.2** 创建路由文件
- `routes/index.ts` - 路由注册
- 实现å<C2B0> ä½<C3A4>函数(返å?04æˆç©ºæ•°ç»„ï¼? - 预计耗时ï¼?0 分钟
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [ ] **T1.2.3** 创建控制器文� - `controllers/projectController.ts` - 项目控制� - `controllers/literatureController.ts` - 文献控制� - `controllers/screeningController.ts` - 筛选控制器
- åˆå»ºå<C2BA> ä½<C3A4>函数(æ¯<C3A6>个控制器5-7个函数)
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [ ] **T1.2.4** åˆå»ºæœ<C3A6>åŠ¡å±æ‡ä»? - `services/projectService.ts` - 项目业务逻辑
- `services/literatureService.ts` - 文献业务逻辑
- `services/llmScreeningService.ts` - LLMç­é€‰æœ<C3A6>åŠ? - 预计耗时ï¼?0 分钟
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [✅] **T1.2.5** 创建类型定义文件
```typescript
// types/screening.types.ts
export interface Literature { ... }
export interface ScreeningResult { ... }
export interface Protocol { ... }
```
- 预计耗时�0 分钟
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
**Day 2 验收标准** ✅:
- âœ?ASL 模å<C2A1>—ç®å½•结构完整ï¼?个å­<C3A5>ç®å½•ï¼?个文件)
- âœ?所有å<E280B0> ä½<C3A4>æ‡ä»¶åˆå»ºå®Œæˆ?- âœ?**å<>¯æ­£å¸¸ä½¿ç”¨å¹³å<C2B3>°æœ<C3A6>务(¸ªæ ¸å¿ƒæ¨¡å<C2A1>—)**ï¼? - âœ?`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/` 的风æ ? - 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>? - å<>考:`02-标题æ˜è¦<C3A8>åˆ<C3A5>ç­å¼€å<E282AC>计åˆ?md` Week 1 Day 2
- [✅] **T1.3.2** �`src/index.ts` 中注册ASL路由
```typescript
import { aslRoutes } from './modules/asl/routes/index.js'
await app.register(aslRoutes, { prefix: '/api/v1/asl' })
console.log('�ASL 路由已注册到 /api/v1/asl/*')
```
- 预计耗时�0 分钟
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [✅] **T1.3.3** æµè¯•路由å<C2B1>¯è®¿é—®æ€? ```bash
# å<>¯åЍå<C2A8>Žç«¯æœ<C3A6>务
cd backend && npm run dev
# æµè¯•å<E280A2>¥åº·æ£€æŸ? curl http://localhost:3001/api/v1/asl/projects
```
- 预计耗时�0 分钟
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
**Day 3 验收标准** ✅:
- âœ?å<>Žç«¯æœ<C3A6>务正常å<C2B8>¯åЍ
- âœ?ASL路由注册æˆ<C3A6>功ï¼?api/v1/aslï¼?- âœ?APIå<49>¯è®¿é—®ï¼ˆ10个端ç¹ï¼‰
---
### Day 4-5: 实现基础API �
#### å<>Žç«¯ä»»åŠ¡
- [✅] **T1.4.1** 实现 `projectService.ts`
- `createProject(userId, data)` - 创建项目
- `listProjects(userId)` - 获å<C2B7>项ç®åˆ—表
- `getProject(projectId)` - 获å<C2B7>项ç®è¯¦æƒ…
- 使用 Prisma Client æ“<C3A6>作 asl_schema
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [✅] **T1.4.2** 实现 `projectController.ts`
- `createProject` - 控制å™? - `listProjects` - 控制å™? - `getProject` - 控制å™? - 请æ±éªŒè¯<C3A8>ã€<C3A3>å“<C3A5>应格å¼<C3A5>åŒ
- 预计耗时ï¼?.5 å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [✅] **T1.4.3** 实现 `literatureService.ts`
- `importBatch(projectId, literatures)` - 批é‡<C3A9>导入
- `listLiteratures(projectId, page, pageSize)` - 分页查询
- 去é‡<C3A9>逻è¾ï¼ˆåŸºäºŽDOIåŒæ ‡é¢˜ï¼‰
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [✅] **T1.4.4** 实现 `literatureController.ts`
- `importLiteratures` - 导入控制å™? - `listLiteratures` - 列表控制å™? - Excelæ•°æ<C2B0>®éªŒè¯<C3A8>
- 预计耗时ï¼?.5 å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [✅] **T1.4.5** APIæµè¯•(完整æµè¯•脚本)
- 创建 Postman æµè¯•é†å<E280A0>ˆ
- æµè¯•所有已实现的API
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
**Day 4-5 验收标准** ✅:
- âœ?项ç®ç®¡ç<C2A1>†APIå<49>¯è°ƒç”¨ï¼ˆ¸ªæŽ¥å<C2A5>£ï¼‰
- âœ?æ‡çŒ®å¯¼å…¥APIå<49>¯è°ƒç”¨ï¼ˆ¸ªæŽ¥å<C2A5>£ï¼‰
- âœ?æ•°æ<C2B0>®æ­£ç¡®ä¿<C3A4>å­˜åˆ?asl_schema
- �所有测试通过�/7 - 100%�
---
## 🗓ï¸?Week 2: LLMç­é€‰æ ¸å¿ƒï¼ˆDay 6-10)✅ 已完æˆ?
**完æˆ<C3A6>日期**: 2025-11-21
**实际耗时**: 3�
**完æˆ<C3A6>报åŠ**: [Prompt设计与æµè¯•完æˆ<C3A6>报åŠ](../05-å¼€å<E282AC>è®°å½?2025-11-18-Prompt设计与æµè¯•完æˆ<C3A6>报å?md)
**实际准确�*: 60%(目�5%,需优化�
### Day 6: JSON Schema 与æ<C5BD><C3A6>示è¯<C3A8>设计 âœ?
#### å<>Žç«¯ä»»åŠ¡
- [✅] **T2.1.1** 定义 JSON Schema
- 文件:`backend/src/modules/asl/schemas/screening.schema.ts`
- 定义输出结构(decision, reason, confidence, picoï¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.1.2** 安装验è¯<C3A8>åº? ```bash
cd backend
npm install ajv
```
- 实际耗时� 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.1.3** 编写 Schema 验è¯<C3A8>函数
- 使用 `Ajv` 验è¯<C3A8>
- 错误信æ<C2A1>¯æ ¼å¼<C3A5>åŒ? - 实际耗时ï¼?0 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.1.4** 设计æ<C2A1><C3A6>示è¯<C3A8>模æ<C2A1>?v1.0.0
- 文件:`backend/prompts/asl/screening/v1.0.0-mvp.txt`
- 包å<E280A6>«ï¼šPICO标准ã€<C3A3>çº³æŽæ ‡å‡†ã€<C3A3>输出格å¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant + 用户
- [✅] **T2.1.5** 人工æµè¯•æ<E280A2><C3A6>示è¯? - 手动调用 LLM(使ç”?10 篇样本)
- 评估输出质é‡<C3A9>
- è¿­ä»£ä¼˜åŒæ<E28093><C3A6>示è¯? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant + 用户
**Day 6 验收标准** ✅:
- âœ?JSON Schema 定义完æˆ<C3A6>
- âš ï¸<C3AF> æ<><C3A6>示è¯<C3A8>人工æµè¯•准确率 60%(目æ ?0%,需å<E282AC>Žç»­ä¼˜åŒï¼?
---
### Day 7: LLM æœ<C3A6>务å°<C3A5>装 âœ?
#### å<>Žç«¯ä»»åŠ¡
- [✅] **T2.2.1** 创建 `llmScreeningService.ts`
- 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.2.2** 实现 `callModel` 方法
- 调用 `LLMFactory.createLLM()`(å¤<C3A5>ç”?common/llmï¼? - 设置å<C2AE>数(temperature: 0ï¼? - 错误处ç<E2809E>
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.2.3** 实现 `parseModelOutput` 方法
- JSON è§£æž<C3A6>(使ç”?`common/utils/jsonParser.js`ï¼? - Schema 验è¯<C3A8>
- æ ¼å¼<C3A5>åŒä¸º `ModelDecision`
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.2.4** 实现 `compareDecisions` 方法
- 对比两个模型�PICO 判断
- 识别冲çª<C3A7>字段(仅结论ä¸<C3A4>一致)
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.2.5** 实现 `shouldReview` 方法
- 自动分æµ<C3A6>è§„åˆ
- 置信度阈值(< 0.7� - 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.2.6** 实现 `dualModelScreening` 方法
- 并行调用两个模型(`Promise.all`ï¼? - 汇总结æž? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.2.7** å<>•å…ƒæµè¯•
- 测试 JSON è§£æž<C3A6>
- æµè¯•冲çª<C3A7>检æµ? - æµè¯•分æµ<C3A6>è§„åˆ
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
**Day 7 验收标准** ✅:
- âœ?å<>¯æˆ<C3A6>功调ç”?DeepSeek å’?Qwen3
- âœ?JSON Schema 验è¯<C3A8>通过çŽ?100%
- âœ?冲çª<C3A7>检æµå‡†ç¡®ï¼ˆä»…结论ä¸<C3A4>一致)
---
### Day 8: 批é‡<C3A9>ç­é€‰ä»»åŠ¡ç®¡ç<C2A1>?âœ?
#### å<>Žç«¯ä»»åŠ¡
- [✅] **T2.3.1** 实现 `batchScreening` 方法
- 串行处ç<E2809E>†ï¼ˆé<CB86>¿å…<C3A5>APIé™<C3A9>æµ<C3A6>ï¼? - 进度计算
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.3.2** 实现任务创建
- `screeningService.startScreeningTask`
- åˆ<C3A5>å§åŒä»»åŠ¡è®°å½•ï¼ˆAslScreeningTask表)
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.3.3** 实现任务状æ€<C3A6>æ´æ? - `screeningService.processLiteraturesInBackground`
- æ›´æ–° processedItems, deepseekProcessed, qwenProcessed ç­? - 实际耗时ï¼?.5 å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.3.4** 实现结果ä¿<C3A4>å­˜
- å<>•篇ä¿<C3A4>å­˜åˆ?`AslScreeningResult` è¡? - 冲çª<C3A7>检æµï¼ˆä»…结论ä¸<C3A4>一致)
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.3.5** 错误处ç<E2809E>†åŒé‡<C3A9>è¯? - å<>•篇失败ä¸<C3A4>å½±å“<C3A5>æ•´ä½? - 记录错误信æ<C2A1>¯
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
**Day 8 验收标准** ✅:
- âœ?å<>¯æ‰¹é‡<C3A9>处ç<E2809E>?199 篇文献(串行ï¼?- âœ?任务状æ€<C3A6>正确记å½?- âœ?结果正确ä¿<C3A4>存到数æ<C2B0>®åº“
- âœ?è¿åº¦å®žæ—¶æ´æ°ï¼ˆæ¯<C3A6><31>¡ï¼‰
---
### Day 9: ç­›é€?API å¼€å<E282AC>?âœ?
#### å<>Žç«¯ä»»åŠ¡
- [✅] **T2.4.1** 实现å<C2B0>¯åЍç­é€?API
- 自动在æ‡çŒ®å¯¼å…¥å<C2A5>Žå<C5BD>¯åŠ¨ï¼ˆ`literatureController.importLiteratures`ï¼? - 创建任务
- **â­?äºåŽŸç”Ÿè¦<C3A8>æ±?*ï¼šå¼æ­¥æ‰§è¡Œç­é€‰ï¼ˆç«å<E280B9>³è¿”åžtaskId,å<C592>Žå<C5BD>°å¤„ç<E2809E>†ï¼‰
- é<>¿å…<C3A5>请æ±è¶…时(SAE默认30ç§è¶…æ—¶é™<C3A9>制)
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.4.2** 实现进度查询 API
- `GET /api/v1/asl/projects/:projectId/screening-task`
- è¿”åžå®žæ—¶è¿åº¦ï¼ˆæ€»æ•°ã€<C3A3>已处ç<E2809E>†ã€<C3A3>æˆ<C3A6>功ã€<C3A3>冲çª<C3A7>ã€<C3A3>失败ã€<C3A3>DS处ç<E2809E>†æ•°ã€<C3A3>Qwen处ç<E2809E>†æ•°ï¼‰
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.4.3** 实现结果查询 API
- `GET /api/v1/asl/projects/:projectId/screening-results`
- 支æŒ<C3A6>过滤(all, conflict, included, excluded, reviewedï¼? - 分页(å<CB86>Žç«¯åˆ†é¡µï¼‰
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.4.4** 实现更新决策 API
- `POST /api/v1/asl/screening-results/:resultId/review`
- 人工å¤<C3A5>æ ¸æ<C2B8><C3A6>交
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T2.4.5** Postman 测试
- åˆå»ºæµè¯•é†å<E280A0>ˆ
- æµè¯•å<E280A2>„ç§<C3A7>场景
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
**Day 9 验收标准** ✅:
- âœ?API 调用æˆ<C3A6>功
- âœ?任务å<C2A1>¯å¼æ­¥æ‰§è¡?- âœ?进度查询实时准确ï¼?秒轮询)
---
### Day 10: å<>Žç«¯é†æˆ<C3A6>æµè¯• âœ?
#### å<>Žç«¯ä»»åŠ¡
- [✅] **T2.5.1** 端到端æµè¯•(199篇æ‡çŒ®ï¼‰
- 导入文献 â†?自动å<C2A8>¯åЍç­é€?â†?查询结果
- 实际耗时ï¼? å°<C3A5>时执行 + 1å°<C3A5>时分æž<C3A6>
- 完æˆ<C3A6>人:AI Assistant + 用户
- [✅] **T2.5.2** 性能测试
- 测试 199 篇文献筛选时é—? - 实际:约33-66分éŸï¼ˆä¸²è¡Œå¤„ç<E2809E>†ï¼‰
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant + 用户
- [✅] **T2.5.3** è´¨é‡<C3A9>评估
- 计算准确率(对比金标准)
- 计算å<E28094>Œæ¨¡åžä¸€è‡´çއ
- 计算冲çª<C3A7>çŽ? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant + 用户
- **结果**:准确率60%, 一致率70-100%, JSON验è¯<C3A8>çŽ?00%
- [✅] **T2.5.4** ä¿®å¤<C3A5> Bug
- ä¿®å¤<C3A5>字段映射问题(PICOSã€<C3A3>模åžå<E280B9><C3A5>称)
- ä¿®å¤<C3A5>列表顺åº<C3A5>问题
- ä¿®å¤<C3A5>è¿åº¦æ˜¾ç¤ºé—®é¢˜
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
**Week 2 总验收标å‡?* âš ï¸<C3AF> 部分达标ï¼?- âœ?å<>¯æˆ<C3A6>功ç­é€?199 篇文çŒ?- âš ï¸<C3AF> 准确çŽ?60%(目æ ?5%,需Prompt优åŒï¼?- âœ?å<>Œæ¨¡åžä¸€è‡´çއ 70-100%
- âš ï¸<C3AF> 性能ï¼?99篇约33-66分éŸï¼ˆä¸²è¡Œå¤„ç<E2809E>†ï¼Œå<C592>¯ä¼˜åŒä¸ºå¹¶å<C2B6>ï¼?- âœ?JSON Schema验è¯<C3A8>çŽ?00%
---
## 🗓ï¸?Week 3: å‰<C3A5>端模å<C2A1>—å¼€å<E282AC>(Day 11-15)✅ 已完æˆ?
**完æˆ<C3A6>日期**: 2025-11-21
**实际耗时**: 2�
**完æˆ<C3A6>报åŠ**: [Week2-Day2完æˆ<C3A6>报åŠ](../05-å¼€å<E282AC>è®°å½?2025-11-19-Week2-Day2完æˆ<C3A6>报åŠ.md)
**说明**: Week 3任务实际在Week 2完æˆ<C3A6>
### Day 11: å‰<C3A5>端模å<C2A1>—结构åˆå»º âœ?
#### å‰<C3A5>端任务
- [✅] **T3.1.1** 更新 `modules/asl/index.tsx`
- åˆå»ºå·¦ä¾§å¯¼èˆªå¸ƒå±€ï¼ˆASLLayoutï¼? - 7个主模å<C2A1>—,标题æ˜è¦<C3A8>åˆ<C3A5>ç­å<E280BA>«3个å­<C3A5>页é<C2B5>¢
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.1.2** 创建 ASL å­<C3A5>ç®å½? ```bash
cd frontend-v2/src/modules/asl
mkdir pages components api hooks types utils
```
- 实际耗时� 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.1.3** åˆå»ºè·¯ç”±é…<C3A9>ç½®
- 直接�`index.tsx` 中使�`<Route>` 定义
- 使用 `lazy()` 懒加� - 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.1.4** åˆå»º3个主页é<C2B5>¢
- `pages/TitleScreeningSettings.tsx` - 设置与å<C5BD>¯åŠ? - `pages/ScreeningWorkbench.tsx` - 审核工作å<C593>? - `pages/ScreeningResults.tsx` - åˆ<C3A5>ç­ç»“果(å<CB86> ä½<C3A4>)
- 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.1.5** 测试路由
- å<>¯åЍå‰<C3A5>端:`cd frontend-v2 && npm run dev`
- 访问 `http://localhost:3001/literature`
- 确认顶部导航显示"AI智能æ‡çŒ®"
- 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant + 用户
**Day 11 验收标准** ✅:
- âœ?顶部导航显示"AI智能æ‡çŒ®"
- âœ?左侧导航显示7个模å<C2A1>?- âœ?ç¹å‡»å<C2BB>Žè¿å…?设置与å<C5BD>¯åŠ?页é<C2B5>¢
---
### Day 12: Excel 上传功能 �
#### å‰<C3A5>端任务
- [✅] **T3.2.1** 安装ä¾<C3A4>èµ
```bash
cd frontend-v2
npm install xlsx
```
- 实际耗时� 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.2.2** 创建 Excel上传组件
- 醿ˆ<C3A6>åœ?`TitleScreeningSettings.tsx` ä¸? - 文件选择(`antd Upload.Dragger`ï¼? - æ‡ä»¶ç±»åžéªŒè¯<C3A8>ï¼?xls, .xlsxï¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.2.3** 实现 Excel è§£æž<C3A6>逻è¾
- 使用 `xlsx` 库解æž? - **â­?äºåŽŸç”Ÿè¦<C3A8>æ±?*:内存解æž?`xlsx.read(buffer)`,ç¦<C3A7>æ­¢è<C2A2>½ç? - 字段映射(Title/title â†?title,支æŒ<C3A6>ä¸­è±æ‡ï¼? - æ•°æ<C2B0>®éªŒè¯<C3A8>(titleåŒabstractå¿…å¡«ï¼? - 文件:`utils/excelUtils.ts`
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.2.4** 实现去é‡<C3A9>逻è¾
- 基于 DOI 去é‡<C3A9>(优先)
- 基于标题去é‡<C3A9>(标准åŒï¼ŒåŽ»ç©ºæ ¼/标点ï¼? - 去é‡<C3A9>统计展示
- 文件:`utils/excelUtils.ts`
- 实际耗时ï¼?.5 å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.2.5** 实现文献预览表格
- 使用 `Ant Design Table`
- 显示:åº<C3A5>å<EFBFBD>·ã€<C3A3>标题ã€<C3A3>æ˜è¦<C3A8>ã€<C3A3>作者ã€<C3A3>年份ã€<C3A3>期刊ã€<C3A3>PMIDã€<C3A3>DOI
- åºå®šåˆ—宽ã€<C3A3>Tooltip显示全æ
- 无分页(内存中)
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.2.6** 实现Excel模æ<C2A1>¿ä¸è½½
- 生æˆ<C3A6>包å<E280A6>«å­—段说明的Excel模æ<C2A1>¿
- 两个Sheet:æ‡çŒ®åˆ—表ã€<C3A3>字段说æ˜? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
**Day 12 验收标准** ✅:
- âœ?å<>¯æˆ<C3A6>功上ä¼?Excel 文件
- âœ?è§£æž<C3A6>å<EFBFBD>Žæ•°æ<C2B0>®æ­£ç¡®å±•ç¤?- âœ?去é‡<C3A9>功能正常(DOI优先,标题辅助)
- âœ?Excel模æ<C2A1>¿ä¸è½½æ­£å¸¸
---
### Day 13: API 客户端å°<C3A5>è£?âœ?
#### å‰<C3A5>端任务
- [✅] **T3.3.1** 创建 API 客户� - `api/index.ts`
- 使用 `fetch` + 统一错误处ç<E2809E>
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.3.2** 实现项目 API
- `createProject(data)`
- `listProjects()`
- `getProject(id)`
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.3.3** 实现文献 API
- `importLiteratures(projectId, literatures)`
- 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.3.4** 实现筛�API
- `getScreeningTask(projectId)` - 获å<C2B7>任务è¿åº¦
- `getScreeningResultsList(projectId, params)` - 获å<C2B7>结果列表
- `getScreeningResultDetail(resultId)` - 获å<C2B7>结果详情
- `reviewScreeningResult(resultId, data)` - 人工å¤<C3A5>æ ¸
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.3.5** å‰<C3A5>å<EFBFBD>Žç«¯è<C2AF>”è°? - æµè¯•所有API调用
- 错误处ç<E2809E>†ï¼ˆç»Ÿä¸€messageæ<65><C3A6>示ï¼? - Loading 状æ€? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant + 用户
**Day 13 验收标准** ✅:
- âœ?API 客户端å<C2AF>¯æ­£å¸¸è°ƒç”¨å<C2A8>Žç«¯
- âœ?上传Excelå<6C>Žæ•°æ<C2B0>®ä¿<C3A4>存到数æ<C2B0>®åº?- âœ?自动å<C2A8>¯åЍç­é€‰ä»»åŠ?
---
### Day 14-15: 审核工作å<C593>°ï¼ˆæ ¸å¿ƒUI)✅
#### å‰<C3A5>端任务
- [✅] **T3.4.1** 实现 `ScreeningWorkbench` 页é<C2B5>¢
- 任务进度显示(轮��次)
- å<>Œè¡Œè¡¨æ ¼ç»“构(使用`rowSpan`ï¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.4.2** 实现表头
- åº<C3A5>å<EFBFBD>·ã€<C3A3>æ‡çŒ®æ ‡é¢˜ã€<C3A3>结论ã€<C3A3>æ“<C3A6>作ã€<C3A3>模åžã€<C3A3>Pã€<C3A3>Iã€<C3A3>Cã€<C3A3>S
- åŽç¼©åˆ—宽ã€<C3A3>模åžå<E280B9><C3A5>缩写(DS/Qwï¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.4.3** 实现主行(å<CB86>Œè¡Œï¼‰
- 点击标题展开/æ”¶èµ·è¯<C3A8>æ<EFBFBD>®
- æ‡çŒ®æ ‡é¢˜ã€<C3A3>DSåŒQwençš„PICO判æ­ï¼ˆå<CB86>•å­—æ¯<C3A6>ï¼? - 冲çª<C3A7>状æ€<C3A6>(红色背景ï¼? - 结论Tag(纳å…?排除ï¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.4.4** 实现展开è¡? - 显示DSåŒQwen的详细PICOS判æ­ã€<C3A3>è¯<C3A8>æ<EFBFBD>®ã€<C3A3>ç<EFBFBD>†ç”? - 两æ <C3A6>布局(左DS,å<C592>³Qwenï¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.4.5** 实现冲çª<C3A7>高亮
- 冲çª<C3A7>行背景色浅红(仅结论ä¸<C3A4>一致)
- 冲çª<C3A7>Tag显示
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.4.6** 实现å¤<C3A5>æ ¸Drawer
- 使用 `Ant Design Drawer`�000px宽)
- 左侧70%:æ‡çŒ®è¯¦æƒ…ã€<C3A3>模åžåˆ¤æ­ã€<C3A3>è¯<C3A8>æ<EFBFBD>? - å<>³ä¾§30%:人工å¤<C3A5>核表å<C2A8>•(stickyï¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.4.7** 实现ç­é€‰Tab
- 全部ã€<C3A3>冲çª<C3A7>ã€<C3A3>已纳入ã€<C3A3>å·²æŽé™¤ã€<C3A3>å·²å¤<C3A5>æ ¸
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T3.4.8** 实现分页
- å<>Žç«¯åˆ†é¡µï¼?0æ<30>?页)
- 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
**Day 14-15 验收标准** ✅:
- âœ?审核工作å<C593>°å®Œæ•´å<C2B4>¯ç”?- âœ?表格å<C2BC>¯æ­£ç¡®å±•示ç­é€‰ç»“果(å<CB86>Œè¡Œï¼?- âœ?冲çª<C3A7>项高亮显示(红色背景ï¼?- âœ?å¤<C3A5>æ ¸Drawerå<72>¯å¼¹å‡ºå¹¶æ<C2B6><C3A6>交
- �进度实时更新�秒轮询)
- âœ?列表顺åº<C3A5>与Excel上传一è‡?
---
## 🗓ï¸?Week 4: ç»“æžœå±•ç¤ºä¸Žé†æˆ<C3A6>æµè¯•(Day 16-20)✅ 已完æˆ?
**完æˆ<C3A6>日期**: 2025-11-21
**实际耗时**: 1天(3å°<C3A5>æ—¶ï¼?
**完æˆ<C3A6>报åŠ**: [Week4完æˆ<C3A6>报åŠ](../05-å¼€å<E282AC>è®°å½?2025-11-21-Week4完æˆ<C3A6>报åŠ.md)
**架构验è¯<C3A8>**: âœ?完全符å<C2A6>ˆäºåŽŸç”Ÿå¼€å<E282AC>è§„èŒ?
### Day 16: 结果统计与展��
#### å‰<C3A5>端任务
- [✅] **T4.1.1** 实现统计æ¦è§ˆå<CB86>¡ç‰‡
- 4个å<C2AA>¡ç‰‡ï¼ˆæ€»æ•°ã€<C3A3>纳入ã€<C3A3>æŽé™¤ã€<C3A3>å¾…å¤<C3A5>æ ¸ï¼? - 使用 `Ant Design Statistic`
- 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T4.1.2** 实现 PRISMA å¼<C3A5>æŽé™¤æ€»ç»“
- 按æŽé™¤åŽŸå åˆ†ç»„统计(å<CB86>Žç«¯è<C2AF>šå<C5A1>ˆï¼? - 柱状å¾å±•示(Progress组件ï¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T4.1.3** 实现结果列表 Tab é¡? - 全部ã€<C3A3>已纳入ã€<C3A3>å·²æŽé™¤ã€<C3A3>å¾…å¤<C3A5>æ ¸ Tab
- Tabæ•°é‡<C3A9>动æ€<C3A6>显ç¤? - 实际耗时ï¼?0 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T4.1.4** 实现结果表格(混å<C2B7>ˆæ¹æ¡ˆï¼‰
- 列:åº<C3A5>å<EFBFBD>·ã€<C3A3>标题ã€<C3A3>AI共识ã€<C3A3>æŽé™¤åŽŸå ã€<C3A3>人工最终决ç­ã€<C3A3>状æ€<C3A6>ã€<C3A3>æ“<C3A6>ä½? - å<>¯ç¹å‡»æ ‡é¢˜å±•开查çœå<E280B9>Œæ¨¡åžè¯¦ç»†åˆ¤æ? - 总宽åº?70px(无需横å<C2AA>滚动ï¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T4.1.5** 实现å<C2B0>Žç«¯ç»Ÿè®¡API
- GET /projects/:projectId/statistics
- Prisma并行è<C592>šå<C5A1>ˆæŸ¥è¯¢
- 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
**Day 16 验收标准** ✅:
- âœ?统计数æ<C2B0>®æ­£ç¡®å±•示
- �PRISMA 排除总结清晰
- âœ?结果列表å<C2A8>¯æ­£å¸¸æŸ¥çœ?- âœ?æ··å<C2B7>ˆæ¹æ¡ˆè§£å†³é€»è¾çŸç¾
- âœ?äºåŽŸç”Ÿæž¶æž„éªŒè¯<C3A8>通过
---
### Day 17: Excel 导出功能
#### å<>Žç«¯ä»»åŠ¡
- [ ] **T4.2.1** å<>Žç«¯å®žçŽ°å¯¼å‡ºé€»è¾
- 使用 `exceljs` åº? - 生æˆ<C3A6> Excel 文件
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [ ] **T4.2.2** 实现导出 API
- `GET /api/v1/asl/projects/:id/screening/results/export`
- 支æŒ<C3A6>过滤å<C2A4>数(导出全éƒ?仅纳å…?仅排除)
- 预计耗时ï¼?.5 å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
#### å‰<C3A5>端任务
- [ ] **T4.2.3** å‰<C3A5>端实现导出按é®
- 调用导出 API
- 下载文件
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:å‰<C3A5>端开å<E282AC>?
- [✅] **T4.2.1** åˆå»ºExcel导出工具
- 文件:`utils/excelExport.ts`
- 使用 `xlsx` 库(å‰<C3A5>端生æˆ<C3A6>ï¼Œé¶æ‡ä»¶è<C2B6>½ç˜ï¼? - 实际耗时ï¼?.5 å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T4.2.2** 实现导出功能
- 导出统计æ˜è¦<C3A8>ï¼?个Sheetï¼? - 导出åˆ<C3A5>ç­ç»“果(当å‰<C3A5>Tabï¼? - 导出选中é¡? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T4.2.3** Excelæ ¼å¼<C3A5>优åŒï¼ˆæ··å<C2B7>ˆæ¹æ¡ˆï¼‰
- å…?0列完整信æ<C2A1>? - 包å<E280A6>«AI共识ã€<C3A3>å<EFBFBD>Œæ¨¡åžè¯¦ç»†åˆ¤æ­ã€<C3A3>人工决ç­? - 一行显示全部信æ<C2A1>? - 自动设置列宽
- 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
**Day 17 验收标准** ✅:
- âœ?å<>¯æˆ<C3A6>功导å‡?Excelï¼?ç§<C3A7>æ¹å¼<C3A5>)
- âœ?导出格å¼<C3A5>规范ï¼?0列)
- âœ?æ•°æ<C2B0>®å®Œæ•´å‡†ç¡®
- âœ?äºåŽŸç”Ÿï¼šå‰<C3A5>端生æˆ<C3A6>ï¼Œé¶æ‡ä»¶è<C2B6>½ç˜
---
### Day 18: 完整æµ<C3A6>ç¨æµè¯• âœ?
#### 醿ˆ<C3A6>æµè¯•任务
- [✅] **T4.3.1** 端到端完整æµ<C3A6>ç¨æµè¯? - 上传 â†?ç­›é€?â†?å¤<C3A5>æ ¸ â†?统计 â†?导出
- 使用真实çš?7 篇æµè¯•æ•°æ<C2B0>? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant + 用户
- [✅] **T4.3.2** UI/UX优åŒ
- ä¿®å¤<C3A5>逻è¾çŸç¾ï¼ˆçº³å…¥ä¸<C3A4>显示æŽé™¤åŽŸå ï¼? - 实现混å<C2B7>ˆæ¹æ¡ˆï¼ˆAI共识+人工决策ï¼? - 优化表格宽度ï¼?70px,无需滚动ï¼? - 实际耗时ï¼? å°<C3A5>æ—¶
- 完æˆ<C3A6>人:AI Assistant + 用户
- [✅] **T4.3.3** 性能测试
- 统计API�500ms�99篇)
- Excel导出ï¼?3ç§ï¼ˆ199篇)
- 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
- [✅] **T4.3.4** 创建快速测试工� - `scripts/get-test-projects.mjs`
- 自动推è<C2A8><C3A8>有数æ<C2B0>®çš„项ç®
- 生æˆ<C3A6>æµè¯•URL
- 实际耗时�0 分钟
- 完æˆ<C3A6>人:AI Assistant
**Day 18 验收标准** ✅:
- âœ?完整æµ<C3A6>ç¨æ— é˜»å¡?- âœ?æ··å<C2B7>ˆæ¹æ¡ˆè§£å†³é—®é¢˜
- �性能达标
- âœ?符å<C2A6>ˆäºåŽŸç”Ÿè§„èŒ?
---
### Day 19: è´¨é‡<C3A9>验收
#### è´¨é‡<C3A9>验收任务
- [ ] **T4.4.1** 准确率测è¯? - ä½¿ç”¨é‡æ ‡å‡†æ•°æ<C2B0>®é†ï¼?99 篇)
- 计算准确率ã€<C3A3>å<EFBFBD>¬åžçއã€<C3A3>F1
- 目标:准确率 �85%
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:AIå·¥ç¨å¸?+ 医学专家
- [ ] **T4.4.2** å<>Œæ¨¡åžä¸€è‡´æ€§æµè¯? - 计算一致率
- 目标:≥ 80%
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:AIå·¥ç¨å¸?
- [ ] **T4.4.3** JSON Schema 验è¯<C3A8>率æµè¯? - 统计验è¯<C3A8>通过çŽ? - 目标:≥ 95%
- 预计耗时�0 分钟
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [ ] **T4.4.4** 人工å¤<C3A5>核队列æµè¯•
- 统计需人工å¤<C3A5>核的比ä¾? - 目标:≤ 20%
- 预计耗时�0 分钟
- 负责人:AIå·¥ç¨å¸?
- [ ] **T4.4.5** æ ¹æ<C2B9>®æµè¯•结果优åŒ
- 调整æ<C2B4><C3A6>示è¯? - 调整分æµ<C3A6>阈å€? - 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:AIå·¥ç¨å¸?
**Day 19 验收标准**�- �准确��85%
- âœ?å<>Œæ¨¡åžä¸€è‡´çއ â‰?80%
- âœ?JSON Schema 验è¯<C3A8>通过çŽ?â‰?95%
- âœ?人工å¤<C3A5>核队列 â‰?20%
---
### Day 20: 文档与交�
#### 文档任务
- [ ] **T4.5.1** 编写用户手册
- 功能ä»ç»<C3A7>
- æ“<C3A6>作步骤
- 常è§<C3A8>问题
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:产å“<C3A5>ç»<C3A7>ç<EFBFBD>
- [ ] **T4.5.2** 编写技术文� - 架构设计
- API 文档
- æ•°æ<C2B0>®åº“设è®? - 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:å<C5A1>Žç«¯å¼€å<E282AC>?
- [ ] **T4.5.3** 编写测试报告
- 测试用例
- 测试结果
- è´¨é‡<C3A9>指æ 
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:测试
- [ ] **T4.5.4** 代ç <C3A7>审查
- 代ç <C3A7>规范检æŸ? - 安全性检æŸ? - 性能检æŸ? - 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:技�Leader
- [ ] **T4.5.5** 准备演示环境
- 部署到测试环å¢? - 准备演示数æ<C2B0>®
- 预计耗时ï¼? å°<C3A5>æ—¶
- 负责人:è¿<C3A8>ç»´
**Day 20 验收标准**�- �文档完整
- âœ?代ç <C3A7>è´¨é‡<C3A9>å<EFBFBD>ˆæ ¼
- �测试报告完整
- �演示环境就绪
---
## 📊 总体验收清å<E280A6>•ï¼?025-11-21 æ›´æ–°ï¼?
### 功能完整性(MVP核心�
- [✅] 用户å<C2B7>¯ä¸Šä¼?Excel 文件
- [✅] Excel æ ¼å¼<C3A5>验è¯<C3A8>æ­£å¸¸ï¼ˆä¸­è±æ‡è¡¨å¤´ï¼?- [✅] æ‡çŒ®åŽ»é‡<C3A9>功能正常(DOI优先,标题辅助)
- [✅] AI å<>Œæ¨¡åžç­é€‰å<E280B0>¯è¿<C3A8>行(DeepSeek + Qwenï¼?- [✅] 冲çª<C3A7>自动检æµåŒæ ‡è®°ï¼ˆä»…结论ä¸<C3A4>一致)
- [✅] 人工å¤<C3A5>核界é<C592>¢å®Œæ•´ï¼ˆDetailReviewDrawerï¼?- [✅] 批é‡<C3A9>选æ©åŠŸèƒ½æ­£å¸¸ï¼ˆCheckbox多选)
- [✅] 结果统计正确展示(统计概è§?PRISMAæŽé™¤åˆ†æž<C3A6>ï¼?- [✅] Excel 导出功能正常ï¼?ç§<C3A7>导出æ¹å¼<C3A5>)
- [✅] ASL模å<C2A1>—在顶部导航显示并å<C2B6>¯ç¹å‡?- [✅] æ··å<C2B7>ˆæ¹æ¡ˆè§£å†³é€»è¾çŸç¾ï¼ˆAI决ç­+人工决策明确区分ï¼?
### è´¨é‡<C3A9>指æ 
- [âš ï¸<C3AF>] 准确çŽ?60%ï¼?*ç®æ ‡85%,需Prompt优åŒ**ï¼?- [✅] å<>Œæ¨¡åžä¸€è‡´çއ 70-100%
- [✅] JSON Schema 验è¯<C3A8>通过çŽ?100%
- [âš ï¸<C3AF>] 人工å¤<C3A5>核队列 20-30%ï¼ˆç®æ ‡â‰¤20%ï¼?
### 性能指标
- [âš ï¸<C3AF>] 199 篇文献筛é€?33-66 分钟(串行,**å<>¯ä¼˜åŒä¸º3-5å¹¶å<C2B6>**ï¼?- [✅] Excel 上传å“<C3A5>应 < 1 ç§ï¼ˆå†…存解æž<C3A6>ï¼?- [✅] 页é<C2B5>¢åŠ è½½ < 2 ç§?
### 架构验è¯<C3A8>
- [✅] ASL模å<C2A1>—正确注册(左侧导航)
- [✅] å<>Žç«¯è·¯ç”±æ³¨å†Œåˆ?/api/v1/asl/*
- [✅] æ•°æ<C2B0>®ä¿<C3A4>å­˜åˆ?asl_schema
- [✅] å¤<C3A5>用 common/llm æˆ<C3A6>功(LLMFactoryï¼?- [✅] Prisma Client 正常工作(全局实例ï¼?- [✅] äºåŽŸç”Ÿè¦<C3A8>æ±ï¼šå†…存解æž<C3A6>Excel
- [✅] äºåŽŸç”Ÿè¦<C3A8>æ±ï¼šå¼æ­¥å¤„ç<E2809E>†ç­é€‰ä»»åŠ?
---
---
## 🚀 Phase 2: 智能Prompt生æˆ<C3A6>模å<C2A1>—(Week 5-7ï¼?
> **å‰<C3A5>ç½®æ<C2AE>¡ä»¶**: MVP阶段(Week 1-4)完æˆ?
> **å¼€å<E282AC>卿œ?*: 3å?
> **优先�*: P1(高级功能)
> **详细设计**: [智能Prompt生æˆ<C3A6>模å<C2A1>—å¼€å<E282AC>计åˆ](../02-技术设è®?07-智能Prompt生æˆ<C3A6>模å<C2A1>—å¼€å<E282AC>计åˆ?md)
### 核心目标
**解决问题**: 消除AI与人类对边界情况的ç<E2809E>†è§£å·®å¼?
**核心æµ<C3A6>ç¨**:
```
用户输入PICOS â†?AI分æž<C3A6>边界情况 â†?用户确认 â†?生æˆ<C3A6>自定义Prompt â†?ç­›é€?```
---
### 🗓ï¸?Week 5: å<>Žç«¯å¼€å<E282AC>(Day 21-25ï¼?
#### Day 21-22: PICOS分æž<C3A6>æœ<C3A6>务
- [ ] **T5.1.1** åˆå»ºPrompté…<C3A9>置数æ<C2B0>®è¡? - 文件:`backend/prisma/schema.prisma`
- 新增模型:`PromptConfiguration`
- 预计耗时ï¼?å°<C3A5>æ—¶
- [ ] **T5.1.2** 实现PICOS分æž<C3A6>æœ<C3A6>务
- 文件:`backend/src/modules/asl/services/picosAnalyzer.ts`
- 功能:调用LLM分æž<C3A6>PICOS,生æˆ<C3A6>边界问é¢? - 预计耗时ï¼?å¤?
- [ ] **T5.1.3** API: 分æž<C3A6>PICOS
- 路由:`POST /api/v1/asl/prompt/analyze`
- 预计耗时ï¼?å°<C3A5>æ—¶
#### Day 23: Prompt生æˆ<C3A6>æœ<C3A6>务
- [ ] **T5.2.1** 实现Prompt生æˆ<C3A6>逻è¾
- 文件:`backend/src/modules/asl/services/promptGenerator.ts`
- 预计耗时��
- [ ] **T5.2.2** API: 确认边界规则并生æˆ<C3A6>Prompt
- 路由:`POST /api/v1/asl/prompt/confirm-rules`
- 预计耗时ï¼?å°<C3A5>æ—¶
#### Day 24: Promptä¿<C3A4>存与使ç”?
- [ ] **T5.3.1** API: ä¿<C3A4>存最终Prompt
- 路由:`POST /api/v1/asl/prompt/save`
- 预计耗时ï¼?å°<C3A5>æ—¶
- [ ] **T5.3.2** 修改ç­é€‰æœ<C3A6>务支æŒ<C3A6>自定义Prompt
- æ°å¢žå<C5BE>数:`customPromptOverride?: string`
- 预计耗时ï¼?å°<C3A5>æ—¶
#### Day 25: 测试与优�
- [ ] **T5.4.1** å<>•å…ƒæµè¯•
- 预计耗时ï¼?å°<C3A5>æ—¶
- [ ] **T5.4.2** 醿ˆ<C3A6>æµè¯•
- 预计耗时ï¼?å°<C3A5>æ—¶
---
### 🗓ï¸?Week 6: å‰<C3A5>端开å<E282AC>(Day 26-30ï¼?
#### Day 26: PICOS输入界é<C592>¢
- [ ] **T6.1.1** åˆå»ºPICOSé…<C3A9>置页é<C2B5>¢
- 路径:`/asl/projects/:id/prompt-config`
- 预计耗时ï¼?å°<C3A5>æ—¶
- [ ] **T6.1.2** PICOS输入表å<C2A8>•组件
-¸ªè¾“入字æ®? - 预计耗时ï¼?å°<C3A5>æ—¶
#### Day 27-28: 用户确认界é<C592>¢
- [ ] **T6.2.1** AIç<49>†è§£å±•示组件
- 显示必须纳入/æŽé™¤çš„è¦<C3A8>ç´? - 预计耗时ï¼?å¤?
- [ ] **T6.2.2** 边界问题确认组件
- é€<C3A9>个确认边界问题
- 预计耗时��
#### Day 29: Promptç¼è¾å™?
- [ ] **T6.3.1** Prompt预览与ç¼è¾ç»„ä»? - 支æŒ<C3A6>用户ç¼è¾åŒä¿<C3A4>å­? - 预计耗时ï¼?å¤?
#### Day 30: 醿ˆ<C3A6>与æµè¯?
- [ ] **T6.4.1** 完整æµ<C3A6>ç¨é†æˆ<C3A6>
- 预计耗时ï¼?å°<C3A5>æ—¶
- [ ] **T6.4.2** UI/UX优åŒ
- 预计耗时ï¼?å°<C3A5>æ—¶
---
### 🗓ï¸?Week 7: 优åŒä¸Žä¸Šçº¿ï¼ˆDay 31-35ï¼?
#### Day 31-32: 功能完善
- [ ] **T7.1.1** Prompt模æ<C2A1>¿ç®¡ç<C2A1>
- 预计耗时��
- [ ] **T7.1.2** 在ç­é€‰ä»»åŠ¡ä¸­ä½¿ç”¨è‡ªå®šä¹‰Prompt
- 预计耗时ï¼?å°<C3A5>æ—¶
#### Day 33: 测试
- [ ] **T7.2.1** 端到端测� - 预计耗时��
#### Day 34-35: 优化与上�
- [ ] **T7.3.1** 性能优化
- 预计耗时ï¼?å°<C3A5>æ—¶
- [ ] **T7.3.2** 用户文档
- 预计耗时ï¼?å°<C3A5>æ—¶
- [ ] **T7.3.3** 上线部署
- 预计耗时ï¼?å°<C3A5>æ—¶
---
### Phase 2 验收标准
- [ ] 用户å<C2B7>¯ä»¥è¾“å…¥PICOSåŒçº³æŽæ ‡å‡?- [ ] AIå<49>¯ä»¥åˆ†æž<C3A6>并生æˆ?-8个边界问é¢?- [ ] 用户å<C2B7>¯ä»¥ç¡®è®¤æ¯<C3A6>个边界问题的处ç<E2809E>†æ¹å¼?- [ ] 系统å<C5B8>¯ä»¥è‡ªåŠ¨ç”Ÿæˆ<C3A6>自定义Prompt
- [ ] 用户å<C2B7>¯ä»¥ç¼è¾ç”Ÿæˆ<C3A6>çš„Prompt
- [ ] ç­é€‰ä»»åŠ¡å<C2A1>¯ä»¥ä½¿ç”¨è‡ªå®šä¹‰Prompt
- [ ] Prompt生æˆ<C3A6>准确çŽ?â‰?90%
---
## 📊 完整进度跟踪�025-11-21 更新�
| 阶段 | Week | 任务 | 状æ€?| 完æˆ<C3A6>æ—¶é—´ | 备注 |
|------|------|------|------|----------|------|
| **MVP** | Week 1 | æ•°æ<C2B0>®åº?å<>Žç«¯API | âœ?| 2025-11-18 | æ<><C3A6>å‰<C3A5>4天完æˆ?|
| **MVP** | Week 2 | LLMç­é€‰æ ¸å¿?| âœ?| 2025-11-21 | 准确çŽ?0%,需优化 |
| **MVP** | Week 3 | å‰<C3A5>端UI(设ç½?工作å<C593>°ï¼‰ | âœ?| 2025-11-21 | 实际在Week 2完æˆ<C3A6> |
| **MVP** | Week 4 | 结果展示+导出 | âœ?| 2025-11-21 | **æ··å<C2B7>ˆæ¹æ¡ˆï¼ŒäºåŽŸç”Ÿæž¶æž„** |
| **MVP优åŒ** | - | **Prompt优åŒ** | 🔄 | - | **ä¸ä¸€æ­¥ï¼šæ<C5A1><C3A6>å<EFBFBD>‡è‡?5%** |
| **MVP优åŒ** | - | å¹¶å<C2B6>处ç<E2809E>†ä¼˜åŒ | â<>¸ï¸<C3AF> | - | 3-5å¹¶å<C2B6>,æ<C592><C3A6>å<EFBFBD>‡æ€§èƒ½ |
| **Phase 2** | Week 5 | 智能Promptå<74>Žç«¯ | â¬?| - | å¾…MVPè´¨é‡<C3A9>达标å<E280A1>Žå¼€å§?|
| **Phase 2** | Week 6 | 智能Promptå‰<C3A5>端 | â¬?| - | - |
| **Phase 2** | Week 7 | 优化+上线 | �| - | - |
---
## 📚 相关文档
- [å¼€å<EFBFBD>里ç¨ç¢](./01-å¼€å<E282AC>里ç¨ç¢.md)
- [标题æ˜è¦<EFBFBD>åˆ<EFBFBD>ç­å¼€å<EFBFBD>计åˆ](./02-标题æ˜è¦<C3A8>åˆ<C3A5>ç­å¼€å<E282AC>计åˆ?md)
- [è´¨é‡<EFBFBD>ä¿<EFBFBD>éšœç­ç•¥](../02-技术设è®?06-è´¨é‡<C3A9>ä¿<C3A4>障与å<C5BD>¯è¿½æº¯ç­ç•¥.md)
- [技术选型](../02-技术设è®?07-æ‡çŒ®å¤„ç<E2809E>†æŠ€æœ¯é€‰åž.md)
- [API 设计规范](../02-技术设�02-API设计规范.md)
- [智能Prompt生æˆ<EFBFBD>模å<EFBFBD>](../02-技术设è®?07-智能Prompt生æˆ<C3A6>模å<C2A1>—å¼€å<E282AC>计åˆ?md) â­?**新增**
- [å‰<EFBFBD>å<EFBFBD>Žç«¯æ¨¡å<EFBFBD>—åŒæž¶æž„设计-V2](../../../00-系统总体设计/å‰<C3A5>å<EFBFBD>Žç«¯æ¨¡å<C2A1>—åŒæž¶æž„设计-V2.md)
- [Schema隔离架构设计](../../../09-架构实施/01-Schema隔离架构设计�0个).md)
---
**更新日志**ï¼?- 2025-11-21: V3.3 æ´æ°ï¼ŒWeek 4功能完æˆ<C3A6>(结果展ç¤?Excel导出,混å<C2B7>ˆæ¹æ¡ˆè§£å†³é€»è¾çŸç¾ï¼?- 2025-11-21: V3.2 æ´æ°ï¼Œå<C592><C3A5>映MVP核心功能完æˆ<C3A6>状æ€<C3A6>(Week 1-3已完æˆ<C3A6>,准确çŽ?0%需优化ï¼?- 2025-11-18: V4.0 æ´æ°ï¼Œæ•´å<C2B4>ˆæ™ºèƒ½Prompt生æˆ<C3A6>模å<C2A1>—(Phase 2: Week 5-7ï¼?- 2025-11-18: V3.1 æ´æ°ï¼Œè¡¥å……å¹³å<C2B3>°åŸºç¡€è®¾æ½å®Œæˆ<C3A6>状æ€<C3A6>(¸ªæ ¸å¿ƒæ¨¡å<C2A1>—,ç¦<C3A7>æ­¢æ“<C3A6>作清å<E280A6>•ï¼?- 2025-11-16: V3.0 完全é‡<C3A9>写,基于真实架构(Frontend-v2 + Backend + asl_schema),详细到æ¯<C3A6>个任åŠ?- 2025-11-16: V2.0 完全é‡<C3A9>写,详细到æ¯<C3A6>个任务(预计耗时ã€<C3A3>负责人ã€<C3A3>验收标准)
- 2025-10-29: V1.0 åˆå»ºï¼Œåˆ<C3A5>å§å<E280B9> ä½<C3A4>符