临床试验匹配智能体

10 分钟读完

Y32
实战手册 · 领域实战手册

临床试验匹配智能体。

试验匹配里代价最高的那种错,恰恰是没人看得见的那种:一位本来符合入组条件的患者,从未被推到台面上,就这样默默走上了标准治疗。假阳性的代价是一次筛选访视,两周内就会体现在你的筛选失败率里;假阴性的代价是一个人失去了一种选择,而它不会出现在任何地方——这就是为什么一套按精确率调优的系统看上去很漂亮,做的却是与其本职相反的事。按召回率来建,输出逐条标准的证据而不是一个结论,并把"未知"当作一等答案。

STEP 1

先定用户是谁,因为它决定了误差预算。

这里其实有两个产品,而且它们不是彼此的变体。一个服务于手里有方案和患者名单的研究协调员,问的是"这些人里谁可能合格";另一个服务于临床医生或患者,问的是"在四十万余项已登记研究里,哪些适合这个人"。前者是对已知队列的过滤,后者是对登记库的检索。挑一个来做。

  • 从面向协调员的那一个起步。用户是专家,方案是固定的,输出进入一条本来就存在的工作流(预筛),而且几周之后会有一份天然真值到达——谁真正入了组。这几条性质,面向患者的那个版本一条都没有。
  • 智能体做预筛,绝不做筛选。入组资格是由合格研究者依照方案做出的临床判定。你在建的东西,产出的是一份带排序、带证据、供人逐一处理的候选清单——把这一点说准确不是免责声明,而是在多数法域里让它不落入受监管医疗器械范畴的系统边界。
  • 绝不让智能体去联系患者。外呼正是一次未经复核的匹配变成现实伤害的地方:一场空欢喜、一次向家庭成员的非自愿诊断披露、一次方案违背。联系之前那道关口,永远是一个具名的人。关口该放在哪里,见人在环中。

这种不对称本身就是设计输入。假阳性会被一条本来就预期到它的流程吸收掉——30% 上下的筛选失败率是常态,在某些阿尔茨海默病项目里还超过过 70%。假阴性不会被任何人吸收、从不被度量,而它正是整件事存在的意义所在。据此调参,并预料到:任何盯着精确率数字看的人都会觉得这么做不对。

STEP 2

产品是标准解析,不是匹配。

一旦两侧都结构化了,匹配就没什么难度。可两侧都没有结构化。入组标准是写给人读的自由文本,而且很长,还在变得更长——在 NCI 关联试验里,它们从十来个词长到约 750 个词;用词最多的那一成试验,入组失败率约为 29%,而最短的那一成是 12%。正是这段散文,你的系统必须把它变成可核对的东西。

  • 拆成原子谓词,一条标准一行。"ECOG 0–1、肾功能足够、既往未用过抗 PD-1"是三项检查,对应三种数据来源和三种失败模式。把整块标准文本做成一个嵌入向量,是这个领域最常见的架构,也正是这类系统解释不了自己的原因。
  • 每条谓词都带一个时间窗。"4 周内未接受全身治疗"不是关于患者的事实,而是关于一个相对于尚未发生的筛选日的日期区间的事实。那些解析看着没问题、却悄悄把时间窗丢掉的标准,是自信错配的最大单一来源。
  • 把计算机能判定的标准和判定不了的分开。年龄、化验值、ICD 编码和用药史是可判定的;"预期生存期大于 12 周""有临床意义的心脏疾病""能够遵守方案"则是研究者判断,再多检索也变不成一个布尔值。把它们标成需临床医生复核才是正确的输出,不是缺陷。
  • 把登记库当成会漂移的上游。方案会修订、中心会开会关、招募状态变了记录却没变。给登记库做快照、做版本,并记录某次匹配是由哪个快照产生的——这类问题的一般形态,见第三方工具漂移。
STEP 3

绝不输出"合格"。输出一张带证据的标准表。

一个结论既无法证伪也无法复核,而看不到理由的协调员,能做的事情不会比自己翻一遍病历更快。真正省下时间的输出,是每条标准一行、三列:谓词、状态、指向病历的指针。

criterion                      state        evidence
--------------------------------------------------------------
age >= 18                      met          DOB 1974-03-02
ECOG 0-1                       met          note 2026-08-14 "ECOG 1"
eGFR >= 60                     met          lab 2026-08-29: 72
no prior anti-PD-1             unknown      no oncology history 2019-2023
LVEF >= 50%                    not assessed no echo on file
life expectancy > 12 weeks     clinician    judgement, not derivable
  • 至少要三值逻辑。满足、不满足、未知。把未知折叠进"不满足",正是一套以召回为命的系统悄悄变成精确率优化系统的方式——大多数患者在大多数标准上都是未知的,因为病历本就不完整。
  • 未知是这张表里最有价值的一格。它是一张工单:去做个超声心动、给外院打电话调病历、问患者一个问题。一套输出"12 位患者,每位只卡在一条可获取的事实上"的系统,比一套返回三个自信匹配的系统值钱。
  • 每个满足/不满足都要有原文片段,不是摘要。指向具体那一行化验值,或病程记录里的那一句话。没有它,协调员就得把整件事重做一遍,而你等于加了一道复核环节,而不是去掉了一道。这和接地是同一套纪律,只不过在这里,一句没有依据的断言的代价是一次筛选访视。
  • 按剩余未知项的多少排序,而不是按相似度分数。有用的排序方式,正是协调员真正在问的那个问题——这些人里,谁离做出决定最近、还要做的功最少?
