研究成果集 · 2026-08-03

在一台筆電上,用終端機做研究

13 個研究專案 · 9 篇完整論文 · 107 頁 · 125 支腳本 · 每頁附原文 PDF 與可操作的 3D 模型

黃聖瀚 Andrew Sheng-Han Huang · 陽明交大醫學系 · 2026-04 至 2026-08

這份成果集有兩個目的。第一是把研究本身講清楚 —— 每篇在問什麼、量到什麼、哪裡站不住。第二個目的比較不常見,也是這份東西真正想展示的:每一篇是怎麼在終端機裡被做出來的。沒有 Jupyter、沒有 GUI、沒有把數字手動貼進論文的步驟。從選題、抓資料、跑模型、統計驗證、製表製圖、排版編譯到交付前稽核,全部是可以單獨重跑的腳本。

01一眼看完

四個月,一台 M5 Max 筆電。

13
研究專案
9
編譯完成的論文
107
論文總頁數
125
可重跑的腳本
713
由腳本注入論文的數字 macro
0
手打進論文的數字
5 / 5
送對抗審查後被判「有缺陷」的論文

最後兩個數字是這份成果集的核心。713 個 macro 對 0 個手打數字的意思是:論文正文裡不存在任何一個可以用打字產生的數字,每一個都必須追溯到一份 results JSON。5 篇送對抗審查、5 篇被判有缺陷的意思是:審查不是橡皮圖章,而且每一次修正都讓論文的宣稱變弱、變真。

02每一頁有什麼

三層:白話說明、原文 PDF、可以動手玩的 3D 模型。

① 原文 PDF

每一頁最上方有一張 PDF 卡,點開就是那篇的完整原文(LaTeX 編譯的手稿,或沒有手稿的專案由原始文件生成)。頁數與檔案大小是產生頁面時實際讀檔算的,不會跟檔案漂移。

② 互動 3D 模型

每一頁有一個可以拖曳旋轉、調參數的三維模型,把該篇的核心主張變成一個能動手玩的實驗。讀數面板的數字是當場算出來的,不是把論文數字寫死。

3D 用的是自己寫的極簡引擎(canvas 2D + 手寫透視投影,約 420 行),不引用 Three.js —— 因為每一頁都必須自包含、零外部資源,把 Three 內嵌到 13 頁會多出好幾 MB。這也是整份成果集的一貫原則:依賴越少,別人越容易重現

03這套產線長什麼樣

十個環節,全部在終端機裡。

環節工具產物
選題與排名自建 SIEVE 題庫(38 題)/ FSM 可行性篩選排名 + GO / WATCH / KILL 判定
主張定案Claude Code CLI一句可否證的主張 + 一封拒死自己的信
新穎性查證arXiv / Crossref / PubMed API + 雙掃描器可點的證據清單,不是「我覺得沒人做過」
資料自寫抓取腳本 + SHA256 雜湊原始資料 + 抓取 log + schema 抽查
模型推論ollama(本機)逐題結果矩陣,可續跑、全程留 log
統計核心Python 標準函式庫(不用 numpy / scipy)任何人在乾淨 Python 都能重跑
測謊器先於方法本體寫好的模擬測試會 FAIL 的可執行界線
數字入稿make_macros.py → LaTeX macroresults JSON 是唯一的數字來源
排版tectonic(獨立 LaTeX 引擎)終端機直接編譯 PDF
交付前引用 API 驗證 + 主張逐條比對 + 關鍵字掃描可稽核的交付紀錄
一篇論文從零重建的樣子(以 SAVE 為例)
$ python3 scripts/prep_data.py            # 建題目檔
$ python3 save_eval/test_validity.py      # 跑 11 條統計保證的模擬證明
$ python3 scripts/run_sims.py             # 模擬章節
$ python3 scripts/collect_matrix.py …     # 本機模型逐題推論(數小時,可續跑)
$ python3 scripts/analyze_real.py         # 重播分析 → results/*.json
$ python3 scripts/make_tables.py          # JSON → 論文 macro
$ cd paper && ../bin/tectonic main.tex    # 編譯出 PDF

04為什麼這些數字可以相信

四條寫死的規則。共同點是:都不依賴我的記性或自覺。

① 進度的單位是檔案,不是時間

流程切成 G0–G6 關卡,每關定義「必須存在的檔案 + 通過判準」。過不了就停在那裡並寫下卡點。檔案在或不在是二元的,沒辦法用敘述矇混過去。

