Files
AIclinicalresearch/docs/03-业务模块/ASL-AI智能文献/05-开发记录/2025-11-18-Prompt设计与测试完成报告.md
HaHafeng 66255368b7 feat(admin): Add user management and upgrade to module permission system
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
2026-01-16 13:42:10 +08:00

8.4 KiB
Raw Blame History

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
  • 冲突检测与标记
  • 处理时间统计

质量指标:

{
  准确率: 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. 优化冲突检测

// 只有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行, 已更新)

文档报告

  1. 质量分析报告:

    • backend/docs/ASL-Prompt质量分析报告-v1.0.0.md (详细分析)
  2. 测试结果:

    • 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
  3. 本报告:

    • 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