
每天 80 万美元的乌龙:一台混淆导管的 AI 正在扼杀新药研发
那是一个周二的夜晚,我盯着一份毫无逻辑的电子表格。
我们当时正在做一个试点——测试大语言模型将患者病历与一项肿瘤学试验的入选标准进行筛查匹配的效果如何。就肿瘤学方案而言,这个方案很简单直接:一种新型抗凝药,附带一份排除标准清单,其中一条是"既往心导管检查"。心导管检查。一根导管被穿入心腔以评估冠状动脉功能。这是一种严重的、侵入性的心脏手术。
AI 将一名患者标记为不符合条件。原因:心导管检查。我调出了这名患者的病历。记录在案的操作是一项中心静脉穿刺——为给药而在颈静脉置入的中心静脉导管。这是一种床旁血管通路操作。护士在 ICU 里就能完成。它不是心脏手术。它甚至连边都不沾。
但模型看到了"导管",看到了"静脉",看到病历是在心脏监护病房里写的,于是得出结论:是一回事。这名患者就这样消失了。被排除了。从未呈现给试验中心的协调员。而真正让我心神不宁的是——没有人会注意到。系统会悄无声息地丢弃一名符合条件的患者,试验入组人数就此少了一人,而没有人会知道入组为何滞后。
就是在那一刻,我不再相信更好的提示词能修复临床试验招募。问题不在于模型的词汇量。问题在于我们在用一台概率机器去做逻辑该做的活。
为什么制药企业 80% 的在研管线卡在招募环节?
制药行业有一个财报电话会议都不愿多谈的隐秘真相:大约80% 的临床试验无法达成其入组时间表。不是因为科学错了。不是因为患者不存在。而是因为寻找符合条件的患者并将他们与试验匹配起来的这一过程,在根本层面上是破碎的。
让我给这种破碎标上一个具体的美元数字。根据塔夫茨药物开发研究中心的数据,如今药物开发每延迟一天,对于一款表现优异的资产而言,损失的处方销售额约为80 万美元。在心血管和血液学领域,这个数字每天超过 130 万美元。对于一款竞争激烈的肿瘤药,六个月的入组延迟——那种司空见惯的延迟——你面对的数字足以让一款科学上更优越的疗法在商业上胎死腹中。
药物研发的瓶颈不再是科学。而是句法。
而运营层面的现实甚至比财务层面的更为严峻。37% 的研究中心入组不足,还有 11% 连一名患者都招不到。每一次筛选失败——一名书面上看似符合条件、实则不符的患者——都要耗费约 1,200 美元。当你的 AI 工具生成 100 个"匹配"、而其中只有 5 个是真实的时候,你并没有实现招募自动化。你是对自己的临床中心发起了一场拒绝服务攻击。
我亲眼目睹了这一幕。那些曾对我们早期原型充满热情的中心协调员,开始彻底无视匹配名单。"你的工具给我的都是垃圾,"一位协调员在通话中对我说。她没说错。她又回到了手动翻阅 PDF 的方式。Ctrl+F。这就是这个行业实际的"最先进技术"。
那根击碎了我对 LLM 信念的导管
让我更深入地讲讲那个周二夜里的错误,因为它揭示了大多数"AI 进军医疗"的宣讲都一笔带过的东西。
当大语言模型处理文本时,它会把词语转换成向量——高维数学空间中的点。出现在相似语境中的词语最终会彼此靠近。"心导管检查"和"中心静脉导管置入"在向量空间里几乎就是邻居。两者都涉及导管。两者都涉及血管系统。两者都出现在被相似医学术语环绕的临床记录中。
但它们是截然不同的两种操作,针对不同的解剖结构,具有不同的风险特征和不同的临床意义。一个进入心脏。另一个进入静脉。方案排除的是前者。患者做的是后者。而 AI 无法分辨其中的差异,因为它并不理解解剖学——它理解的是词语的邻近度。
这不是个别边缘案例。评估用于试验匹配的 AI 模型的研究已经识别出了这一确切的失效模式:模型错误地断定心导管检查等同于中心静脉穿刺,从而导致错误排除。这是一类错误,而非一次性的偶发 bug。
第二天早上我把这件事带到了团队面前。我们的一位工程师——一个很聪明的家伙,有深度学习背景——建议我们可以通过更好的微调来解决它。更多的医学训练数据。更大的上下文窗口。我记得随之而来的那场争论,因为正是那场争论塑造了我们整个技术方向。我的立场很简单,而且我表达得大概太直白了:你无法靠微调走出一个缺失的本体论。
LLM 并不知道"心导管检查"与"中心静脉导管置入"位于医疗操作树的不同分支上。它根本没有一棵树。它有的是一团统计关联的迷雾。而无论多少训练数据,都无法赋予它医学本体论所提供的那种刚性的、层级化的理解——即操作 A 是"心脏操作"的一个子类,而操作 B 是"静脉导管置入"的一个子类,二者在类别上截然不同。
那场争论以我们从头重建整个架构而告终。
什么是本体论驱动的表型分析,你为什么该关心它?

