ECG Agent:教 AI 像心内科医生一样诊断——跨疾病跨人群临床推理

论文标题: Diagnosing as Cardiologists Do: ECG Agents with Doctor-Grounded Priors for Clinical Reasoning Across Diseases and Populations
arXiv: 2608.09053
发布时间: 2026年8月


核心创新

ECG Agent 是一个基于 LLM 的智能体,能够像心内科医生一样进行 ECG 诊断推理:

  1. Doctor-Grounded Priors:注入心内科医生的诊断流程作为先验知识
  2. 跨疾病推理:不单分类一种疾病,而是多疾病联合分析
  3. 跨人群泛化:在不同年龄、性别、种族间保持诊断质量
  4. 可解释推理链:输出诊断推理步骤,非黑盒分类

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 架构

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 torch
import torch.nn as nn

class 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, # ms
'st_segment': 'normal',
't_wave': 'normal',
'qt_interval': 380, # ms
'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}

请逐步推理,给出诊断。
"""

# LLM 生成推理链
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 类)