想像一個忙碌的急診現場:候診區同時出現胸悶、發燒、腹痛與呼吸困難的病患,但能立即投入處置的人力與空間有限。
這時最先要回答的問題,不是「病患最後確診什麼疾病」,而是:
誰可能有立即危險?誰需要更快接受處置?誰可以在安全範圍內稍候?
這個快速判斷的過程稱為急診檢傷。檢傷人員需要在很短的時間內,同時理解病患用日常語句表達的主訴,以及呼吸速率、血氧、心跳、血壓與體溫等生命徵象,再依照檢傷規則判斷急迫程度。
這正是本次 30 天系列想處理的問題:我們要建立一套能先查找檢傷規則,再根據規則整理候選結果的急診檢傷研究原型。
這套系統的核心方法是檢索增強生成(Retrieval-Augmented Generation, RAG),也就是先從外部知識中找出相關內容,再讓語言模型根據找到的內容產生回答。
這裡的個人實作專案(Side Project)不是臨床產品,也不是用來取代檢傷人員。它是一個可以逐步建造、執行、測試與檢查的技術專案,讓我們能具體研究文字、數值、規則檢索與語言模型如何協同工作。
下圖將這個目標畫成一條由左向右的建造路徑:左側是主訴與生命徵象,中間是公開資料、規則知識庫、檢索與模型模組,右側則是具有程式、測試、實驗紀錄與安全圖表的完整專案。

上圖先把 30 天的建造方向放在同一條路徑上。今天先不安裝模型,也不急著寫大量程式碼。我們會先說清楚問題、系統範圍、30 天順序與完成標準。只要地圖先畫對,後面的每一步才知道自己為什麼存在。
讀完這篇文章後,你應該能夠:
以下表格先提供快速索引。正文仍會在名詞第一次出現時,用完整句子重新解釋。
| 中文名稱 | 英文全名/縮寫 | 在本專案中的用途 |
|---|---|---|
| 大型語言模型 | Large Language Model, LLM | 理解主訴文字,並依照找到的規則產生固定格式的候選結果 |
| 檢索增強生成 | Retrieval-Augmented Generation, RAG | 先找出相關規則,再把規則交給語言模型使用 |
| 知識庫 | Knowledge Base | 保存可搜尋、可追溯來源的檢傷規則 |
| 程式碼儲存庫 | Code Repository, repo | 集中保存程式、設定、測試與操作說明 |
| 可重現研究 | Reproducible Research | 讓第三方能按照相同資料版本、程式與設定重新執行流程 |
| 消融實驗 | Ablation Study | 一次移除或更換一個元件,觀察它對結果造成的影響 |
急診檢傷的目標,是依照病患當下風險安排處置優先順序;疾病診斷的目標,則是透過更完整的問診、檢查與檢驗確認病因。兩者發生的時間、可用資訊與工作目的都不同。
因此,本專案的輸入只會使用檢傷當下合理可取得的資訊,例如:
急診後續才產生的診斷、檢驗結果、住院狀態或處置結果,不應偷偷放進模型輸入。把預測當下原本不知道的資訊放進輸入,稱為資料洩漏。資料洩漏會讓測試結果看起來很好,卻無法代表系統在真實時間點的能力。
病患可能說:「我今天一直喘,走幾步就很累。」這是自然語言,也就是人平常說話或書寫時使用的語句。系統必須先理解「喘」與「活動後加重」可能代表的症狀方向。
但文字不是唯一線索。若同一位病患的血氧明顯偏低、呼吸速率過快或意識改變,急迫程度可能需要立即提高。因此,系統還必須正確處理數值門檻,不能只靠文字相似度判斷。
最後,不同主訴與生命徵象可能對應不同規則。系統不只要給出答案,還要能回答:
這些問題共同形成本專案的核心:同時處理文字、數值與規則證據,並保留可以檢查的判斷過程。
大型語言模型(Large Language Model, LLM)是從大量文字中學習語言規律的模型。它可以整理主訴、辨識症狀描述,也能按照指令產生結構化回答。
結構化回答是依照預先指定的欄位與格式輸出,例如固定回傳「候選級數、引用規則、理由與警示」,而不是只寫一段自由文字。固定格式能讓後續程式自動檢查欄位,也比較容易追蹤錯誤。
不過,LLM 說得流暢,不代表它引用的檢傷規則正確。若只依賴模型訓練時記住的內容,它可能使用錯誤、過時或根本不存在的依據。
檢索增強生成(Retrieval-Augmented Generation, RAG)是一種先搜尋外部資料,再讓語言模型根據找到內容作答的方法。
在本專案中,RAG 可以先簡化成三個步驟:
RAG 不保證答案一定正確。它的價值是讓答案多一層可以檢查的外部依據,也讓我們能把「是否找對規則」與「是否根據規則判對」分開評估。
下圖把系統拆成五個連續層次。閱讀時請由左向右看:前一層的輸出,會成為下一層的輸入。

