4.1 KiB
4.1 KiB
数据库设计
1. 当前确定方案
医疗问诊 Agent 使用独立数据库 medical_consultation_agent。病例来源以源库结构为准,当前业务不再依赖旧的 cases、case_exam_items、training_sessions、session_orders、session_submissions、evaluation_records、evaluation_report_exports、rubric_templates。
旧表已清理。后续开发直接面向新表:
| 分类 | 表 | 说明 |
|---|---|---|
| 病例来源 | case_base |
病例主表,来自源库字段 |
| 病例来源 | traditional_case |
练习模式病例扩展 |
| 病例来源 | teaching_case |
教学互动模式病例扩展 |
| 评分规则 | scoring_rule |
病例级基础评分规则 |
| 检查项目 | case_exam_item |
本业务新增,保存固定检查/检验结果 |
| 训练运行 | training_session |
本业务新增,保存一次训练会话状态 |
| 训练运行 | training_order |
本业务新增,保存一次训练中的检查申请 |
| 训练运行 | training_submission |
本业务新增,保存诊断和治疗提交 |
| 训练结果 | training_record |
完整训练结束后的长期评价记录 |
| 知识库 | knowledge_sources、knowledge_documents、knowledge_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
当前模式只保留 practice 和 teaching。历史的 novice 请求在后端归一为 practice,查看提示功能保留在练习模式中,由用户点击后触发。
3. 评价生成逻辑
评价生成时读取以下数据:
training_session:当前训练会话、模式、分数类型。- Redis/进程内短期 memory:本次对话过程。
training_order:用户申请过的检查结果。training_submission:用户提交的诊断和治疗方案。scoring_rule:病例基础评分规则。knowledge_chunks:科室/任务下命中的评分指南或人文关怀参考。- 提示词模板:评分 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 流程复测。