98 lines
4.9 KiB
Markdown
98 lines
4.9 KiB
Markdown
# 数据采集与存储边界
|
||
|
||
## 1. 采集原则
|
||
|
||
- 进入 Agent 时只接收宿主系统传入的用户上下文,不做登录注册。
|
||
- 问诊聊天只作为本次训练的短期 memory 使用,训练中断或退出不写入长期聊天历史。
|
||
- 检查申请、诊断提交、治疗提交属于本次训练过程数据,参与最终评分。
|
||
- 只有生成 AI 评价报告后,系统才写入长期训练记录 `training_record`。
|
||
- 所有会话、检查、提交、评价和历史查询都按 `X-User-Id` 隔离。
|
||
|
||
## 2. 进入 Agent
|
||
|
||
| 数据 | 来源 | 存储位置 | 用途 |
|
||
|---|---|---|---|
|
||
| `user_id` | Header `X-User-Id` | `training_session.external_user_id`、`training_record.external_user_id`、`audit_logs.user_id` | 用户隔离 |
|
||
| `tenant_id` | Header `X-Tenant-Id` | `training_session.tenant_id`、`audit_logs.tenant_id` | 宿主系统组织上下文 |
|
||
| `class_id` | Header `X-Class-Id` | `training_session.class_id` | 班级/教学上下文 |
|
||
| `entry_scene` | Header `X-Entry-Scene` | `training_session.entry_scene`、`audit_logs.entry_scene` | 入口来源 |
|
||
| `role` | Header `X-Role` | `audit_logs.role` | 审计上下文 |
|
||
| `request_id` | 系统生成或 Header | `audit_logs.request_id` | 链路追踪 |
|
||
|
||
## 3. 创建会话
|
||
|
||
| 数据 | 存储位置 | 说明 |
|
||
|---|---|---|
|
||
| `case_id` | `training_session.case_id` | 关联 `case_base.id` |
|
||
| `training_type` | `training_session.case_type` | 当前来自病例类型 |
|
||
| `mode` | `training_session.training_mode` | `practice` 或 `teaching` |
|
||
| `score_type` | `training_session.score_type` | `percentage` 或 `five_point` |
|
||
| `session_code` | `training_session.session_code` | 会话业务编号 |
|
||
| `memory_key` | `training_session.memory_key` | Redis/进程内 memory key |
|
||
| `patient_opening` | runtime memory | AI 病人首句,不作为长期历史保存 |
|
||
|
||
## 4. 问诊过程
|
||
|
||
| 数据 | 存储位置 | 生命周期 |
|
||
|---|---|---|
|
||
| 医学生提问 | runtime memory | 本次会话有效,TTL 到期或评价完成后释放 |
|
||
| AI 病人回复 | runtime memory | 本次会话有效,TTL 到期或评价完成后释放 |
|
||
| SSE 响应耗时 | 前端状态、评价结构摘要 | 用于演示和问题排查 |
|
||
| LLM 模型名/fallback 状态 | 前端状态、评价结构摘要 | 用于确认真实模型或 fallback |
|
||
|
||
短期 memory 默认使用 Redis,Redis 不可用时降级为进程内 memory。TTL 由 `RUNTIME_MEMORY_TTL_SECONDS` 控制;每次写入会刷新 TTL。
|
||
|
||
## 5. 检查/检验申请
|
||
|
||
| 数据 | 存储位置 | 说明 |
|
||
|---|---|---|
|
||
| `item_code` | `training_order.item_code` | 同一会话去重依据 |
|
||
| `item_name` | `training_order.item_name` | 检查名称 |
|
||
| `item_type` | `training_order.item_type` | `lab`、`imaging`、`vital_sign` 等 |
|
||
| `result_text` | `training_order.result_text` | 从 `case_exam_item` 读取的固定结果 |
|
||
| `result_structured` | `training_order.result_structured` | 结构化结果 |
|
||
| `is_key`、`is_abnormal` | `training_order` | 评分参考 |
|
||
|
||
检查结果只来自数据库 `case_exam_item`。LLM 不生成、不改写检查结果。
|
||
|
||
## 6. 诊断与治疗提交
|
||
|
||
| 数据 | 存储位置 | 说明 |
|
||
|---|---|---|
|
||
| `primary_diagnosis` | `training_submission.primary_diagnosis` | 主要诊断 |
|
||
| `differential_diagnoses` | `training_submission.differential_diagnoses` | 鉴别诊断 |
|
||
| `diagnosis_basis` | `training_submission.diagnosis_basis` | 诊断依据 |
|
||
| `treatment_principle` | `training_submission.treatment_principle` | 治疗原则 |
|
||
| `treatment_measures` | `training_submission.treatment_measures` | 治疗措施 |
|
||
| `risk_plan` | `training_submission.risk_plan` | 风险预案 |
|
||
| `communication` | `training_submission.communication` | 医患沟通 |
|
||
| `follow_up` | `training_submission.follow_up` | 随访安排 |
|
||
|
||
## 7. 评价报告
|
||
|
||
评价生成读取以下数据:
|
||
|
||
- `training_session`:模式、分数类型、病例 ID、memory key。
|
||
- runtime memory:本次问诊对话摘要。
|
||
- `training_order`:已申请检查和结果。
|
||
- `training_submission`:诊断和治疗提交。
|
||
- `case_base + traditional_case/teaching_case`:病例基础资料和标准参考。
|
||
- `scoring_rule`:基础评分规则。
|
||
- `knowledge_chunks`:科室/类型下命中的评分指南片段。
|
||
|
||
评价完成后写入:
|
||
|
||
| 数据 | 存储位置 |
|
||
|---|---|
|
||
| 总分、评分类型、等级 | `training_record.total_score`、`score_type`、`evaluation_level` |
|
||
| 结构化评分 | `training_record.ai_feedback_structured` |
|
||
| 证据摘要 | `training_record.thinking_chain` |
|
||
| 诊断路径摘要 | `training_record.diagnosis_path` |
|
||
| 扣分点 | `training_record.wrong_points` |
|
||
| 改进计划 | `training_record.recommendation_result` |
|
||
| PDF 路径 | `training_record.pdf_file_path` |
|
||
|
||
## 8. 审计日志
|
||
|
||
`audit_logs` 记录关键动作:进入 Agent、创建会话、问诊、申请检查、完成问诊、提交诊断、提交治疗、生成评价、导出 PDF。审计日志只记录元数据和对象 ID,不保存完整聊天全文。
|