STEP 4

病历比你的流水线以为的更糟。

生产环境里的准确率,大部分是在患者这一侧赢或输掉的,不是在方案那一侧;而且赢在一些毫不体面的地方。

  • 起决定作用的事实住在病程记录里,不在字段里。分期、既往治疗线数、体能状态以及某种药为什么停掉,都是叙述性的。结构化的问题列表是陈旧的,而且是为收费而维护的——这意味着它会多报已缓解的疾病,少报正在活动的疾病。
  • 比较任何数值之前先统一单位和参考区间。肌酐是 mg/dL 还是 µmol/L,血红蛋白是 g/dL 还是 g/L,同一分析物在不同检测方法下的区间也不同。数值型标准上的单位错误,会产出一个自信、具体且错误的答案——这是最糟糕的一种失败形态。
  • 绝不让模型推断病历没有写明的诊断。从一种用药反推一个疾病是个合情合理的推断,但在这里不可接受,因为它是在为某条标准制造证据。没写,状态就是未知。
  • 在匹配之前去重,而不是之后。同一份化验从 EHR 和从外院 PDF 两路进来、日期还不一样,会依检索器恰好捞到哪一份,而悄悄地满足或违反一个时间窗。
  • 处理好否定式,因为散文里到处都是。"无脑转移证据"和"脑转移"只差两个字,却把一条排除标准整个反了过来。这是检索优先设计的已知薄弱点,也是给排除标准清单保留一道确定性检查的好理由。
STEP 5

用经裁定的金标准集测召回率,筛选失败率单独报。

准确率在这里毫无意义——负类几乎就是全部,所以一套什么都不返回的系统能拿到 99% 以上。真正要紧的是两个数字,而它们对应的是不同的真值。

  • 对人工裁定金标准集的召回率。取几百对真实的"患者—试验"配对,让两位协调员各自对着病历独立判定是否合格,分歧交由裁定,然后冻结这套集合。它很贵,而且是你能拿到的唯一站得住脚的数字;把它当成建设成本来列预算,具体怎么组织见标注与标注运营。
  • 按标准算准确率,不要按患者算。患者级的结论会掩盖是哪一类谓词坏了。按标准类型拆开报——人口学、化验、用药史、时间、判断类——因为时间类会是你最差的一类,而在聚合数字里你看不见这件事。
  • 筛选失败率是生产信号,而且滞后。它讲的是精确率,几周后才到,而且被漏斗里其他一切因素混淆。要跟踪它,但绝不能让它变成优化目标:改善它最省事的办法就是不再把临界患者推上来,而那正是你要避免的失败。
  • 把未知率当成一等指标来度量。未知率上升说明是数据获取的问题,不是模型的问题,而两者的修法完全不同。
  • 去审漏掉的,而不是审命中的。每季度取一批真正入组了某项试验的患者,问一句:我们的系统当初有没有把他们推出来?这份回溯是你能拿到的唯一一扇看向假阴性的窗,比任何在线指标都值钱。
STEP 6

护栏来自监管,而它们属于架构。

这套系统一次性触碰到可识别健康数据、一份研究方案,以及一个人的治疗选项。这些约束不是最后再附上的文书;每一条要么是早期的一个设计决定,要么是后期一次昂贵的返工。

  • 要么可复现地匹配,要么不要匹配。给定同一份患者快照和同一份登记库快照,几个月后当有人来问某位患者为什么被推出来(或没被推出来)时,输出必须能被重建。锁定模型版本,把检索到的原文片段与决定一起存下,并保留那份标准解析——见审计轨迹。
  • 在豁免下做预筛,不等于招募。为识别潜在合格患者而查阅病历,与联系这些患者,适用的规则并不相同,而分界线通常就在接触发生的那一刻。把系统建成让这条分界线是工作流里一道真实的、有记录审批人的关口,而不是文件里的一条政策。
  • 尽量少让数据离开院内。标准解析需要的是方案,不是患者。患者侧的推理往往可以跑在去标识投影之上;实在不行,就应该跑在医疗机构的边界之内。更大的那个问题见数据驻留与主权。
  • 留意漏检集合里的公平性失败。若召回率随语言、病历详尽程度或中心而变化,就会系统性地少推出恰恰是临床试验一直被批评入组不足的那些人群。把召回率做分层统计;单一的聚合数字会把这件事彻底藏起来。

先上最窄的那个版本:一个疾病领域、一家中心的方案、面向协调员、输出一张带证据片段和显式未知状态的标准表,不联系任何人。在测别的任何东西之前,先用两百对经裁定的配对测召回率,并把未知率放到同一块看板上。这个领域里多数团队会做一个对标准文本的相似度检索,demo 很好看,然后在第六个月发现它说不出理由——证据表就是差别所在,而且先建比后补便宜。延伸阅读:医疗健康智能体看外围护栏,不确定性与校准看如何给弃答定价,研究与综合智能体看两者共享的"检索—再核验"模式。