# Demo 前端测试指南 ## 1. 启动服务 后端: ```powershell cd D:\Code\newfounder\medical-consultation-agent\backend .\.venv\Scripts\activate uvicorn app.main:app --reload --host 127.0.0.1 --port 8000 ``` 前端: ```powershell cd D:\Code\newfounder\medical-consultation-agent\frontend npm.cmd run dev -- --host 127.0.0.1 --port 5173 ``` 浏览器访问: ```text http://127.0.0.1:5173 ``` ## 2. 初始化数据库 ```powershell cd D:\Code\newfounder\medical-consultation-agent\backend .\.venv\Scripts\python.exe scripts\migrate_to_new_schema.py ``` 当前数据库为 `medical_consultation_agent`。核心表为 `case_base`、`traditional_case`、`teaching_case`、`scoring_rule`、`case_exam_item`、`training_session`、`training_order`、`training_submission`、`training_record`。 ## 3. 导入接口解析后的病例 SQL 接口提供的 SQL dump 先走安全检查,不直接执行原始 SQL: ```powershell cd D:\Code\newfounder\medical-consultation-agent\backend .\.venv\Scripts\python.exe scripts\import_source_case_sql.py "C:\path\to\case.sql" ``` 检查通过后再写入当前库: ```powershell .\.venv\Scripts\python.exe scripts\import_source_case_sql.py "C:\path\to\case.sql" --apply ``` 导入脚本规则: - 忽略源 SQL 中的 `DROP TABLE`、`CREATE TABLE`、`ALTER TABLE`、`LOCK TABLES`。 - 按字段名映射导入 `case_base`、`traditional_case`、`teaching_case`、`scoring_rule`。 - 源 SQL 缺少 `case_exam_item` 时,根据病例描述生成基础检查项目。 - 源 SQL 缺少 `teaching_case` 时,只影响教学互动模式入口,不影响练习模式。 - 源 SQL 存在乱码、字段数量不匹配或损坏字符串时拒绝导入。 前端上传测试: 1. 进入 `http://127.0.0.1:5173/#/import`。 2. 选择接口解析后的 `.sql` 文件。 3. 点击“解析检查”。 4. 查看识别到的表、病例预览、警告和错误。 5. `can_import=true` 后点击“确认导入”。 6. 导入成功后点击“刷新病例库”,或直接进入病例页查看新增病例。 预期结果: - 预检阶段不写数据库。 - 确认导入阶段写入 `case_base`、`traditional_case`、`teaching_case`、`scoring_rule`,并自动补齐基础检查项目。 - 新增病例出现在病例列表中,可继续创建训练会话。 - 损坏 SQL 会显示错误,不会写入任何表。 ## 4. 入口页测试 1. 打开入口页。 2. 确认 `user_id` 为 `demo_user_001`。 3. 确认 API Base 为 `http://127.0.0.1:8000/api/v1`。 4. 点击连接或进入 Agent。 预期结果: - 页面显示后端地址、当前 user_id、入口场景和最近连接时间。 - “已连接”只在 `GET /api/v1/agent/hello` 成功返回后显示。 - 功能卡片显示流式问诊、PDF 导出、知识检索、评分类型、LLM mock/fallback 状态。 ## 5. 病例库测试 1. 进入病例页。 2. 点击“支气管肺炎 - 6岁男性患儿”病例卡片。 3. 查看病例详情。 4. 点击“开始训练”。 预期结果: - 点击病例卡片只展开详情,不直接创建会话。 - 详情展示科室、年龄、性别、主诉、训练类型、检查项目数量和是否有教学知识。 ## 6. 创建会话 1. 选择训练模式:`练习模式` 或 `教学互动模式`。 2. 选择评分类型:`百分制` 或 `五分制`。 3. 点击“创建训练会话”。 预期结果: - 后端创建 `training_session`。 - Redis/进程内 memory 生成 `memory_key`。 - Chat 页面显示 AI 病人首句。 ## 7. 多轮问诊 1. 在 Chat 输入框提问。 2. 保持流式开关开启。 3. 点击“发送问诊”。 推荐问题: ```text 孩子发热几天了?最高体温多少? 咳嗽有没有痰?有没有喘息或呼吸困难? 精神状态和食欲怎么样? 以前有没有喘息、哮喘或过敏史? 最近有没有接触感冒、肺炎或发热的人? ``` 预期结果: - 前端显示流式增量内容。 - 收到 `message_done` 后停止“正在生成”。 - 出错时显示错误,不会无限 pending。 ## 8. 查看提示 练习模式中点击“查看提示”。 预期结果: - 调用 `POST /api/v1/sessions/{session_id}/hints`。 - 显示缺失问诊维度、下一步可问问题、推荐检查。 - 提示不自动弹出,不写入长期历史。 ## 9. 检查/检验申请 在检查面板依次申请: - 血常规 - CRP - 胸片 - 血氧饱和度 - 肺部体格检查 预期结果: - 检查结果来自 `case_exam_item`。 - 同一检查重复点击不重复写入,只显示“已申请”。 - 页面提示“该检查结果已写入本次会话上下文和评分依据”。 ## 10. 诊断与治疗提交 1. 点击“完成问诊”。 2. 在提交页填写诊断。 3. 点击“提交诊断”。 4. 填写治疗方案。 5. 点击“提交治疗方案”。 演示模板可通过“填入演示模板”按钮填充,默认表单为空。 预期结果: - 完成问诊要求至少一轮医生提问。 - 诊断提交后进入治疗阶段。 - 治疗提交后进入评价阶段。 ## 11. 评价、PDF 与历史 1. 点击“生成 AI 评价报告”。 2. 查看维度评分、证据摘要、扣分点和改进计划。 3. 点击“导出 PDF”。 4. 进入历史记录页刷新。 预期结果: - 评价写入 `training_record`。 - runtime memory 释放。 - PDF 路径写入 `training_record.pdf_file_path`。 - 历史记录按当前 `user_id` 查询。 ## 12. LLM 测试 进入 LLM 测试页: - 点击“测试 Fast”。 - 点击“测试 Reason”。 预期结果: - 页面展示模型名、总耗时、是否流式、是否 mock、是否 fallback。 - 真实模型异常时显示错误,不静默伪装为真实回复。 ## 13. 常见问题 | 问题 | 排查 | |---|---| | 页面显示未连接 | 检查后端是否在 `127.0.0.1:8000` 启动 | | 缺少 `X-User-Id` | 入口页填写 user_id 后重新进入 | | 病例为空 | 运行 `scripts\migrate_to_new_schema.py` | | Chat 卡在生成中 | 查看浏览器控制台 SSE 是否收到 `message_done` 或 `error` | | 检查重复出现 | 刷新页面后复测,同一 `item_code` 应只出现一次 | | 评价无法生成 | 确认已完成问诊、提交诊断、提交治疗 | | Redis 中有 TTL | 正常行为,短期 memory 使用 TTL 自动过期 |