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

4.1 KiB
Raw Blame History

数据库设计

1. 当前确定方案

医疗问诊 Agent 使用独立数据库 medical_consultation_agent。病例来源以源库结构为准,当前业务不再依赖旧的 casescase_exam_itemstraining_sessionssession_orderssession_submissionsevaluation_recordsevaluation_report_exportsrubric_templates

旧表已清理。后续开发直接面向新表:

分类 说明
病例来源 case_base 病例主表,来自源库字段
病例来源 traditional_case 练习模式病例扩展
病例来源 teaching_case 教学互动模式病例扩展
评分规则 scoring_rule 病例级基础评分规则
检查项目 case_exam_item 本业务新增,保存固定检查/检验结果
训练运行 training_session 本业务新增,保存一次训练会话状态
训练运行 training_order 本业务新增,保存一次训练中的检查申请
训练运行 training_submission 本业务新增,保存诊断和治疗提交
训练结果 training_record 完整训练结束后的长期评价记录
知识库 knowledge_sourcesknowledge_documentsknowledge_chunks 评分指南检索和引用
提示词 prompt_templates Markdown 提示词模板元数据
用户档案 user_learning_profiles 用户历史评价聚合
审计 audit_logs 关键行为审计

2. 病例读取逻辑

练习模式读取:

case_base + traditional_case + case_exam_item + scoring_rule

教学互动模式读取:

case_base + teaching_case + case_exam_item + scoring_rule

当前模式只保留 practiceteaching。历史的 novice 请求在后端归一为 practice,查看提示功能保留在练习模式中,由用户点击后触发。

3. 评价生成逻辑

评价生成时读取以下数据:

  1. training_session:当前训练会话、模式、分数类型。
  2. Redis/进程内短期 memory:本次对话过程。
  3. training_order:用户申请过的检查结果。
  4. training_submission:用户提交的诊断和治疗方案。
  5. scoring_rule:病例基础评分规则。
  6. knowledge_chunks:科室/任务下命中的评分指南或人文关怀参考。
  7. 提示词模板:评分 Agent 使用的结构化输出约束。

LLM 返回结构化评价后,只写入 training_record。中断、退出、未完成诊断或未完成治疗的训练不写入 training_record

4. 短期记忆和长期记录

数据 存储位置 生命周期
医生和 AI 病人的多轮对话 Redis 或进程内 memory 单次会话有效,TTL 到期或评价完成后释放
检查申请结果 training_order + runtime memory 当前训练长期可查,参与评分
诊断/治疗提交 training_submission 当前训练长期可查,参与评分
AI 评价报告 training_record.ai_feedback_structured 完整训练后长期保存
PDF 路径 training_record.pdf_file_path 导出后长期保存

5. 用户隔离

宿主系统进入 Agent 时传入 X-User-Id。后端以该值写入 external_user_id

用户字段
training_session external_user_id
training_order external_user_id
training_submission external_user_id
training_record external_user_id

training_record.user_id 保留源库数字用户字段。宿主传入字符串 user_id 时,业务隔离以 external_user_id 为准。

6. 初始化和清理脚本

脚本 作用
backend/scripts/migrate_to_new_schema.py 创建新表、写入 Demo 种子数据、补齐表中文注释
backend/scripts/drop_legacy_tables.py 删除已不再使用的旧表
backend/scripts/init_demo_db.py 新表体系的 Demo 数据初始化入口
backend/scripts/import_source_case_sql.py 安全导入接口解析后的病例 SQL,只做字段映射导入,不执行源 SQL 的建表和删表语句

验证结果:旧表已清理,old_remaining=[];新表已完成完整 Demo 流程复测。