215 lines
6.6 KiB
Markdown
215 lines
6.6 KiB
Markdown
# 数据库说明
|
||
|
||
本文档说明医疗问诊 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` 返回。
|
||
- 评价生成后才写长期训练记录。
|
||
- 知识库表是生产扩展点,真实大规模入库前需要压测。
|