前几天深夜,我刷到一篇医学影像代码生成的论文。全自动,多智能体框架。标题扫过去,我其实没太在意——这类东西今年太多了。可摘要里有五个字把我绊住了:zero human intervention。零人工干预。
先停一下,问个问题:我们这些天天琢磨怎么跟 AI 协作写代码的人,什么时候开始把“人完全不插手”当成一个卖点了?更怪的是,我看到这五个字的第一反应不是“厉害”,是“这不可能是好事”。当时没想明白为什么,就关了页面。后来洗澡时,这个问题又冒出来了。
我一开始也以为,这是我对“自动”过敏——毕竟做这行的人多少都有一点。后来才发现不是。我不舒服的地方不在“自动”本身,而在于医学影像这个场景里,“零人工干预”压住的不是人的工作,是人的追问。
再往下呢?我试着往下剥。
这篇论文的框架分两段:规划段,分析数据集、设计架构;编码段,并行生成模块、跑多重验证。它用一套多阶段验证机制去抑制错误传播,还靠领域知识库、共享记忆、验证反馈来自动构造上下文。读完这串名词,我的第一反应是——这题我熟。只是我熟悉的那个版本里,人是最后一道闸。这里把闸也拆了,换成了一圈互相检查的 agent。
那问题就来了:谁验证谁?
六个数据集,五种基础大模型,分割任务 Dice 最高 0.90,分类准确率 99%。这些数字放在任何 benchmark 表里都好看。可我觉得最该问的不是准不准,而是它凭什么说自己对。一个 LLM 生成代码,另一个 LLM 跑验证,第三个 LLM 拿验证反馈去改。每一环本身都不算差,问题恰恰出在“都不差”上——它们在同一个分布里学出来的“对”,长得太像了。验证器说“过了”,过了的到底是医学影像处理该有的代码,还是——用我们的话说——“看起来对”的代码?
这么说吧,我们平时让 agent 写代码,最怕的不是它写错。写错好办,报错、测试挂,一看就知道。最怕的是它写得语法正确,逻辑也通顺,只在某个极端边界上悄悄翻车。那种“看起来对”的东西会绕过你脑子里那道费力的检查机制。现在你把这道机制里“你”的部分也挪进了系统,系统又用同样的生成能力来做检查,检查的可靠性就没法独立于被检查的东西了。
坦白说,我有个可能武断的判断:多重验证能抑制错误传播,但它未必把得住“看起来对但实则错”那条缝。它把住的是更浅的一层——明显的、可形式化的一层。这不是它不努力,是这层本来就好验。真正的缝在语义里,在“这张 CT 的边界要不要把钙化点算进去”这种问题上,得有一个知道诊断后果的人来判断。这个判断,不是 agent 能自动构造出来的上下文覆盖得了的。
话说到这儿,我也得改口:零人工干预不是坏事。它是不是坏事,取决于你把它当成终点还是起点。如果当终点,就是让一串互相佐证的“看起来对”在闭环里自转。如果当起点,它干掉的其实是另一件更值得干掉的事。
扯远了,回到那个词。
它还有一句让我差点拍桌子:“自动构建上下文,无需手动提示”。写 prompt 写烦了,谁不喜欢这个?但再往下想一层——“无需手动提示”换来的,是提示从显式变成了隐式。原来你写 prompt 的时候,好歹有个机会把自己的犹豫、偏好、边界条件摊开想一遍。现在这些被知识库和共享记忆代劳了,它们替你决定了“这个任务该关注什么”。如果它们决定错了,你连错在哪个决定上都不一定找得着。
我最不舒服的地方就是这儿。不是自动化本身,是自动化让决定变得不可见了。在医学影像里,一个不可见的错误决定,比一个可见的错误代码要贵得多。
那它的价值在哪儿?也不是没有用。它那个跨项目自适应流水线合成,根据项目相似度复用已验证的流水线和组件——这玩意儿在工程上很扎实。我们手动搭 pipeline 的时候,大量精力耗在“这个任务跟上次那个像不像、那次那个预处理到底能不能搬过来”。这层判断干系的不是医学知识,是重复劳动。让系统自己去比相似度、复用组件,省下来的时间是真的。Dice 0.90 和 99% 的准确率,在六个数据集上跑出来,至少说明这套流水线在“像样程度”上过了关。
但正因为如此,它更值得你盯住那条缝。它能自动化的都自动得很漂亮,剩下的那点不能自动的,就格外隐蔽。你把整套东西交出去跑,跑出 0.90 回来,你只会高兴,不会想到去问“这个度量本身有没有被悄悄优化”。而刚好在医学影像分割里,Dice 这东西对边界的小偏移没那么敏感——一个整体上 0.90 的分割,可能在那几毫米的关键地方是糊的。这几毫米,恰恰是人的判断该进去的地方。
所以绕回那晚的洗澡问题。我第一反应不是“厉害”,是“这不可能是好事”,原因就在这里:我怕的不是机器接管,是机器把接管做成一个光滑的闭环,光滑到你伸手进去都找不到缝。而所有真正重要的、要命的东西,都藏在那条缝里。
再往下,就是“当 agent 也开始学习医学先验知识时,人的位置到底在哪里”这个大坑了。我还没想明白,先放这儿,下次接着剥。