Files
fastapi/docs/06_demo_testing_guide.md
T
2026-06-01 09:25:26 +08:00

6.2 KiB

Demo 前端测试指南

1. 启动服务

后端:

cd D:\Code\newfounder\medical-consultation-agent\backend
.\.venv\Scripts\activate
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000

前端:

cd D:\Code\newfounder\medical-consultation-agent\frontend
npm.cmd run dev -- --host 127.0.0.1 --port 5173

浏览器访问:

http://127.0.0.1:5173

2. 初始化数据库

cd D:\Code\newfounder\medical-consultation-agent\backend
.\.venv\Scripts\python.exe scripts\migrate_to_new_schema.py

当前数据库为 medical_consultation_agent。核心表为 case_basetraditional_caseteaching_casescoring_rulecase_exam_itemtraining_sessiontraining_ordertraining_submissiontraining_record

3. 导入接口解析后的病例 SQL

接口提供的 SQL dump 先走安全检查,不直接执行原始 SQL:

cd D:\Code\newfounder\medical-consultation-agent\backend
.\.venv\Scripts\python.exe scripts\import_source_case_sql.py "C:\path\to\case.sql"

检查通过后再写入当前库:

.\.venv\Scripts\python.exe scripts\import_source_case_sql.py "C:\path\to\case.sql" --apply

导入脚本规则:

  • 忽略源 SQL 中的 DROP TABLECREATE TABLEALTER TABLELOCK TABLES
  • 按字段名映射导入 case_basetraditional_caseteaching_casescoring_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_basetraditional_caseteaching_casescoring_rule,并自动补齐基础检查项目。
  • 新增病例出现在病例列表中,可继续创建训练会话。
  • 损坏 SQL 会显示错误,不会写入任何表。

4. 入口页测试

  1. 打开入口页。
  2. 确认 user_iddemo_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. 点击“发送问诊”。

推荐问题:

孩子发热几天了?最高体温多少?
咳嗽有没有痰?有没有喘息或呼吸困难?
精神状态和食欲怎么样?
以前有没有喘息、哮喘或过敏史?
最近有没有接触感冒、肺炎或发热的人?

预期结果:

  • 前端显示流式增量内容。
  • 收到 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_doneerror
检查重复出现 刷新页面后复测,同一 item_code 应只出现一次
评价无法生成 确认已完成问诊、提交诊断、提交治疗
Redis 中有 TTL 正常行为,短期 memory 使用 TTL 自动过期