用大白话说,这个思路是这样的:我们不是让 AI 去读病历、然后猜测它们的含义,而是强制 AI 在做出任何决策之前,先将它遇到的每一个医学概念翻译成一个来自SNOMED CT——全球最全面的临床术语系统——的标准化编码。
SNOMED CT 不是一部词典。它是一张庞大的有向图,其中医学概念通过逻辑关系相互连接。其中最重要的是"是一种"(Is-A)关系。"冠状动脉造影"是一种"心导管检查"是一种"心脏操作"。"中心静脉导管置入"是一种"静脉导管置入"是一种"血管导管插入"。不同的分支。不同的父节点。不同的含义。
因此,当我们的系统遇到一份排除"心导管检查"的方案、以及一份提到中心静脉导管置入的患者病历时,它并不比较字符串或向量。它会询问本体论:这名患者的操作是被排除操作的一个子类吗?图谱的回答是否。患者依然符合条件。确定性地。每一次都如此。
我们不再问"这些词看起来相似吗?",而是开始问"这些概念在逻辑上相关吗?"这一个转变改变了一切。
即便医生用简写书写,这套方法也依然有效。"Heart cath"、"angio"、"LHC"、"central line"、"CVC insertion"——SNOMED CT 会把所有这些变体都映射到特定的概念 ID。一旦你操作的是概念 ID 而非字符串,歧义就消失了。你匹配的是含义与含义,而不是词语与词语。
我在别处写过这背后的技术架构——SNOMED CT 层级、针对侧别与严重程度的后组配、计算表型的构建——具体见我们研究的交互式版本。但核心洞见很简单:医学 AI 需要的是一张医学地图,而不仅仅是一个医学语言的统计模型。
你如何解析"除非"?

本体论处理的是什么——我们在谈论的是哪些医学概念?但临床试验方案还有另一层通用 AI 处理得极其糟糕的复杂性:入选资格的逻辑。
下面是一个来自肿瘤学试验的真实排除标准:
"排除患有高血压的患者,除非其血压在稳定用药下已良好控制至少 3 个月。"
关键词匹配器看到"高血压"就排除该患者。布尔过滤器看到hypertension = TRUE就排除。这两种方法都会丢弃一名虽患有高血压、但因血压已得到控制并稳定数月而完全符合条件的患者。
当我第一次在大规模场景下遇到这个问题时,它差点把我逼疯。我们从一批 II 期和 III 期肿瘤学方案中提取了入选标准,发现其中大多数都包含条件性排除——"除非"从句、"except when"从句,以及诸如"6 个月内"或"在此之前已完成超过 90 天"这样的时间依赖。这些都不是边缘案例。它们才是常态。而其中每一条,都是那些无法就条件、许可和时间进行推理的系统的陷阱。
我们转向了道义逻辑——形式逻辑的一个分支,处理的是义务、许可和禁止。它是规范与规则的逻辑,最初由哲学家提出,而它与临床试验标准完美契合。患有高血压是被禁止的——除非你同时满足血压受控且用药稳定达到所需时长这一许可条件。系统将其建模为一个形式化的逻辑表达式,核查患者的时间线,并以数学精度计算入选资格。
我们还经常见到另一种模式:
"患者不得曾接受过既往化疗,除非那是在 6 个月以前完成的新辅助治疗。"
AI 必须同时核实三件事:患者是否接受过化疗?其意图是否为新辅助?以及它是否在参照日期之前六个多月就已结束?我们用文献中所称的时序集成逻辑(Temporal Ensemble Logic)来处理这一点——系统构建出患者临床史的时间线,并将各个事件置于有效的观察窗口之内。
关键词搜索在病历里看到"化疗"就慌了神。我们的系统看到化疗,会核查意图属性,测量时间差,并正确判定入选资格。
那个没人要求、却人人需要的架构