上圖的五個層次不是彼此獨立的功能清單,而是一條連續的資料流。下面依序說明每一層要完成的工作。
我們會選擇具有清楚取得方式、固定版本與使用規範的急診資料。每個欄位都要說明定義、單位、缺失情形,以及它在檢傷當下是否已經可知。
規則不能只被切成互不相關的文字片段。每個知識單元需要保存來源、章節、主訴類別、急迫級數、生命徵象門檻與版本資訊,才能在輸出錯誤時回頭檢查。
本系列會逐步比較四類設計:
模型需要輸出固定欄位,包括候選級數、引用規則、判斷理由與警示。系統也會保留推論軌跡,也就是從接收資料、找到規則到產生結果的過程紀錄。
急診檢傷是一種序位分類問題。序位分類是類別具有先後順序的分類問題;例如第一級與第二級相鄰,但第一級與第五級相差很遠,不能把五個級數當成彼此毫無關係的名稱。
因此,我們不只計算整體正確率,也會檢查:
可重現研究(Reproducible Research)是指第三方能依照清楚的資料說明、程式與設定,重新建立流程,並檢查結果如何產生。
可重現不等於把所有資料上傳到網路。醫療資料可能受到資料使用協議、隱私規範或授權限制。遇到不能公開的內容時,程式碼儲存庫(Code Repository, repo)應提供合法取得方式、欄位結構、處理程式與驗證方法,而不是把受限制資料一起公開。
本專案的每個結果,至少要能回到四個層次:
後續每個實作步驟都會按照相同順序說明:
這樣安排的目的,是讓第一次接觸醫療人工智慧(Artificial Intelligence, AI)或資料工程的讀者,也能知道每一步存在的理由,不必靠猜測補上中間過程。
下圖是完整路線圖。五個階段依照專案真正需要的順序排列,前一階段的產物會成為下一階段的輸入。

上圖把 30 天分成五個前後相依的階段。每個階段都會留下可供下一階段使用的產物,而不是只完成一篇獨立的概念介紹。
這個系列不只會留下 30 篇文章,也會逐步建立以下產物:
每個產物都必須回答三個問題:輸入是什麼、如何產生、如何驗證。若一個成果只能展示、不能說明產生過程,就還不算完成。
模型輸出只能作為候選與證據提示。真正的臨床檢傷仍需要合格醫療人員依現場狀況判斷。
整體正確率高,不代表危急病患一定不會被低估。本系列會另外檢查危急級數召回、檢傷不足方向與跨多級錯誤。
Repo 只保存允許公開的程式、設定、欄位結構、合成測試資料與彙總結果。受資料使用規範限制的內容不會上傳。
Day 01 完成的是問題定義與專案路線,不是模型實驗。資料與模型結果必須等實際執行並通過驗證後才能報告。
不同制度雖然都可能使用五個級數,主訴分類、判定規則與標籤意義仍可能不同。更換資料時,必須同步說明它對應的制度與規則。
建議從 Day 01 依序閱讀。先掌握開場案例、詞彙表、流程圖與本日小結,再決定是否深入程式細節。
不要跳過檢傷制度、資料治理與資料洩漏。這些限制會直接決定程式能使用哪些欄位,以及測試結果是否可信。
可以特別留意研究問題、控制變因、基準方法、消融實驗、安全指標與不確定性估計之間的對應。
可以協助檢查主訴、生命徵象、急迫程度與規則解讀是否符合臨床語意。系統會保留規則來源與推論軌跡,讓專業人員能逐步檢查。
Day 01 完成了三項基礎工作:
你可以用下面三個問題檢查自己是否掌握本篇內容:
如果三題都能回答,就已經具備進入 Day 02 所需的前置知識。
這 30 天,我們會從急診檢傷問題出發,逐步完成資料、規則知識庫、檢索、語言模型、實驗與安全評估。
最重要的原則是:
縮寫不早於解釋,步驟都有輸入、輸出與驗證,計畫不提前寫成成果,每個結論都能回到資料、設定與證據。
完整專案與實驗規劃可參考根目錄的 README。
Day 02 會暫時放下模型,回到真正的問題現場:急診為什麼需要檢傷分類?
我們會從有限醫療資源與病患等待順序開始,逐步解釋五級檢傷、檢傷不足與檢傷過度,並說明為什麼急診檢傷不能被當成一般的五類分類問題。