数据库说明
本文档说明医疗问诊 Agent FastAPI 后端依赖的核心数据表、读写边界和交接注意事项。
1. 数据库边界
当前服务连接平台 MySQL 数据库 medical。用户、机构、科室由 Django 平台维护;FastAPI 只读取用户上下文,不负责注册登录。
FastAPI 主要负责:
- 读取病例、教学题、检查项、评分规则
- 写入训练会话过程中的提交结果
- 完整训练结束后写入训练记录和评分明细
- 生成 PDF 文件路径和导出状态
- 后台预留知识库相关表
2. 用户与组织表
user
| 项 |
说明 |
| 来源 |
Django 用户中心 |
| FastAPI 用途 |
通过 /api/user/users/me/ 获取用户身份 |
| 关键字段 |
id、username、real_name、phone、role_type、institution_id、department_id、status |
| 写入方 |
Django |
| FastAPI 是否写入 |
否 |
FastAPI 使用 Django 返回的 id 作为业务 user_id。
institution
| 项 |
说明 |
| 来源 |
Django / 平台数据库 |
| FastAPI 用途 |
学习助手知识库按机构隔离 |
| 关键字段 |
id、name |
| 写入方 |
Django 或平台后台 |
| FastAPI 是否写入 |
否 |
department
| 项 |
说明 |
| 来源 |
平台数据库 |
| FastAPI 用途 |
病例科室、评分规则、知识库筛选 |
| 关键字段 |
id、name、category、institution_id |
| 写入方 |
平台后台 |
| FastAPI 是否写入 |
否 |
3. 病例与训练基础表
case_base
| 项 |
说明 |
| 用途 |
病例主表,训练和教学互动共用 |
| 读取模块 |
病例列表、病例详情、训练会话、教学互动 |
| 关键字段 |
id、department_id、title、difficulty、case_type、status |
| 写入方 |
平台病例解析 / 后台维护 |
| FastAPI 是否写入 |
否 |
traditional_case
| 项 |
说明 |
| 用途 |
练习模式传统病例详情 |
| 读取模块 |
训练会话、Patient Agent、Scoring Agent |
| 关键字段 |
case_id、主诉、现病史、既往史、查体、辅助检查、诊断、治疗 |
| 写入方 |
平台病例解析 / 后台维护 |
| FastAPI 是否写入 |
否 |
teaching_case
| 项 |
说明 |
| 用途 |
教学互动病例和题目数据 |
| 读取模块 |
教学互动列表、教学互动评价 |
| 关键字段 |
case_id、题目、选项、答案、解析、视频 |
| 写入方 |
平台病例解析 / 后台维护 |
| FastAPI 是否写入 |
否 |
case_exam_item
| 项 |
说明 |
| 用途 |
当前病例可申请的体格检查和辅助检查项 |
| 读取模块 |
检查列表、检查结果、评价 |
| 关键字段 |
case_id、item_code、item_name、item_type、result_text |
| 写入方 |
平台病例解析 / 后台维护 |
| FastAPI 是否写入 |
否 |
检查结果必须来自该表,不允许 LLM 编造。
scoring_rule
| 项 |
说明 |
| 用途 |
AI 评价基础评分规则 |
| 读取模块 |
Scoring Agent、教学互动评价 |
| 关键字段 |
case_id、department_id、评分维度、分值、规则内容 |
| 写入方 |
平台后台 |
| FastAPI 是否写入 |
否 |
4. 训练记录表
training_sessions
| 项 |
说明 |
| 用途 |
训练过程会话状态 |
| 写入模块 |
新建会话、阶段流转 |
| 关键字段 |
id、session_uid、user_id、case_id、mode、status、patient_config |
| 访问隔离 |
必须按 user_id 查询 |
session_orders
| 项 |
说明 |
| 用途 |
记录当前会话已申请检查 |
| 写入模块 |
体格检查 / 辅助检查结果接口 |
| 关键字段 |
session_id、item_code、result_text、already_ordered |
| 重要规则 |
同一会话同一 item_code 幂等,不重复写入 |
session_submissions
| 项 |
说明 |
| 用途 |
保存诊断和治疗提交内容 |
| 写入模块 |
提交诊断、提交治疗 |
| 关键字段 |
session_id、submission_type、content |
session_runtime_messages
| 项 |
说明 |
| 用途 |
调试或短期会话消息辅助表 |
| 规则 |
长期历史不以完整聊天记录为主,正式上下文优先走 Redis 短期 memory |
training_record
| 项 |
说明 |
| 用途 |
完整训练结束后的长期记录 |
| 写入模块 |
生成评价、教学互动评价 |
| 关键字段 |
id、user_id、case_id、score_type、total_score、report_summary、pdf_path |
| 重要规则 |
中断、退出、未完成流程不写入 |
training_score_detail
| 项 |
说明 |
| 用途 |
评分明细表 |
| 写入模块 |
训练评价、教学互动评价 |
| 关键字段 |
record_id、rule_id、dimension、score、deducted_reason、evidence_message_ids、ai_confidence、comment |
5. 知识库预留表
kb_knowledge_space
| 项 |
说明 |
| 用途 |
机构知识空间和 Milvus collection 映射 |
| 关键字段 |
institution_id、collection_name、embedding_model、embedding_dim、status |
kb_knowledge_document
| 项 |
说明 |
| 用途 |
内容管理员上传 PDF 的元数据 |
| 关键字段 |
institution_id、uploaded_by、file_name、file_sha256、status、parse_status、embedding_status、chunk_count |
kb_knowledge_chunk
| 项 |
说明 |
| 用途 |
PDF 分片文本和页码来源 |
| 关键字段 |
document_id、institution_id、chunk_uid、page_start、page_end、chunk_text |
kb_knowledge_ingestion_task
| 项 |
说明 |
| 用途 |
PDF 入库任务进度 |
| 关键字段 |
document_id、institution_id、status、progress、current_step、error_message |
kb_knowledge_query_log
| 项 |
说明 |
| 用途 |
AI 学习助手 RAG 查询日志 |
| 关键字段 |
user_id、institution_id、question、retrieval_hit、retrieved_chunk_ids、answer_summary、耗时字段 |
当前阶段 AI 学习助手不强依赖知识库存在;没有知识库时仍会调用 LLM 流式回答。
6. Redis 数据
Redis 用于短期会话 memory:
- 会话创建时初始化
- 问诊、检查结果、诊断治疗提交时写入
- 评价生成后释放
- TTL 到期后自动过期
Redis 不作为长期训练历史存储。
7. 数据库交接注意事项
- FastAPI 不维护用户注册登录。
- FastAPI 不直接修改病例基础数据。
- 训练记录按
user_id 隔离。
- 检查结果只从
case_exam_item 返回。
- 评价生成后才写长期训练记录。
- 知识库表是生产扩展点,真实大规模入库前需要压测。