这周我差不多有五天在干同一件事,把胆石症那个研究从头到尾又筛了一遍。

最后落在 998 篇。

原来的账不是这个数。1,328 篇纳入,全文能拿到 1,177。中途发现边界松了,剔掉 196 篇纯手术技术类的,补进之前漏掉的指南,OCR 修回来 6 篇字体坏掉的,净下来是 998。

数字看着像在缩水,其实是挤水分。

文献筛选

Photo by Iñaki del Olmo on Unsplash

地漏在检索阶段

周三查出来的问题性质不太一样。有一批指南在检索阶段就没被识别出来。检索是源头,源头漏水,后面全歪。当时问我,前面那批结果受影响大吗,要不要重跑。我说先修数字,把补 PDF 列成待办,再回头查检索本身。这种事不能只扫一遍地,得看看地漏在哪。

那天还有人问了我一句更扎心的,这次检查出这么多遗留问题,前面几次同步为什么没发现。我回去翻了一遍记录,答案不好看:前几次都是照着上一次的结论往下核,没人回头验上一次的结论本身。

补指南这件事,说白了比想的费劲。76 篇应补,跑到周末是 45 篇有文件、23 篇进了 Zotero,还差 31 篇。剩下这些卡在各处:Elsevier 那六篇要走浙大账号,Thieme 四篇是德国 S3 系列得靠 JS 渲染,中华医学期刊五篇 WebVPN 不支持,还有八篇是俄语、乌克兰语、西语的小语种本地期刊,PubMed 上连全文链接都没有。

周二夜里我在 Windows 上登 WebVPN,把 cookie 提出来往里拉。以前是在 Docker 里登的,现在换了条路。那天从凌晨两点跑到天亮,一次三篇、四十二篇这么慢慢挪。

深夜的工作台

Photo by SHAN LU on Unsplash

因为要自己标八十篇,我做了个标注界面。八十份 PDF 配一串下拉菜单。周二看的时候下拉是空的,我以为是自己眼睛的问题。周三查出来是代码写错了,option 标签里没写文本,规范说会显示 value,实际渲染出来是空白行。改完重测,160 个下拉全部正常。

标注界面

Photo by Luke Chesser on Unsplash

标注界面和一篇 Science

周六夜里读了一篇 Science。达摩院 RADAR,腹部 CT 通用模型,通讯作者是我们医院的梁廷波,第一单位就是肝胆胰外科。公众号把它当 GitHub 项目介绍,通篇屎山、爆内存。论文本身是真的,42.5 万例增强腹部 CT,39,160 例内部队列 AUC 0.913。

我核了一遍数字,从中挑了四条能搬的。最值钱那条是报告标签打底加病理子队列确证,主体用临床报告做弱监督,零人工标注,再切一个小队列做病理分层。这条正好解我 B5 的死结,不用等凑齐两百例病理金标准才能开工。

但我先干了件更要紧的,novelty check。本来想拿 RADAR 在浙一数据上做外部验证,查完发现达摩院自己在开源仓库里已经做过外部验证了。纯复现是零创新。可把 RADAR 的 21 个标签逐条拉出来,空位就露出来了:肝胆胰只占 6 个,全是形态学或良性标签,胆囊癌、胆管癌、黄色肉芽肿性胆囊炎这些外科真正依赖的,外部验证数是零。

于是 B5 从复现改成了补空位。

顺手给 B5 建了两个脚本,一个算校准,一个算代价加权净获益。第二个我第一版写错了,自检的第 7 条断言直接挂掉,算出来的最优阈值永远贴在网格最左端。查下来是方法学上的老账:决策曲线的阈值和代价比是绑定的,在阈值上取净获益最大值,等于拿不同代价比互相比,这个量根本不存在。删掉,改成按临床预设阈值报。

还有个更该补的。读到论文二和论文三的方案时才发现,两份都还停在 v3.0,而论文一这周已经走到 v4.3.0。同一篇博士论文内部自相矛盾,审稿人一眼看得出:论文一已经放弃六模型共识,理由也写清楚了,第二模型全量复现一千多篇只要几块钱,一致性 κ 已经到 0.972,共识多花的钱买不到东西,可论文二、论文三还拿共识当核心设计。12 项待整改,4 处是硬伤,改完预算顺带从几十美元降到十美元以内。

医学影像

Photo by Umanoide on Unsplash

小红书:一个脚本错了五周

自媒体那边也没停。017 周一晚八点发了,备孕篇。发之前卡在卡片上,卡 3 的小标题比正文还小,垫片改了数字不生效。根因是卡片里用了纵向 flex,内容一超,垫片先被压成 0,加上不压缩才真撑开。底行还被裁掉过一次,包围盒数据骗了我们俩,实际像素裁图里那句话根本没出来。教训记进运营沉淀了,验证只认像素,不认包围盒。

019 的卡片灰蒙蒙的,换了个模板,颜色调明快。018 拖到周日下午一点半才发出去,不在黄金时段。

真正的重头在周六晚上。把小红书的流程和 skill 整个理了一遍,48 条发现,修掉 26 处。最要紧的是巡检脚本,它按周二周五判断发布日,而 8 月 15 号就纠正过,是周一和周五。从那到现在,每个周一漏提醒,每个周二误提醒。一个天天在跑的脚本,错了五周。

顺带把评论存档的架子搭起来了,11 个篇目 45 条历史咨询全部归档,读者发的报告截图也一起落盘。评论回复定下三条规矩:收到就直交终版,不问行不行;症状史写成条件句;做完就收,不主动替读者评估能不能做选题。

社交媒体的卡片

Photo by Jonas Leupe on Unsplash

临床这周也没断

周一给一个病例准备 MDT 汇报,主持人较真出了名,我把能问到的都先算了一遍。周五看了份前列腺穿刺病理,12 针里第 9 到 11 针是腺癌,Gleason 4+4。周六帮监护室的病人写会诊意见,第一版二百五十字,被要求压到一百以内,最后发出去的还是二百五十字那版,只改了几个字。周日在门诊看了一个脂肪肝加胆囊壁毛糙增厚、胆汁淤积的,顺手开了熊去氧胆酸。

临床

Photo by Online Marketing on Unsplash

工具和网络

杂事也不少。模型从 opencode go 整体搬到了 command code 的 GOAT 套餐,别名映射重排一遍。周日晚上查出 DeepSeek 官方 API 在我们这儿有计量收费,量还不小,一并改走 GOAT。也把只证可复现、不证正确这条 κ 的铁律写进了论文二正文。

hermes 的 WSL 自启动又失败了一次,这毛病查过好几回。周六把 Clash 停了做测试,才发现大部分模型根本不用代理,直连就行。我一直以为它必须开着。

网络与服务器

Photo by Scott Rodgerson on Unsplash

一周下来最踏实的一句,是周六写进看板的那行:分析集 998 篇,五条核心发现定稿,数据准备收官,待 Q5 标注。

数据准备做了这么久,终于轮到我坐下来,一篇一篇标那八十篇了。

Cover photo by Dan Dimmock on Unsplash