② 驗證寫在被驗證的東西之前

統計保證先寫模擬測試,方法先寫破壞測試(故意弄壞必須變紅)。事後寫的測試會不自覺地遷就已經跑出來的結果。

③ 數字只能來自腳本

論文裡每個數字由 results JSON 經 macro 注入;交付前 grep 證明正文沒有寫死的數字。捏造最常發生在「順手填一個記憶中的數」—— 這條路被實體切斷。

④ 生成的人不能當評審

評審一律用全新 context 或另一個模型。實測過:同一個構想自評 67、冷判 68,總分差不多 —— 但可驗證性那一項差 3 分。自評不是全面樂觀,是專門漏在得意的地方。

還有三條配套

05機制真的攔到什麼

以下每一條都有檔案為證,不是理念宣示。

機制攔到的東西出處
輸入審計一個掛在真實論文名下的幻覺統計 —— 搜尋摘要給了「benchmark 中位壽命不到兩年」並標註出處,回原文比對發現那篇論文裡沒有這句話Benchmark Half-Life
測謊器先行擬合器在純噪音上有 48% 機率擠出假的半衰期 → 加顯著性閘門降到 6.7%Benchmark Half-Life
測謊器先行我自己的 e-value 聚合方式錯了(取最大值等於偷做多重比較卻不付代價)SAVE
測謊器先行自己設計的置換檢定閘門在平坦虛無上假陽性 9.3%(名目 5%)→ 改叢集拔靴法降到 4.0%Workflow Instability
對抗審查頭條數字用的規則不在定理涵蓋範圍 → 節省率從 84.5% 誠實降到 52.0%Cost-Aware Racing
對抗審查定理要求固定基準線但流程從資料估計 → 補跑模擬,結果證明是保守的(FDR 0.1%)Flaky-Task Quarantine
對抗審查醫學研究治理包被抓出 4 個致命問題(IRB 定位、授權異質、同意不可傳遞、工具違法)臨床推理研究治理
停損條件旗艦論文預先註冊的門檻在真實資料上真的觸發 → 誠實判負Flaky-Item Quarantine
新穎性查證發現方法在四天前被人先發表 → 主張收窄到對方明說沒做的角落Judge Drift Auditing
分年份對照抓到現代模型的資料汙染指紋(只在它讀過的那一年表現好)Foresight Backtest
自我否證自己原本的賣點「LLM 會編造 ECG 數值」被實測推翻(約 200 次回應零捏造)ECG-Trust
自動邏輯檢查手稿相隔十幾頁的兩處研究註冊敘述互相矛盾SR/MA 產線 QA-6
這張表是這份成果集最想被看到的東西。它證明的不是「我沒犯錯」,而是「犯的錯會被系統攔下來,而且留下紀錄」。

06評測科學主線(四篇)

一條完整的敘事:AI 測量的不確定性,從單次實驗一路到整個文獻。

層次回答的問題論文
單次測量之內什麼時候可以停止測量?SAVE(完稿待投 · 89 分)
一份考卷的壽命這份 benchmark 還能分辨模型多久?Benchmark Half-Life
版本之間換版之後分數還能比嗎?Score Bridges(GO)
來源之間公開紀錄裡同一個數字彼此矛盾多大?The Error Bar You Should Have Used(88 分)
PAPER 01

偷看不用罰:讓模型比較可以「隨時停」的序貫檢定

Peeking Without Penalty: Anytime-Valid Sequential Evaluation of Language Models

所有人比較模型都會「跑一跑、看一眼、覺得贏了就停」。這個習慣把 5% 的偽陽性推到 40%。這篇給出一個可以隨時偷看、保證仍然只有 5% 犯錯的比較協議,而且平均只花三分之一的題目就能定案。

完稿 · 尚未送出SIEVE 評分 8921 頁
PAPER 02

Benchmark 半衰期:一份考卷還能分辨模型多久

Benchmark Half-Life: The Discriminative Lifetime of Language-Model Leaderboards

一份 benchmark 只有在還能分辨模型時才有用。這篇量出它失去鑑別力的速度,並發現已經被退役的那批,衰退速度是還在用的 3.6 倍——等於把人類當年憑感覺做的退役決定,事後用數字重建出來。

SHIPPED6 頁G0–G6 全通過
PAPER 03

你早該用的那根誤差棒:對公開 benchmark 紀錄本身做統合分析

