放射科研究自動化初探:資料與專案分離

最近兩個月使用 Codex 5.3 及 5.4 來處理研究任務,越發得心應手。模型能力大抵堪用,反而是工程問題及技術債限制了產出速度。底下記錄目前心得,特別是把資料及程式本體「解耦合」的重要性。

去年中做研究開始大規模應用 totalsegmentator。那時每個專案各有呼叫命令列 totalseg 工具的腳本(由 claude code 創建)。若有 radiomics 需求就必須考慮品質管理(QC)以及對位擷取區域等。考慮到這些上游任務用的是同一套工具,便嘗試整合。過程中遇到的最大問題是,新工具會把不同時期的工作流 dirty hack「硬編碼」進新工具來向後相容。例如最早期的對位(alignment)工具,有一個無中生有的旋轉設定(因為處理肺臟的時候,沒有處理好 DICOM → NifTi 的座標轉換及 metadata 遷移;後來做肝臟時則有處理),結果導致整套工作流一直互相衝突。大部分補丁或 dirty hack 都應該儘可能去除,wrapper 部分能少就少。

隨著工具鏈整合,下一階段就是剝離資料、腳本、輸出。我把多個專案整合為一個巨大的 meta-project。資料部分放在 data,腳本放在 projects,QC 資料放在各自專案下或定期清理的 output,要寫論文的資料則推送到我的 MacBook。這樣的好處是可以自動嘗試不同任務。例如卵巢癌資料集,可以測試不同模型或任務(腫瘤分割、分類、預後機率評估等)。

最近兩個月 Codex 實裝了(1)計畫模式(plan mode)(2)子代理(subagent)模式。這兩個新功能使 content window 的管理更有效率。目前的核心轉向是「如何讓 Codex 成為近似人類的助理?」來節省工作量。我用的 prompt 是「Spawn subagents with xhigh effort to check data manually while keep content window manageable」,並給出具體案例數。這樣 Codex 就會確實一個個看過去,甚至會啟用 view image 來幫忙檢查 QC 流程產生的圖片是否有大問題。

總結幾個原則:

  1. 必須明確列出資料轉換的步驟,然後確認沒有混入之前流程的 dirty hack
  2. 隱私無關的部分(例如把各式各樣的病理全名歸類為項目)交給 codex subagent
  3. 涉及病歷部分調用強力本地模型如 OSS-120B 做處理
  4. 若要把 GPT API 當作函數用來處理資料,則要設定 prompt cache

Plan mode 圖:計畫模式(plan mode)

我可以構造很複雜的 prompt,讓它檢查資料結構、已有的工具包等,然後調整目標、設定邊界條件,之後就可以去睡覺,讓 Codex 據此計畫搗鼓;目前觀察到它已能連續工作四五個小時(會有 auto-compact 跟更新日誌等動作),起床就能收到不錯的結果。也可以把想到的論文草稿、Codex 半成品與輸出丟給 extended pro,讓它給出建議 - 實務上,Codex 像極聰明的助手,ChatGPT 才有顧問的感覺。

我個人認為:不能讓 agent 連續工作好幾個小時的人,AI 操作能力恐怕還停留在 2024。

最近跟我弟說,我們阿吉主任單靠 ChatGPT Plus,不用 agentic tool(例如 Cowork)就已經生產力大幅提升,兼顧多個研究專案並瘋狂產出;如果用了豈不是要飛天?我弟說:「你就是你們老闆的 agent」,我竟一時無法反駁 😂