Features: - Backend statistics API (cloud-native Prisma aggregation) - Results page with hybrid solution (AI consensus + human final decision) - Excel export (frontend generation, zero disk write, cloud-native) - PRISMA-style exclusion reason analysis with bar chart - Batch selection and export (3 export methods) - Fixed logic contradiction (inclusion does not show exclusion reason) - Optimized table width (870px, no horizontal scroll) Components: - Backend: screeningController.ts - add getProjectStatistics API - Frontend: ScreeningResults.tsx - complete results page (hybrid solution) - Frontend: excelExport.ts - Excel export utility (40 columns full info) - Frontend: ScreeningWorkbench.tsx - add navigation button - Utils: get-test-projects.mjs - quick test tool Architecture: - Cloud-native: backend aggregation reduces network transfer - Cloud-native: frontend Excel generation (zero file persistence) - Reuse platform: global prisma instance, logger - Performance: statistics API < 500ms, Excel export < 3s (1000 records) Documentation: - Update module status guide (add Week 4 features) - Update task breakdown (mark Week 4 completed) - Update API design spec (add statistics API) - Update database design (add field usage notes) - Create Week 4 development plan - Create Week 4 completion report - Create technical debt list Test: - End-to-end flow test passed - All features verified - Performance test passed - Cloud-native compliance verified Ref: Week 4 Development Plan Scope: ASL Module MVP - Title Abstract Screening Results Cloud-Native: Backend aggregation + Frontend Excel generation
5.0 KiB
5.0 KiB
真实LLM筛选调试指南
🎯 问题已修复!
根本原因
- ❌ PICOS字段名不匹配:前端使用 P/I/C/O/S,但未映射
- ❌ 模型名格式不匹配:前端使用 'DeepSeek-V3',API需要 'deepseek-chat'
- ❌ 缺少字段验证:文献可能缺少title或abstract
修复内容
✅ 添加PICOS字段映射(P/I/C/O/S ↔ population/intervention/...)
✅ 添加模型名映射(DeepSeek-V3 → deepseek-chat)
✅ 添加文献验证(必须有title和abstract)
✅ 增强调试日志(显示映射后的值)
📄 详细报告:字段映射问题修复.md
🛠️ 排查步骤
Step 1: 检查API密钥
cd backend
cat .env | findstr API_KEY
必须配置:
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxx
QWEN_API_KEY=sk-xxxxxxxxxxxxxx
如果没有配置,请添加到 backend/.env 文件。
Step 2: 重启后端(重要!)
# 停止当前后端
Ctrl+C
# 重新启动
cd backend
npm run dev
⚠️ 代码已修改,必须重启后端!
Step 3: 清空旧数据(推荐)
cd backend
node -e "
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function cleanup() {
// 删除最新项目的筛选结果和任务
const project = await prisma.aslScreeningProject.findFirst({
orderBy: { createdAt: 'desc' }
});
if (project) {
await prisma.aslScreeningResult.deleteMany({
where: { projectId: project.id }
});
await prisma.aslScreeningTask.deleteMany({
where: { projectId: project.id }
});
console.log('✅ 已清空项目:', project.projectName);
}
await prisma.\$disconnect();
}
cleanup();
"
Step 4: 重新测试(从头开始)
- 访问前端:
http://localhost:3001 - 点击"AI智能文献"
- 填写PICOS标准
- 上传少量文献测试(建议先上传5篇,不要199篇)
- 点击"开始AI初筛"
Step 5: 查看后端控制台
应该看到:
🚀 开始真实LLM筛选:
任务ID: xxx
项目ID: xxx
文献数: 5
模型: [ 'deepseek-chat', 'qwen-max' ]
PICOS-P: xxx...
PICOS-I: xxx...
⏳ Processing literature 1/5...
[等待10-20秒]
✅ 文献 1/5 处理成功
DS: include / Qwen: include
冲突: 否
⏳ Processing literature 2/5...
[等待10-20秒]
✅ 文献 2/5 处理成功
DS: exclude / Qwen: include
冲突: 是
...
如果看到错误:
❌ 文献处理失败:
文献ID: xxx
标题: xxx
错误: [具体错误信息]
记录错误信息并告诉我!
🔍 可能的错误原因
错误1: API密钥未配置
Error: API key not found
解决:在 backend/.env 中添加API密钥
错误2: API密钥无效
Error: 401 Unauthorized
解决:检查API密钥是否正确
错误3: 网络问题
Error: ECONNREFUSED
Error: timeout
解决:检查网络连接,是否需要代理
错误4: PICOS格式错误
Error: Cannot read property 'P' of null
解决:检查项目的PICOS标准是否正确保存
错误5: Prompt文件不存在
Error: Cannot find module './prompts/...'
解决:检查 backend/prompts/asl/screening/v1.0.0-mvp.txt 是否存在
📊 成功标志
后端控制台
- ✅ 看到"🚀 开始真实LLM筛选"
- ✅ 每篇文献处理耗时10-20秒
- ✅ 看到"✅ 文献 X/Y 处理成功"
- ✅ 看到DS和Qwen的结论
数据库验证
node debug-screening.mjs
应该看到:
- 筛选结果数 > 0
- 成功数 > 0
- DS证据不包含"模拟证据"
- Prompt版本 = "v1.0.0-mvp"
前端显示
- ✅ 审核工作台显示文献
- ✅ 点击标题展开,看到真实的英文证据
- ✅ 证据不是"模拟证据: xxx"
💡 调试技巧
1. 使用少量文献测试
不要一次上传199篇,先上传5篇测试。
2. 查看完整错误
如果出错,复制完整的错误栈信息。
3. 检查环境变量
确保API密钥正确加载:
console.log('DeepSeek Key:', process.env.DEEPSEEK_API_KEY ? '已配置' : '未配置');
console.log('Qwen Key:', process.env.QWEN_API_KEY ? '已配置' : '未配置');
4. 测试单个模型
如果双模型都失败,可以尝试只使用一个模型测试。
📝 报告问题时请提供
- ✅ 后端控制台的完整错误信息
- ✅
node debug-screening.mjs的输出 - ✅ 浏览器控制台的错误(如果有)
- ✅ API密钥是否已配置(不要发送实际密钥)
- ✅ 网络环境(是否需要代理)
🎯 下一步
- 立即执行:重启后端
- 清空旧数据:避免混淆
- 小规模测试:先上传5篇文献
- 查看控制台:记录所有错误信息
- 报告结果:告诉我看到了什么
关键:现在代码中已经添加了详细的调试日志,重启后端后,控制台会显示详细的处理过程和错误信息!