3. 临床知识表示与规则建模

临床决策支持系统(CDSS)能否真正落地,关键不在界面,而在“知识是否被表示成机器可执行的形式”。指南文本是给人读的,规则是给引擎执行的,两者之间需要一次严谨的“知识化”翻译。本节以高血压/糖尿病指南片段为例,走完从自然语言到可执行规则集的完整链路。

一、指南知识化的基本对象

指南知识化,是把“条件—判断—建议”从叙述性文本中抽取为结构化三元组:患者状态(条件)→ 逻辑判断 → 推荐动作。以《中国高血压防治指南》和《2型糖尿病防治指南》常见片段为例,可抽取的核心对象包括:

  • 数据项:收缩压(SBP)、舒张压(SDP)、空腹血糖(FPG)、糖化血红蛋白(HbA1c)、年龄、是否合并糖尿病、是否合并慢性肾病(CKD)、是否妊娠。
  • 判断阈值:如 SBP≥140 mmHg 且/或 DBP≥90 mmHg 为高血压;FPG≥7.0 mmol/L 或 HbA1c≥6.5% 提示糖尿病。
  • 推荐动作:生活方式干预、启动降压药、启动二甲双胍、转诊、复查周期。

知识化的产物不是一段文字,而是一组带条件、带优先级、带动作的结构化规则。它必须能被规则引擎解析,也能被人复核。

二、规则引擎与决策表

规则引擎负责“匹配条件、触发动作”。主流做法有两种表达:产生式规则(IF-THEN)和决策表(条件行 × 动作列)。产生式规则灵活,适合复杂嵌套;决策表紧凑,适合阈值明确、组合有限的场景,且便于临床专家逐行核对。

以高血压合并糖尿病的初始治疗为例,可写成如下决策表(示例参数,仅用于教学):

规则ID条件:SBP/DBP条件:合并糖尿病条件:合并CKD动作优先级
R1≥140/90是否启动ACEI/ARB + 生活方式干预1
R2≥140/90是是启动ACEI/ARB,监测eGFR与血钾1
R3130–139/85–89是否强化生活方式干预,3个月复查2
R4<130/80是任意维持现有方案,年度评估3

决策表的每一行就是一条可执行规则。引擎按优先级从高到低匹配,命中即触发动作,避免多条规则冲突。若同一患者同时命中 R1 与 R3,优先级保证只执行 R1。

三、临床逻辑模型与知识图谱基础

规则解决“单点判断”,临床逻辑模型解决“多病共存、时序演进”。它把患者状态建模为状态机:未诊断 → 已诊断未治疗 → 治疗中未达标 → 治疗中达标 → 并发症期,每个状态迁移由规则触发。这样,CDSS 不只看一次血压值,而是看患者处于哪个阶段、下一步该做什么。

知识图谱则把“疾病—药物—检查—禁忌—并发症”连成网络。例如节点“糖尿病”连向“二甲双胍”“eGFR”“乳酸酸中毒风险”,当患者 eGFR<30 mL/min/1.73m² 时,图谱可沿边推导出“二甲双胍禁用”。图谱擅长表达关系与推理路径,规则引擎擅长执行判断,两者常配合使用:图谱提供候选关系,规则引擎做最终裁决。

高血压/糖尿病指南片段 → 可执行规则集 知识化链路 指南原文(自然语言) • SBP≥140 或 DBP≥90 • 合并糖尿病者优先 ACEI/ARB • eGFR<30 禁用 二甲双胍 • 3个月复查 知识化:结构化抽取 数据项:SBP/DBP/FPG 阈值:140/90、7.0 动作:用药/复查/转诊 优先级:1 > 2 > 3 禁忌:eGFR<30 时序:3个月复查 规则引擎执行 IF SBP≥140 AND 糖尿病 THEN 启动ACEI/ARB IF eGFR<30 THEN 禁用二甲双胍 按优先级匹配,命中即触发 输出:推荐动作 + 依据 决策表(条件 × 动作) 规则 SBP/DBP 糖尿病 动作 R1 ≥140/90 是 ACEI/ARB R2 ≥140/90 是+CKD 监测eGFR R3 130–139 是 生活方式 R4 <130/80 任意 年度评估 知识图谱(关系推理) 糖尿病 二甲双胍 eGFR 乳酸酸中毒 治疗 监测 风险 影响 eGFR<30 → 沿边推导 → 二甲双胍禁用

四、实战:把一段指南变成可执行规则集

假设指南原文为:“对合并糖尿病的高血压患者,若 SBP≥140 mmHg 或 DBP≥90 mmHg,推荐启动 ACEI 或 ARB;若 eGFR<30 mL/min/1.73m²,禁用二甲双胍;未达标者每 3 个月复查。”知识化过程分四步:

  1. 抽取条件:SBP、DBP、糖尿病标志、eGFR。
  2. 定义阈值:140、90、30。
  3. 绑定动作:启动ACEI/ARB、禁用二甲双胍、3个月复查。
  4. 设定优先级:禁忌规则优先于用药规则,避免“先开药再发现禁用”。

写成产生式规则(伪代码,示例):

rule R1:
  when SBP >= 140 or DBP >= 90
   and has_diabetes == true
  then recommend("启动ACEI/ARB")
  priority 1

rule R2:
  when eGFR < 30
  then contraindicate("二甲双胍")
  priority 0   // 最高,先于用药规则

rule R3:
  when target_not_reached == true
  then schedule("3个月复查")
  priority 2

引擎执行时,先跑 R2 做禁忌筛查,再跑 R1 做用药推荐,最后 R3 安排随访。这样,一条指南片段就变成了可执行、可审计、可版本管理的规则集。

知识化的质量取决于“条件是否可计算”。凡是无法从电子病历中取到数值的条件(如“患者意愿”),应显式标记为人工确认项,而不是硬编码为规则。

五、结果如何判断

规则集是否可用,看三个信号:一是覆盖率——指南中可结构化的条目占比;二是冲突率——同一患者命中多条互斥规则的比例,应通过优先级或互斥条件降到接近零;三是可解释性——每条推荐能否回溯到具体规则ID和指南出处。以示例规则集为例,若 100 例模拟患者中 92 例能命中至少一条规则、冲突仅 2 例且均可由优先级消解,则说明知识化基本达标。

规则引擎、决策表、临床逻辑模型与知识图谱并非互斥,而是分层配合:决策表负责阈值明确的单点判断,规则引擎负责执行与优先级调度,逻辑模型负责时序与状态迁移,知识图谱负责关系推理与禁忌发现。把指南片段按这四层拆解,CDSS 才真正具备“可执行”的临床知识底座。