Core Components: - PDFStorageService with Dify/OSS adapters - LLM12FieldsService with Nougat-first + dual-model + 3-layer JSON parsing - PromptBuilder for dynamic prompt assembly - MedicalLogicValidator with 5 rules + fault tolerance - EvidenceChainValidator for citation integrity - ConflictDetectionService for dual-model comparison Prompt Engineering: - System Prompt (6601 chars, Section-Aware strategy) - User Prompt template (PICOS context injection) - JSON Schema (12 fields constraints) - Cochrane standards (not loaded in MVP) Key Innovations: - 3-layer JSON parsing (JSON.parse + json-repair + code block extraction) - Promise.allSettled for dual-model fault tolerance - safeGetFieldValue for robust field extraction - Mixed CN/EN token calculation Integration Tests: - integration-test.ts (full test) - quick-test.ts (quick test) - cached-result-test.ts (fault tolerance test) Documentation Updates: - Development record (Day 2-3 summary) - Quality assurance strategy (full-text screening) - Development plan (progress update) - Module status (v1.1 update) - Technical debt (10 new items) Test Results: - JSON parsing success rate: 100% - Medical logic validation: 5/5 passed - Dual-model parallel processing: OK - Cost per PDF: CNY 0.10 Files: 238 changed, 14383 insertions(+), 32 deletions(-) Docs: docs/03-涓氬姟妯″潡/ASL-AI鏅鸿兘鏂囩尞/05-寮€鍙戣褰?2025-11-22_Day2-Day3_LLM鏈嶅姟涓庨獙璇佺郴缁熷紑鍙?md
13 KiB
13 KiB
Week 4 功能快速测试指南
测试日期: 2025-11-21
功能模块: 初筛结果页面
预计测试时间: 10分钟
🚀 一、快速开始(3步)
Step 1: 获取测试项目ID
cd backend
node scripts/get-test-projects.mjs
输出示例:
🎯 推荐测试项目(有筛选结果):
项目ID: 55941145-bba0-4b15-bda4-f0a398d78208
文献数: 7
筛选结果数: 7
Step 2: 复制测试URL并访问
方式1:通过审核工作台(推荐)
http://localhost:3000/literature/screening/title/workbench?projectId=55941145-bba0-4b15-bda4-f0a398d78208
然后点击右上角的 "查看结果统计" 按钮
方式2:直接访问结果页
http://localhost:3000/literature/screening/title/results?projectId=55941145-bba0-4b15-bda4-f0a398d78208
Step 3: 测试所有功能
见下方详细测试清单
📋 二、详细测试清单
2.1 统计概览卡片 ✅
测试项:
- 总数是否显示正确?(应该=7或199)
- 已纳入数量和百分比是否正确?
- 已排除数量和百分比是否正确?
- 待复核数量是否正确?
- 如果有冲突,是否显示冲突数量?
预期效果:
┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐
│ 总数 │ │ 已纳入│ │ 已排除│ │ 待复核│
│ 7 │ │ 2 │ │ 5 │ │ 0 │
│ 篇 │ │ 28.6% │ │ 71.4% │ │ 0% │
└───────┘ └───────┘ └───────┘ └───────┘
2.2 待复核提示 ✅
测试项:
- 当有冲突时,是否显示黄色提示框?
- 提示文字是否准确?
- "前往复核"按钮能否正常跳转?
预期效果:
⚠️ 有文献需要人工复核
还有 2 篇文献存在模型判断冲突,建议前往"审核工作台"进行人工复核
[前往复核] 按钮
测试方法:
- 点击"前往复核"按钮,应该跳转到审核工作台
2.3 PRISMA排除分析 ✅
测试项:
- 是否显示排除原因统计?
- 原因分类是否正确?
- P不匹配(人群)
- I不匹配(干预)
- C不匹配(对照)
- S不匹配(研究设计)
- 其他原因
- 数量和百分比是否正确?
- 柱状图是否按比例显示?
预期效果:
排除原因分析(PRISMA)
────────────────────────────────
P不匹配(人群) ████████ 3篇 (60%)
I不匹配(干预) ████ 2篇 (40%)
2.4 结果列表(混合方案)⭐ 重点测试
测试项:
- Tab是否正常切换?
- 全部(7)
- 已纳入(2)
- 已排除(5)
- 待复核(0)
- 表格是否有以下列?
- 序号
- 文献标题(可点击)
- AI共识(显示DS和QW是否一致)
- 排除原因(纳入显示"-")
- 人工决策(标注推翻AI或与AI一致)
- 状态(4种状态)
- 操作
重点检查:逻辑矛盾是否解决
场景1:人工推翻AI(最重要)
AI共识:⊗ 排除 (DS✓ QW✓)
人工决策:✅ 纳入 (推翻AI)
排除原因:- ← 应该是"-",不是"P不匹配"
状态:🟠 已复核-推翻AI
场景2:与AI一致
AI共识:✅ 纳入 (DS✓ QW✓)
人工决策:✅ 纳入 (与AI一致)
排除原因:-
状态:✅ 已复核-与AI一致
场景3:未复核-AI一致排除
AI共识:⊗ 排除 (DS✓ QW✓)
人工决策:未复核
排除原因:P不匹配(人群) ← 应该显示AI提取的原因
状态:⬜ 待复核-AI一致
场景4:未复核-AI冲突
AI共识:⚠️ 冲突
DS:纳入
QW:排除
人工决策:未复核
排除原因:P不匹配(人群) ← 显示排除一方的原因
状态:⚠️ 待复核-有冲突
2.5 展开行详情 ✅
测试项:
- 点击文献标题,图标是否从📕变为📖?
- 是否显示DeepSeek完整分析?
- 决策和置信度
- P/I/C/S判断和证据
- 排除理由
- 是否显示Qwen完整分析?
- 如果已复核,是否显示人工复核信息?
- 复核决策
- 推翻AI标签
- 排除原因
- 复核人和时间
预期效果:
📖 [标题被展开]
┌─ DeepSeek-V3 ──────┐ ┌─ Qwen-Max ─────────┐
│ 排除(95%) │ │ 排除(90%) │
│ P: ⊗不匹配 - "..." │ │ P: ⊗不匹配 - "..." │
│ I: ✓匹配 │ │ I: ✓匹配 │
│ C: ✓匹配 │ │ C: ✓匹配 │
│ S: ✓匹配 │ │ S: ✓匹配 │
└────────────────────┘ └───────────────────┘
👨⚕️ 人工复核
复核决策:✅ 纳入 [推翻AI建议]
复核人:张医生 | 时间:2025-11-21 14:00
2.6 批量选择与导出 ✅
测试项:
- Checkbox是否可以多选?
- "全选"、"反选"按钮是否正常?
- 选中后,是否显示"导出选中 (N)"按钮?
- "导出统计摘要"是否正常?(2个Sheet)
- "导出初筛结果"是否正常?
- "导出选中项"是否正常?
测试步骤:
测试1:导出统计摘要
- 点击"导出统计摘要"按钮
- 检查下载的Excel文件
- 应该有2个Sheet:
- Sheet1:统计摘要(总数、纳入、排除等)
- Sheet2:排除原因分析
测试2:导出初筛结果(当前Tab)
- 切换到"已排除"Tab
- 点击"导出初筛结果"按钮
- 检查下载的Excel文件
- 应该只包含已排除的文献(5篇)
- 文件名应包含"_excluded"
测试3:导出选中项
- 在"全部"Tab中,勾选前3篇文献
- 点击"导出选中 (3)"按钮
- 检查下载的Excel文件
- 应该只包含选中的3篇文献
测试4:Excel内容完整性
打开导出的Excel,检查是否包含所有40列:
- 基础信息(8列)
- AI共识(2列)
- DeepSeek分析(11列,包含证据)
- Qwen分析(11列,包含证据)
- 人工决策(4列)
- 状态(2列)
2.7 页面导航 ✅
测试项:
- 在审核工作台,筛选完成后,是否显示"查看结果统计"按钮?
- 点击按钮能否正确跳转到结果页?
- projectId是否正确传递?
- 左侧导航的"初筛结果"能否正常点击?
🐛 三、常见问题排查
问题1:页面报错"主应用模块加载失败"
原因:组件导入错误
解决:
- 已修复
import ConclusionTag的导入方式 - 刷新页面应该正常
问题2:统计数据不显示
可能原因:
- projectId参数缺失
- 后端API未启动
- 项目无筛选结果
排查方法:
- 检查URL是否包含
?projectId=... - 打开浏览器控制台,查看网络请求
- 确认后端服务在运行(http://localhost:3001)
- 使用
get-test-projects.mjs确认项目有数据
问题3:Excel导出慢或卡顿
正常情况:
- <100篇:<1秒
- 100-1000篇:1-3秒
- 1000-5000篇:3-5秒
如果>5秒:
- 可能数据量太大(>5000篇)
- 需要切换到后端导出方案(技术债务)
问题4:排除原因显示不正确
检查点:
- 如果最终决策是"纳入",排除原因应该显示"-"
- 如果最终决策是"排除",应该显示原因
- 如果是人工复核,应该优先显示人工填写的原因
- 如果未复核,显示AI提取的原因
如果不符合:
- 截图发送问题场景
- 我会修复逻辑
🎯 四、测试数据集
小数据集(7篇)- 快速测试
项目ID: 55941145-bba0-4b15-bda4-f0a398d78208
文献数: 7
筛选结果: 7
测试URL:
http://localhost:3000/literature/screening/title/results?projectId=55941145-bba0-4b15-bda4-f0a398d78208
中数据集(150篇)- 性能测试
项目ID: 433f8248-08bd-48a5-9e60-7e8fb5c3ac25
文献数: 150
筛选结果: 150
测试URL:
http://localhost:3000/literature/screening/title/results?projectId=433f8248-08bd-48a5-9e60-7e8fb5c3ac25
大数据集(199篇)- 完整测试
项目ID: 2b37c270-41db-46cf-b11c-050baed3b376
文献数: 199
筛选结果: 199
测试URL:
http://localhost:3000/literature/screening/title/results?projectId=2b37c270-41db-46cf-b11c-050baed3b376
✅ 五、预期测试结果
页面应该显示
- 统计概览:4个卡片(总数、已纳入、已排除、待复核)
- 待复核提示:如果有冲突,显示黄色Alert
- PRISMA排除分析:柱状图显示各原因占比
- 结果列表:
- 4个Tab(全部/已纳入/已排除/待复核)
- 7列表格(序号、标题、AI共识、排除原因、人工决策、状态、操作)
- Checkbox多选
- 导出按钮:3个按钮(导出统计摘要、导出初筛结果、导出选中项)
混合方案效果验证 ⭐
关键检查点:
✅ 无逻辑矛盾
如果最终决策是"纳入",排除原因应该显示"-"
如果最终决策是"排除",排除原因应该显示具体原因
✅ 信息清晰
AI共识列:清楚显示双模型是否一致
人工决策列:标注"推翻AI"或"与AI一致"
状态列:4种状态清晰区分
✅ 展开详情完整
点击标题展开后:
- DeepSeek完整分析(判断+证据+理由)
- Qwen完整分析(判断+证据+理由)
- 人工复核信息(如果已复核)
📤 六、Excel导出测试
6.1 导出统计摘要
操作:点击"导出统计摘要"按钮
预期结果:
- 文件名:
项目[ID]_统计摘要_2025-11-21.xlsx - Sheet1:统计摘要(6行数据)
- Sheet2:排除原因分析(N行,N=排除原因种类)
检查点:
- 文件名是否正确?
- 是否有2个Sheet?
- 统计数据是否准确?
6.2 导出初筛结果(当前Tab)
操作:
- 切换到"已排除"Tab
- 点击"导出初筛结果"按钮
预期结果:
- 文件名:
项目[ID]_excluded_2025-11-21.xlsx - 只包含已排除的文献
- 共40列信息
检查点:
- 文件名包含"_excluded"?
- 只包含已排除的文献?
- 是否有40列?
40列清单:
基础信息(8列):
1. 序号
2. 文献标题
3. 摘要
4. 作者
5. 期刊
6. 发表年份
7. PMID
8. DOI
AI共识(2列):
9. AI共识
10. AI是否一致
DeepSeek分析(11列):
11. DeepSeek决策
12. DeepSeek置信度
13-16. DeepSeek-P/I/C/S判断
17-20. DeepSeek-P/I/C/S证据
21. DeepSeek排除理由
Qwen分析(11列):
22. Qwen决策
23. Qwen置信度
24-27. Qwen-P/I/C/S判断
28-31. Qwen-P/I/C/S证据
32. Qwen排除理由
人工决策(4列):
33. 人工决策
34. 人工排除原因
35. 复核人
36. 复核时间
状态(2列):
37. 状态
38. 冲突状态
(实际可能更多列)
6.3 导出选中项
操作:
- 在表格中勾选3篇文献
- 点击"导出选中 (3)"按钮
预期结果:
- 文件名:
项目[ID]_选中_2025-11-21.xlsx - 只包含选中的3篇文献
- 信息完整(40列)
检查点:
- 文件名包含"_选中"?
- 只有3篇文献?
- 信息是否完整?
🎨 七、UI/UX验证
7.1 视觉效果
- 统计卡片是否美观?
- 柱状图是否清晰?
- 表格列宽是否合适?
- Tag颜色是否区分明显?
- 绿色:纳入/已复核-与AI一致
- 灰色:排除/待复核-AI一致
- 橙色:已复核-推翻AI
- 黄色:待复核-有冲突
7.2 交互体验
- 点击文献标题能否流畅展开?
- Checkbox选择是否流畅?
- Tab切换是否有延迟?
- 导出Excel是否有进度提示?
7.3 信息清晰度 ⭐ 重点
- 能否一眼看出是AI决策还是人工决策?
- 能否清楚知道是否推翻了AI建议?
- 排除原因是否符合逻辑(纳入不显示原因)?
- 状态标签是否容易理解?
🚨 八、已知限制
8.1 Excel导出限制
- 当前方案:前端生成,适用<5000条
- 如果卡顿:需切换到后端导出+OSS(技术债务)
8.2 统计性能
- 当前性能:199篇约200ms
- 如果>1000篇:可能需要缓存优化
📞 九、反馈方式
测试中发现任何问题,请反馈:
- 截图:显示问题的具体界面
- 描述:问题的具体表现
- 数据:使用的projectId
- 浏览器:控制台错误信息(按F12查看)
测试愉快! 🎉