当我向投资者和制药高管描述我们的方法时,我有时会收到一种特定的眼神——那种在说"你为什么要把这件事搞得这么复杂?直接用 GPT 就行了。"
在我们研发大约一年时,我从一位潜在合作伙伴那里收到了那种眼神。他是个聪明人,掌管着一家 CRO 的数字创新团队,而他真心相信一个提示词写得好的 GPT-4 外壳、再外挂一些检索增强生成,就能解决这个问题。"这些模型每个季度都在变得更好,"他对我说。"你把这件事过度工程化了。"
我调出了我们的测试结果。同样的数据集,同样的入选标准。他团队的 GPT 外壳:每次运行之间准确率飘忽不定——对同一名患者,视你何时运行竟会给出不同答案。没有审计轨迹。无法解释为什么一名患者被纳入或被排除。而准确率视标准的复杂程度,最高也就在 63-87% 之间见顶。
我们的神经符号系统:确定性、可复现、准确率 >95%,且每一个决策都附有完整的推理轨迹。
FDA 不接受"AI 是这么想的"作为理由。他们需要一份逻辑证明。这并非可有可无的加分项——它是一个增强临床研究的工具与一个只能唬住演示观众的玩具之间的区别。
下面说说这个架构实际如何运作,不会用实现细节把你淹没:
LLM 负责阅读。它摄入医疗病历那混乱、非结构化的现实——扫描的 PDF、手写的笔记、医生的叙述——而它唯一的任务就是抽取医学实体并将其归一化。它读到"pt complains of chest pain(患者主诉胸痛)",然后输出胸痛的 SNOMED 概念。仅此而已。LLM 是感知层。它从不做出入选决策。
知识图谱负责映射。抽取出的实体被映射到 SNOMED CT 概念 ID,并根据语境消歧。作为病毒的"cold(感冒)"与作为温度的"cold(冷)"。图结构消解了这一歧义。
逻辑求解器负责推理。这里才是真正做出入选判定的地方——一个确定性的符号推理器,针对患者的结构化表型应用道义逻辑规则。它核查"是一种"关系,计算时间时长,评估条件许可。给定相同的输入,它总是产生相同的输出。
我们还使用GraphRAG,而非标准的基于向量的检索。标准 RAG 根据词语相似度检索文档片段。GraphRAG 则遍历关系。如果一项试验排除"任何与 CYP3A4 酶相互作用的药物",而一名患者正在服用药物 B,标准 RAG 可能会漏掉这一关联,如果患者病历从未明确写出"药物 B 是 CYP3A4 抑制剂"。GraphRAG 却知道,因为知识图谱包含了这一关系:药物 B 抑制 CYP3A4。这是多跳推理。是一种药剂师凭直觉就能建立、而文本匹配系统永远无法建立的关联。
关于该架构的完整技术拆解——第 4 类神经符号集成、概念感知解码、FHIR/CDISC 互操作层——请见我们详尽的研究论文。
"可模型难道不会越变越好吗?"
人们总是在这一点上提出反驳,我也理解为什么。LLM 的发展轨迹确实令人印象深刻。每隔几个月,就有一个新模型在医学基准测试上取得更高分数。那为什么不等等呢?
因为问题不在于能力——而在于架构。LLM 是一个概率性的 token 预测器。把它做得更大、用更多医学文本训练它,只会让它成为一个更好的概率性 token 预测器。这并不能让它变成一个逻辑引擎。这并不能赋予它确定性。这并不能赋予它审计轨迹。而在一个受监管的行业里,FDA 和 EMA 需要确切知道为什么第 4,271 号患者被排除在 XYZ-003 试验之外,"模型预测这是最可能的答案"是不可接受的。
还有一个不会随规模扩大而消失的隐私问题。把非结构化的患者病历发送到基于云的模型 API——哪怕是企业级的——所造成的 HIPAA 和 GDPR 风险敞口,是再多的 BAA 协议也无法完全缓解的。我们的架构将患者数据保留在安全飞地内。符号推理层和知识图谱在本地运行。神经层可以是一个本地的开源模型。受保护健康信息永远不会离开防火墙。
然后还有一个我认为最致命的可复现性问题。用同样的提示词把同一份患者病历在 LLM 中跑两遍,你可能得到不同的答案。改变温度设置、调整上下文窗口、稍微改一下问题的措辞——结果就不同了。临床试验要求 100% 可复现的决策。监管框架要求如此。伦理也要求如此。
我们正在失去的那些患者
这篇文章的大部分篇幅我都在谈架构和经济,但我想以一个更真诚的地方作结。
对于罹患转移性癌症、AML 或某种罕见遗传病的患者来说,六个月的入组延迟不是财务模型上的一个条目。它是能否获得一种可能具有治愈性的疗法之间的区别。当我们的系统错误地排除一名符合条件的患者时——因为它混淆了两种导管操作,或者因为它无法解析一条"除非"从句——那名患者不会收到一条写着"抱歉,AI 出错了"的通知。他们只是永远听不到这项试验的消息。他们的肿瘤科医生永远收不到提醒。名额空着,或者给了别人,而患者继续接受标准治疗,永远不知道曾有一个选择存在过。
这就是当有人叫我直接用一个外壳 API 时,我脑海里想的东西。
我们创立 Veriprajna,是因为 AI 在医疗领域所承诺的与它实际交付的之间的落差,不是一个营销问题——而是一个工程问题。这个行业选择了容易的架构(往上面扔一个 LLM),而不是正确的架构(给 LLM 一个本体论和一个逻辑求解器,并将它约束为只做它擅长的事)。
我们不会靠提示词工程走向精准医疗。我们需要的是会推理的系统,而不是会自信地猜测的系统。
招募危机的解药不是更好的语言模型。而是要认识到:入选资格是一个披着语言外衣的逻辑问题。剥去非结构化的文本,将其映射到一个医学本体论,应用形式化推理,突然之间,那 80% 错过入组时间表的试验,就开始看起来像一个可解的问题,而非行业的必然宿命。
别再匹配词语了。开始匹配患者吧。这中间的差别,就是一张知识图谱、一个逻辑求解器,以及愿意去构建某种比外壳更难的东西。