4.9 KiB
4.9 KiB
数据采集与存储边界
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,不保存完整聊天全文。