# 真实LLM筛选调试指南 ## 🎯 问题已修复! ### 根本原因 1. ❌ **PICOS字段名不匹配**:前端使用 P/I/C/O/S,但未映射 2. ❌ **模型名格式不匹配**:前端使用 'DeepSeek-V3',API需要 'deepseek-chat' 3. ❌ **缺少字段验证**:文献可能缺少title或abstract ### 修复内容 ✅ 添加PICOS字段映射(P/I/C/O/S ↔ population/intervention/...) ✅ 添加模型名映射(DeepSeek-V3 → deepseek-chat) ✅ 添加文献验证(必须有title和abstract) ✅ 增强调试日志(显示映射后的值) 📄 详细报告:[字段映射问题修复.md](./docs/03-业务模块/ASL-AI智能文献/05-开发记录/2025-11-21-字段映射问题修复.md) --- ## 🛠️ 排查步骤 ### Step 1: 检查API密钥 ```bash cd backend cat .env | findstr API_KEY ``` **必须配置**: ``` DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxx QWEN_API_KEY=sk-xxxxxxxxxxxxxx ``` 如果没有配置,请添加到 `backend/.env` 文件。 --- ### Step 2: 重启后端(重要!) ```bash # 停止当前后端 Ctrl+C # 重新启动 cd backend npm run dev ``` ⚠️ **代码已修改,必须重启后端!** --- ### Step 3: 清空旧数据(推荐) ```bash 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: 重新测试(从头开始) 1. 访问前端:`http://localhost:3001` 2. 点击"AI智能文献" 3. 填写PICOS标准 4. **上传少量文献测试**(建议先上传5篇,不要199篇) 5. 点击"开始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的结论 ### 数据库验证 ```bash node debug-screening.mjs ``` **应该看到**: - 筛选结果数 > 0 - 成功数 > 0 - DS证据不包含"模拟证据" - Prompt版本 = "v1.0.0-mvp" ### 前端显示 - ✅ 审核工作台显示文献 - ✅ 点击标题展开,看到真实的英文证据 - ✅ 证据不是"模拟证据: xxx" --- ## 💡 调试技巧 ### 1. 使用少量文献测试 不要一次上传199篇,先上传5篇测试。 ### 2. 查看完整错误 如果出错,复制完整的错误栈信息。 ### 3. 检查环境变量 确保API密钥正确加载: ```javascript console.log('DeepSeek Key:', process.env.DEEPSEEK_API_KEY ? '已配置' : '未配置'); console.log('Qwen Key:', process.env.QWEN_API_KEY ? '已配置' : '未配置'); ``` ### 4. 测试单个模型 如果双模型都失败,可以尝试只使用一个模型测试。 --- ## 📝 报告问题时请提供 1. ✅ 后端控制台的完整错误信息 2. ✅ `node debug-screening.mjs` 的输出 3. ✅ 浏览器控制台的错误(如果有) 4. ✅ API密钥是否已配置(不要发送实际密钥) 5. ✅ 网络环境(是否需要代理) --- ## 🎯 下一步 1. **立即执行**:重启后端 2. **清空旧数据**:避免混淆 3. **小规模测试**:先上传5篇文献 4. **查看控制台**:记录所有错误信息 5. **报告结果**:告诉我看到了什么 --- **关键**:现在代码中已经添加了详细的调试日志,重启后端后,控制台会显示详细的处理过程和错误信息!