Files
2026-06-10 11:02:12 +08:00

215 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据库说明
本文档说明医疗问诊 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` 返回。
- 评价生成后才写长期训练记录。
- 知识库表是生产扩展点,真实大规模入库前需要压测。