The Error Bar You Should Have Used: An Independence-Audited Meta-Analysis of the Published LLM Benchmark Record

同一個模型在同一個 benchmark 上,不同人報出來的分數差多少?答案是中位 6.1 個百分點,是單次評測理論誤差棒的 5.5 倍。換句話說,排行榜上絕大多數的相鄰名次差距,在文獻自己的離散度面前是雜訊。

SHIP-CANDIDATESIEVE 評分 8811 頁
PAPER 04

分數之橋:用心理計量的測驗等化,稽核 benchmark 換版之後的分數可比性

Score Bridges: Auditing LLM Benchmark Version Migrations with Test Equating

benchmark 常常改版、修題、重新計分。一個舊版的分數被放在新版分數旁邊比較時會怎樣?答案:40.5% 看起來已經分出勝負的比較,在通過等化橋之後翻盤。但這個數字的意思是「兩個尺度差多遠」,不是「40% 的結論是錯的」——這個區別是本篇自己證的一條定理。

GOSIEVE 評分 73.319 頁

07SIEVE 一晚五篇

同一晚、同一套軌道、五個獨立題目。目標是做出一篇打敗 SAVE 的第一名 —— 沒有達成。

這五篇是一次壓力測試:如果軌道設計是對的,那麼在時間壓力下同時跑五個題目,品質應該還是守得住。結果是五篇都完成、都通過獨立複驗,但五篇全部被對抗審查判定有缺陷,而且每一篇的頭條宣稱都因此變弱

最好的是 B(85 分),真正跟 SAVE 同級。旗艦題 E 被自己預先註冊的停損條件殺掉。D 被搶先四天,而且量出來的結果對自己不利 —— 兩件事都照實寫。這是誠實的結果:一個捏造的 92 分過不了審查,這些可以。

PAPER 05

按美金計價的模型比賽:把「省題數」換成「省錢」

Cost-Aware Anytime Racing: Paying for Language-Model Benchmark Decisions by the Dollar

SAVE 說「中位只要 33% 的題目」。但題目不等價——一題長推理的成本可以是一題選擇題的數十倍。這篇把計價單位換成實際花的錢,並證明只要選題規則是「可預測的」,就不會賠掉任何型一誤差保證。

SHIP · workshop 級評分 8311 頁
PAPER 06

會抖的題目要隔離:給隨機性評測一個有統計保證的檢疫規則

Flaky-Task Quarantine: An Anytime-Valid, FDR-Controlled Isolation Rule for Legitimately-Stochastic Benchmark Items

同一題重跑會從對變錯,就算溫度設 0 也一樣。軟體工程早就有「隔離 flaky test」的做法,但對隨機評測沒有答案。這篇給出哪些題目抖得超過 benchmark 自身噪音能解釋的範圍,而且隔離集合的偽發現率在任何停止時刻都受控。

SHIP · workshop 級評分 85 · 本批最高9 頁
PAPER 07

多步驟 LLM 工作流為什麼每次跑都不一樣:逐節點變異分解與深度放大律

Workflow Instability Decomposition: Per-Node Variance and a DAG-Depth Amplification Law for Multi-Step LLM Workflows

生產環境的 LLM 工作流每次跑結果都不一樣,大家的處理方式是「全部把溫度設 0」,犧牲掉有用的多樣性。這篇給它結構:把端到端的變異拆給每一個節點,並量出「越深的節點注入的抖動,落到輸出時被放大得越多」這條規律。

WATCH評分 739 頁
PAPER 08

當評分的 AI 自己變了:在固定人工標註預算下,偵測 judge 漂移到底划不划算

Judge Drift Auditing: Operating Characteristics of a Prediction-Powered e-Detector for LLM-Judge Drift under a Fixed Gold Budget

現在很多評測用 LLM 當評審。但 judge 自己是一個 API 背後的模型,悄悄換版就會改變評分。這篇量出漂移偵測器的操作特性,然後報告一個對自己不利的結論:在真實預算下,它贏不過最簡單的固定樣本檢定

WATCH · 誠實負面評分 7111 頁
PAPER 09

隔離會抖的題目能不能穩住排行榜:方法有效,但在真實資料上主張被自己推翻

Flaky-Item Quarantine: A Split-Sample, FDR-Controlled Removal Rule for Replicate-Unstable Benchmark Items, and When It Does (and Does Not) Stabilize a Leaderboard

