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
327 lines
8.4 KiB
Markdown
327 lines
8.4 KiB
Markdown
# ASL Prompt设计与测试完成报告
|
||
|
||
**日期**: 2025-11-18
|
||
**任务**: ASL模块Prompt设计与质量测试
|
||
**状态**: ✅ 完成
|
||
**耗时**: ~4小时
|
||
|
||
---
|
||
|
||
## 📋 任务概述
|
||
|
||
根据`AIclinicalresearch\docs\03-业务模块\ASL-AI智能文献\02-技术设计\06-质量保障与可追溯策略.md`的质量要求,完成ASL模块MVP阶段的Prompt设计、测试框架搭建和质量验证。
|
||
|
||
**质量目标**:
|
||
- 准确率 ≥ 85%
|
||
- 双模型一致率 ≥ 80%
|
||
- JSON Schema验证率 ≥ 95%
|
||
- 人工复核率 ≤ 20%
|
||
|
||
---
|
||
|
||
## ✅ 完成内容
|
||
|
||
### 1. 高质量Prompt设计 (v1.0.0-MVP)
|
||
|
||
**文件**: `backend/prompts/asl/screening/v1.0.0-mvp.txt`
|
||
|
||
**设计特点**:
|
||
- ✅ 结构化分步指导(步骤1-4)
|
||
- ✅ 明确的PICO评估标准
|
||
- ✅ 详细的输出格式要求
|
||
- ✅ 医学文献筛选原则
|
||
- ✅ 置信度评分指南
|
||
- ✅ 50-300字理由要求
|
||
|
||
**核心内容**:
|
||
```
|
||
步骤1: PICO逐项评估 (match/partial/mismatch)
|
||
步骤2: 提取证据 (引用原文)
|
||
步骤3: 综合决策 (include/exclude/uncertain)
|
||
步骤4: 置信度评分 (0-1)
|
||
```
|
||
|
||
### 2. 测试数据集构建
|
||
|
||
**文件**: `backend/scripts/test-samples/asl-test-literatures.json`
|
||
|
||
**测试样本**: 10篇精心设计的医学文献
|
||
- ✅ 3篇应纳入(RCT + 心血管结局)
|
||
- ✅ 6篇应排除(综述、动物实验、病例报告、观察性研究、健康志愿者、缺乏结局)
|
||
- ✅ 1篇边界案例(双重抑制剂)
|
||
|
||
**覆盖场景**:
|
||
- RCT vs 观察性研究
|
||
- SGLT2单一抑制剂 vs 双重抑制剂
|
||
- 糖尿病患者 vs 健康志愿者
|
||
- 安慰剂对照 vs 活性对照
|
||
- 报告心血管结局 vs 仅代谢指标
|
||
- 原始研究 vs 综述/Meta分析
|
||
|
||
### 3. 自动化测试框架
|
||
|
||
**文件**: `backend/scripts/test-llm-screening.ts`
|
||
|
||
**功能特性**:
|
||
- ✅ 双模型并行测试(DeepSeek + Qwen)
|
||
- ✅ 自动质量指标计算
|
||
- ✅ 混淆矩阵分析
|
||
- ✅ 详细结果记录(JSON + Markdown)
|
||
- ✅ 冲突检测与标记
|
||
- ✅ 处理时间统计
|
||
|
||
**质量指标**:
|
||
```typescript
|
||
{
|
||
准确率: correctDecisions / totalTests,
|
||
一致率: consensusCount / totalTests,
|
||
平均置信度: avgConfidence,
|
||
需人工复核率: needReviewCount / totalTests,
|
||
混淆矩阵: { TP, FP, TN, FN, uncertain }
|
||
}
|
||
```
|
||
|
||
### 4. 代码优化与修复
|
||
|
||
**修复问题**:
|
||
1. ✅ `LLMFactory`调用方式错误 → 改用`getAdapter()`
|
||
2. ✅ 模型名称映射 → 创建`MODEL_TYPE_MAP`
|
||
3. ✅ JSON解析结果处理 → 正确提取`parseResult.data`
|
||
4. ✅ Prompt函数签名 → 增加authors/journal/year参数
|
||
|
||
**文件改动**:
|
||
- `backend/src/modules/asl/services/llmScreeningService.ts`
|
||
- `backend/src/modules/asl/schemas/screening.schema.ts`
|
||
|
||
---
|
||
|
||
## 📊 测试结果
|
||
|
||
### 首次测试成绩 (v1.0.0)
|
||
|
||
| 质量指标 | 实际值 | 目标值 | 状态 | 分析 |
|
||
|---------|--------|--------|------|------|
|
||
| **准确率** | 60.0% | ≥85% | ❌ | 需提升25% |
|
||
| **一致率** | 70.0% | ≥80% | ❌ | 需提升10% |
|
||
| **平均置信度** | 0.95 | - | ✅ | 优秀 |
|
||
| **需人工复核率** | 30.0% | ≤20% | ❌ | 需降低10% |
|
||
| **JSON验证率** | 100% | ≥95% | ✅ | 完美 |
|
||
|
||
### 成功案例 (6/10)
|
||
|
||
✅ **正确案例**:
|
||
1. test-002: RCT + 心血管结局 → ✅ 纳入
|
||
2. test-003: 系统综述 → ✅ 排除
|
||
3. test-004: 动物实验 → ✅ 排除
|
||
4. test-005: RCT + 心血管结局(CREDENCE) → ✅ 纳入
|
||
5. test-006: 回顾性队列 → ✅ 排除
|
||
6. test-009: 病例报告 → ✅ 排除
|
||
|
||
### 错误案例分析 (4/10)
|
||
|
||
❌ **错误类型**:
|
||
|
||
1. **test-001** (假阴性):
|
||
- 期望include,实际exclude
|
||
- 原因:缺乏心血管结局数据
|
||
- **评估:模型可能正确,期望值有误**
|
||
|
||
2. **test-007** (PICO冲突):
|
||
- 健康志愿者研究
|
||
- 两模型结论一致(exclude),但I和S维度判断不同
|
||
|
||
3. **test-008** (PICO冲突):
|
||
- 观察性研究
|
||
- 两模型结论一致(exclude),但C维度判断不同
|
||
|
||
4. **test-010** (严重冲突):
|
||
- 双重SGLT1/SGLT2抑制剂
|
||
- DeepSeek=exclude, Qwen=include,完全相反
|
||
|
||
---
|
||
|
||
## 🔍 核心发现
|
||
|
||
### 1. Prompt基本框架有效 ✅
|
||
|
||
**证据**:
|
||
- 6/10案例完全正确,准确率60%
|
||
- JSON Schema验证率100%
|
||
- 平均置信度0.95
|
||
|
||
### 2. 边界情况需要优化 ⚠️
|
||
|
||
**问题场景**:
|
||
- 双重抑制剂 vs 单一SGLT2抑制剂
|
||
- 健康志愿者 Phase 1研究
|
||
- 活性对照 vs 安慰剂对照
|
||
- 结局指标匹配判断
|
||
|
||
### 3. PICO判断标准需明确 ⚠️
|
||
|
||
**影响**:
|
||
- 两个模型对match/partial/mismatch的界限理解不同
|
||
- 导致即使结论一致也被标记为冲突
|
||
- 提高了人工复核率
|
||
|
||
### 4. 冲突检测过于严格 ⚠️
|
||
|
||
**现象**:
|
||
- test-007和test-008两个模型结论都是exclude
|
||
- 但因为PICO某个维度判断不同被标记为冲突
|
||
- 建议只有conclusion不同才算严重冲突
|
||
|
||
---
|
||
|
||
## 💡 优化方案
|
||
|
||
### 立即优化 (v1.0.1)
|
||
|
||
**1. 增加Few-shot示例**
|
||
```
|
||
在Prompt中增加3-5个标准案例:
|
||
- 明确纳入:RCT + SGLT2抑制剂 + 安慰剂 + 心血管结局
|
||
- 明确排除:综述、动物实验、病例报告
|
||
- 边界情况:双重抑制剂 → uncertain
|
||
```
|
||
|
||
**2. 明确PICO判断标准**
|
||
```
|
||
P: match=2型糖尿病患者 | partial=混合人群 | mismatch=健康志愿者/动物
|
||
I: match=单一SGLT2抑制剂 | partial=联合用药 | mismatch=双重抑制剂/其他
|
||
C: match=安慰剂/常规疗法 | partial=标准治疗 | mismatch=活性对照(DPP-4等)
|
||
S: match=RCT | partial=准随机 | mismatch=观察性/综述/动物/病例
|
||
```
|
||
|
||
**3. 强化uncertain使用**
|
||
```
|
||
- 信息不足 → uncertain
|
||
- 边界情况 → uncertain
|
||
- PICO有2个及以上partial → uncertain
|
||
```
|
||
|
||
**4. 优化冲突检测**
|
||
```typescript
|
||
// 只有conclusion不同才算严重冲突
|
||
const hasConflict = result1.conclusion !== result2.conclusion;
|
||
// PICO维度差异降级为"需注意"
|
||
```
|
||
|
||
### 预期改善效果
|
||
|
||
| 指标 | v1.0.0 | v1.0.1预期 | 改善 |
|
||
|------|--------|------------|------|
|
||
| 准确率 | 60% | **85-90%** | +25-30% |
|
||
| 一致率 | 70% | **85-90%** | +15-20% |
|
||
| 人工复核率 | 30% | **15-20%** | -10-15% |
|
||
|
||
---
|
||
|
||
## 📁 交付文件清单
|
||
|
||
### 核心文件
|
||
|
||
1. **Prompt模板**:
|
||
- `backend/prompts/asl/screening/v1.0.0-mvp.txt` (118行)
|
||
|
||
2. **测试数据**:
|
||
- `backend/scripts/test-samples/asl-test-literatures.json` (114行, 10篇文献)
|
||
|
||
3. **测试脚本**:
|
||
- `backend/scripts/test-llm-screening.ts` (376行)
|
||
|
||
4. **服务优化**:
|
||
- `backend/src/modules/asl/services/llmScreeningService.ts` (224行, 已优化)
|
||
- `backend/src/modules/asl/schemas/screening.schema.ts` (174行, 已更新)
|
||
|
||
### 文档报告
|
||
|
||
5. **质量分析报告**:
|
||
- `backend/docs/ASL-Prompt质量分析报告-v1.0.0.md` (详细分析)
|
||
|
||
6. **测试结果**:
|
||
- `backend/scripts/test-results/test-results-2025-11-18T08-10-57-407Z.json`
|
||
- `backend/scripts/test-results/test-report-2025-11-18T08-10-57-407Z.md`
|
||
|
||
7. **本报告**:
|
||
- `docs/03-业务模块/ASL-AI智能文献/05-开发记录/2025-11-18-Prompt设计与测试完成报告.md`
|
||
|
||
---
|
||
|
||
## 🎯 下一步计划
|
||
|
||
### Week 2 - Day 1 (明天)
|
||
|
||
**任务**: Prompt v1.0.1优化与重测
|
||
|
||
1. [ ] 创建v1.0.1 Prompt,增加Few-shot示例
|
||
2. [ ] 更新PICO判断标准说明
|
||
3. [ ] 优化冲突检测逻辑
|
||
4. [ ] 重新运行测试,验证改进效果
|
||
5. [ ] 目标:准确率≥85%,一致率≥85%
|
||
|
||
### Week 2 - Day 2-3
|
||
|
||
**任务**: 扩展测试与模型对比
|
||
|
||
1. [ ] 扩充测试样本至20-30篇
|
||
2. [ ] 测试GPT-5和Claude-4.5的表现
|
||
3. [ ] 对比不同模型组合的效果
|
||
4. [ ] 建立Few-shot示例库
|
||
|
||
### Week 2 - Day 4-5
|
||
|
||
**任务**: 集成到API与前端开发
|
||
|
||
1. [ ] 将LLM筛选集成到筛选任务控制器
|
||
2. [ ] 实现批量筛选功能
|
||
3. [ ] 开始前端UI开发
|
||
|
||
---
|
||
|
||
## 💪 团队反馈
|
||
|
||
### 优势
|
||
|
||
✅ **系统化测试框架**: 建立了完整的自动化测试流程
|
||
✅ **高质量基线**: v1.0.0 Prompt已达到60%准确率
|
||
✅ **详细可追溯**: 所有测试结果可复现
|
||
✅ **快速迭代能力**: 可快速测试不同Prompt版本
|
||
|
||
### 待改进
|
||
|
||
⚠️ **边界情况处理**: 需要更明确的判断标准
|
||
⚠️ **一致性控制**: 两个模型对同一情况的判断需更一致
|
||
⚠️ **不确定性引导**: 需引导模型更多使用uncertain
|
||
|
||
---
|
||
|
||
## 📊 统计数据
|
||
|
||
| 项目 | 数量 |
|
||
|------|------|
|
||
| 新增代码行数 | ~1,200行 |
|
||
| 新增文档页数 | ~15页 |
|
||
| 测试样本数 | 10篇 |
|
||
| 测试通过率 | 60% |
|
||
| API调用次数 | 20次(10篇×双模型) |
|
||
| 总处理时间 | 125秒 |
|
||
| 平均每篇耗时 | 12.5秒 |
|
||
|
||
---
|
||
|
||
**报告人**: AI Assistant
|
||
**审核人**: [待填写]
|
||
**日期**: 2025-11-18
|
||
**版本**: v1.0.0
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|