ECG Agent:教 AI 像心内科医生一样诊断——跨疾病跨人群临床推理
论文标题: Diagnosing as Cardiologists Do: ECG Agents with Doctor-Grounded Priors for Clinical Reasoning Across Diseases and PopulationsarXiv: 2608.09053 发布时间: 2026年8月
核心创新 ECG Agent 是一个基于 LLM 的智能体,能够像心内科医生一样进行 ECG 诊断推理:
Doctor-Grounded Priors :注入心内科医生的诊断流程作为先验知识
跨疾病推理 :不单分类一种疾病,而是多疾病联合分析
跨人群泛化 :在不同年龄、性别、种族间保持诊断质量
可解释推理链 :输出诊断推理步骤,非黑盒分类
1. 为什么需要 ECG Agent? 1.1 现有 AI ECG 诊断的局限
方法
输出
局限
CNN 分类
疾病标签
黑盒,不可解释
CNN + GradCAM
标签 + 热力图
热力图≠推理
多标签分类
多疾病标签
无推理链
ECG Agent
诊断 + 推理链
可解释,跨疾病
1.2 Doctor-Grounded Priors 的含义 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class DoctorGroundedPriors : """心内科医生的 ECG 诊断流程""" diagnostic_workflow = [ '1. 心率计算(R-R 间隔)' , '2. 节律分析(规则/不规则)' , '3. P 波形态(正常/缺失/异常)' , '4. PR 间期(正常 120-200ms)' , '5. QRS 宽度(正常 <120ms)' , '6. ST 段(抬高/压低/正常)' , '7. T 波(正常/倒置/高尖)' , '8. QT 间期(校正 QTc)' , '9. 综合诊断推理' ] cross_disease_reasoning = { 'example' : 'ST 段抬高 + 病理 Q 波 + T 波倒置' , 'reasoning' : 'ST↑ → 急性损伤 → Q 波 → 陈旧梗死 → T↓ → 演变期' , 'diagnosis' : '亚急性心肌梗死' , 'confidence' : '高(多特征一致性)' }
2. 架构概要 2.1 ECG Agent 架构
graph TB
A[ECG 信号] --> B[特征提取器<br/>波形分割/P 波/QRS/T 波]
B --> C[结构化特征表]
C --> D[LLM Agent<br/>+ Doctor Priors]
D --> E[推理链生成]
E --> F[诊断结论]
E --> G[置信度评估]
E --> H[建议进一步检查]
2.2 核心代码框架 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 import torchimport torch.nn as nnclass ECGFeatureExtractor (nn.Module): """ECG 特征提取器""" def __init__ (self ): self .features = [ 'heart_rate' , 'rhythm' , 'p_wave' , 'pr_interval' , 'qrs_width' , 'st_segment' , 't_wave' , 'qt_interval' , 'pathologic_q' , 'bundle_branch_block' ] def forward (self, ecg_signal ): """提取结构化 ECG 特征""" return { 'heart_rate' : 72 , 'rhythm' : 'irregular' , 'p_wave' : 'absent' , 'pr_interval' : None , 'qrs_width' : 95 , 'st_segment' : 'normal' , 't_wave' : 'normal' , 'qt_interval' : 380 , 'pathologic_q' : False , 'bundle_branch_block' : False } class ECGAgent : """ECG Agent: LLM 驱动的可解释诊断""" def __init__ (self, llm_model='gpt-4' ): self .feature_extractor = ECGFeatureExtractor() self .doctor_priors = self ._load_doctor_priors() def _load_doctor_priors (self ): """加载心内科诊断流程""" return """ 诊断流程: 1. 心率:正常 60-100 bpm 2. 节律:规则 vs 不规则 3. P 波:正常/缺失/形态异常 4. PR 间期:120-200ms 5. QRS:窄(<120ms) vs 宽(>120ms) 6. ST 段:抬高/压低/正常 7. T 波:正常/倒置/高尖 8. 综合推理 """ def diagnose (self, ecg_signal ): """生成诊断推理链""" features = self .feature_extractor(ecg_signal) prompt = f""" 作为心内科医生,分析以下 ECG 特征: {features} 诊断流程: {self.doctor_priors} 请逐步推理,给出诊断。 """ reasoning = self ._llm_inference(prompt) return { 'features' : features, 'reasoning' : reasoning, 'diagnosis' : self ._extract_diagnosis(reasoning), 'confidence' : self ._extract_confidence(reasoning) }
3. IMS 开发启示 3.1 座舱 ECG 诊断 Agent 将 ECG Agent 集成到座舱:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class CabinECGAgent : """座舱 ECG 诊断 Agent""" def __init__ (self ): self .scenarios = { 'normal' : '正常驾驶,心率 60-100,HRV 正常' , 'fatigue' : 'HRV 下降趋势 + 心率升高 → 疲劳' , 'stress' : 'HRV 下降 + LF/HF 升高 → 压力' , 'arrhythmia' : 'P 波缺失 + 不规则 → 房颤警告' , 'cardiac_event' : 'ST 变化 + 病理 Q → 心脏事件' , 'sudden' : '心率骤变 + 心律失常 → 紧急停车' } def monitor (self, ecg_stream ): """持续监控""" features = self .extract_features(ecg_stream) diagnosis = self .agent.diagnose(ecg_stream) if diagnosis['confidence' ] > 0.8 : if 'arrhythmia' in diagnosis['diagnosis' ]: return 'WARN' , '检测到心律失常,建议就医' elif 'cardiac' in diagnosis['diagnosis' ]: return 'CRITICAL' , '检测到心脏异常,安全停车' return 'NORMAL' , '心脏状态正常'
3.2 与 LLM 座舱助手集成 ECG Agent 可与座舱语音助手集成:
1 2 3 4 5 驾驶员: "我感觉心慌" AI: "我检测到您的心率在过去5分钟从72bpm升高到98bpm, HRV有所下降。节律规则,未检测到异常波形。 可能是压力或咖啡因引起。 建议深呼吸,如果持续请停车休息。"
论文信息
arXiv: 2608.09053
应用: 临床 ECG 诊断 + 车载健康监测
相关: CODE-II 数据集 (2.7M ECGs, 66 类)