這是那一晚刻意設計來「打敗 SAVE」的旗艦題。方法本身完全成立、真實資料集也蒐集完成(40,320 筆),但預先寫好的停損條件在真實 MMLU 上真的觸發了——移除 34% 的題目,排名翻轉不但沒改善反而惡化。所以它以誠實負面收場。

誠實負面 · kill 條件觸發評分 78–8010 頁

08應用研究與產線(四個)

把同一套方法用在醫學 AI、預測評測、研究治理與實證醫學上。

PROJECT 10

本機 LLM 讀心電圖不是偶爾錯,是「非常有自信地錯」

ECG-Trust: Calibration Failure and Dangerous Misses in Local LLM ECG Interpretation

本機 LLM 讀心電圖的診斷正確率只有 15–27%,其中 43–66% 的病理心電圖被判成「正常」——而且漏診時的平均信心高達 0.88–0.92。最關鍵的發現是:模型自報信心與答對與否的關聯,最差的一個 AUROC 只有 0.46(低於隨機)。

GO · 題目成立一晚自主執行零 PHI · 全本機
PROJECT 11

凍結權重的模型能不能預測未來:正式判死,以及一個意外的副產品

Foresight Backtest: A Masked Evaluation of Frozen-Weight LLM Forecasting

把知識截止在 2024 的模型當成時光機,問它 2025、2026 才揭曉的事件。結果每一個模型 arm 的 Brier 分數都輸給「每題都猜 50%」這個什麼都不做的基準,而且 AUC ≈ 0.50 —— 連排序都做不到。同一個實驗反手證明了測試框架有效:它當場抓到資料汙染的指紋。

KILL · 題目判死v0 820 筆 + v1 1080 筆預測harness 反手證明有效
PROJECT 12

在跑第一次模型推論之前:一份醫學 AI 研究的完整治理包

Failure Shape Transfer Across Cloud, Local, and Agentic LLMs in Sequential Clinical Reasoning — Governance Package

醫學研究最貴的錯誤發生在開工之前。這個專案示範在跑第一次模型推論之前該鎖死的東西:IRB 定位、審閱者角色界線契約、病例建構協議、資料來源授權審查、OSF 預先註冊。而這七份文件本身經過對抗審查,被抓出 4 個致命問題

治理文件完成實驗未啟動目標 npj Digital Medicine
PROJECT 13

系統性回顧與統合分析的端到端 CLI 產線:從選題排名到可投稿手稿

AM8 / FSM: An End-to-End CLI Pipeline for Systematic Review and Meta-Analysis

系統性回顧與統合分析是醫學研究的主力工具,也是最耗人力的。這套產線把它拆成九個階段、每階段留一份可稽核的檔案,並在最後跑六道自動 QA。範例專案從 1,615 筆檢索一路跑到含森林圖的完整手稿。

已產出完整手稿九階段目錄結構QA 六道自動檢查

09誠實的總帳

哪些成了、哪些沒成。

成了的

1 篇完稿待投的方法學論文(SAVE);2 篇評分 88 以上的投稿候選;5 篇一晚完成並通過獨立複驗;1 份可再利用的 40,320 筆真實資料集;1 條端到端的醫學系統性回顧產線;1 份被對抗審查修過的醫學研究治理包。

沒成的

SAVE 還沒送出去 —— 卡在 arXiv 要求新作者找人背書;旗艦題被自己的停損條件判負;judge drift 被搶先四天且結論對自己不利;凍結模型預測未來整條路判死;醫學投稿案卡在 IRB 等外部依賴。

我刻意把失敗的部分放在跟成功一樣顯眼的位置。一個只展示成功的成果集,沒辦法證明它的品質控制是真的在運作。

10如果只看一件事

品質是軌道的性質,不是模型的性質

同一套關卡,SAVE 由一個模型跑、Benchmark Half-Life 由另一個模型跑,產出同等可信度的成品 —— 而兩者的失誤都是被軌道攔下的,不是被模型的自覺攔下的。這是這份成果集想證明的唯一一件事:如果要用 AI 做研究,該投資的不是提示詞,是那條會讓「空心」走不遠的軌道。

每一頁的「產線」「關卡」「測謊器」「對抗審查」四節,講的都是同一件事的不同面向:怎麼讓一個宣稱在被寫下來之前,就先有一個會反對它的機制存在。

研究成果集 · 13 個專案 · 由 render.py 從事實包生成 · 2026-08-03