FHIR-RAG-MEDS:把 HL7 FHIR 接上 RAG 大模型,做出個人化的臨床決策支援
醫療大模型只吃靜態訓練資料,拿不到病人即時資料也跟不上指引更新。FHIR-RAG-MEDS 用 SMART on FHIR 即時抓病人摘要,再向量檢索實證臨床指引,讓地端 Llama 8B 產生個人化且符合指引的建議,成績全面勝過 Meditron、BioMistral、OpenBioLLM。
論文:Kabak et al., "FHIR-RAG-MEDS: Integrating HL7 FHIR with Retrieval-Augmented Large Language Models for Enhanced Medical Decision Support"(MDPI AI 2026;作者來自土耳其 SRDC 與西班牙 Albacete 大學醫院/CIBERFES)
開源實作:github.com/srdc/fhir-rag-med-interpret
一句話總覽
醫療大模型(Meditron、BioMistral、OpenBioLLM)只會吃靜態訓練資料,拿不到病人即時資料、也跟不上指引更新。FHIR-RAG-MEDS 把 HL7 FHIR 病歷接上 RAG 檢索增強:用 SMART on FHIR 即時抓病人摘要,再去向量資料庫檢索「實證臨床指引」,讓地端 LLM 產生「個人化且符合指引」的建議——成績全面勝過上述醫療大模型。
想解決的問題
- 把實證指引(evidence-based guideline)落地成個人化臨床決策支援(CDS)極耗人力:像 CAREPATH 這類整合照護專案,光是指引分析就要 3–6 個月,CDS 開發與驗證再 3–6 個月。
- 醫療 LLM 的天生限制:靠靜態訓練資料、無法動態更新知識、拿不到病人個案資料 → 建議可能過時、缺脈絡、不貼合個人。
- 單純 RAG 能把回答「接地」在實證來源、減少幻覺,但真正的個人化需要結構化存取 EHR(電子病歷)——這正是這篇補上的缺口。
系統架構(三個核心階段)
flowchart LR
subgraph PRE["① 前處理 Preprocessing"]
G["實證指引<br/>(PDF/Doc/HTML)"] --> CLEAN["清洗成純文字"]
CLEAN --> CHUNK["切塊<br/>(1200字, 重疊100)"]
CHUNK --> EMB1["mxbai-embed-large<br/>產生向量"]
EMB1 --> VDB[("Chroma 向量庫<br/>cosine 相似度")]
end
subgraph RET["② 資料檢索 Data Retrieval"]
FHIR[("HL7 FHIR Server")] -->|SMART on FHIR / OAuth2| BUNDLE["FHIR Bundle<br/>(人口/條件/用藥/觀察)"]
BUNDLE -->|Llama 3.1 8B| SUMMARY["文字化病人摘要"]
end
subgraph EXE["③ RAG 執行 RAG Execution"]
Q["臨床醫師提問"] --> MERGE["合併摘要+提問"]
SUMMARY --> MERGE
MERGE --> RETR["檢索 k=4 指引塊"]
VDB --> RETR
RETR -->|Llama 3.1 8B / Ollama| ANS["個人化、符合指引的建議"]
end
- 前處理:指引文件清洗 → 用 Langchain
RecursiveCharacterTextSplitter切塊(1200 字、重疊 100)→ Ollamamxbai-embed-large嵌入 → 存進 Chroma 向量庫(用 cosine 相似度,適合語意搜尋)。 - 資料檢索:透過 SMART on FHIR(OAuth 2.0 授權)即時抓取病人的人口學、條件、用藥、觀察等資源,組成 FHIR Bundle,再用 Llama 3.1 8B 把 JSON 轉成「文字化病人摘要」(選 Llama 3.1 8B 是因為小、可地端、護隱私)。
- RAG 執行:把病人摘要與醫師提問一起向量化,檢索最相近的 k=4 指引塊,連同摘要餵給地端 Llama 3.1 8B,生成回答。整套可在本地網路內跑,機敏病歷不外流。
評估設計
- 案例:歐盟 CAREPATH 多重共病整合照護指引的子集——失智(MCI/MD)、COPD、高血壓、肌少症。由醫師專家組出 70 組虛構 Q&A 當 ground truth(不涉真實病人)。
- 文字指標:BERTScore(語意,主指標)、ROUGE-L(關鍵術語涵蓋)、METEOR(容許語言彈性)。刻意不用 BLEU——對醫療文字過於嚴苛、懲罰同義改寫。
- LLM-as-Judge:Prometheus 2(微調過的 Llama 3.1 8B 評審,1–5 分)+ RAGAS(context precision/recall、answer relevancy/correctness/similarity、faithfulness)。
- 人類評估:3 位老年醫學專科醫師,5 分量表。
- 對照組:Meditron、BioMistral、OpenBioLLM、原生 Llama 3.1 8B。
主要結果
FHIR-RAG-MEDS 在四個指引、所有文字指標上全面勝過所有基線模型。
| 指引 | Prometheus 2(FHIR-RAG-MEDS / 最佳基線) | BERTScore F1 | 醫師平均分 |
|---|---|---|---|
| 失智 | 4.00 / 3.50(BioMistral) | 0.637 | 3.67(±0.15,最低,個案最複雜) |
| COPD | 4.38 / 4.15(OpenBioLLM) | 0.631 | 4.38(±0.12) |
| 高血壓 | 4.45 / 3.51(BioMistral) | 0.649 | 4.45(±0.10,最高) |
| 肌少症 | 4.36 / 3.91(Llama 3.1 8B) | 0.737 | 4.36(±0.14) |
- RAGAS 表現強:answer similarity 0.908–0.942、context precision 高達 1.000(肌少症)、faithfulness 0.767–0.859。檢索到的脈絡高度相關、回答對指引忠實。
- 自動指標可信:三位醫師一致性 Cohen's κ = 0.79(高度一致);自動分數與醫師分數相關 Pearson r = 0.85(p<0.01)——驗證自動評估框架可當可靠的輔助工具。
- 誠實揭露的缺口:即使語意正確,仍有 12% 的回答被醫師標為「缺乏具體可執行建議」。
限制與未來方向
- 70 個案是虛構 Q&A,非真實臨床個案 → 外部效度受限;未來要用回溯性/前瞻性真實個案驗證。
- 技術面:continual learning(讓系統即時吸收新指引)、RLHF(用醫師回饋微調、降偏誤)、explainability(在建議中明確標出所引用的指引段落,提升信任與可問責)。
為什麼值得關注
這篇示範了一條「地端、護隱私、符合指引」的個人化 CDS 路徑:SMART on FHIR 負責安全地把病人資料接進來,RAG 負責把回答錨定在實證指引上,地端 Llama 8B 負責生成——三者各司其職,且全程可在醫院內網跑完。
對照本 wiki 的同主題:本篇與〈SELSM:狀態增強邏輯技能〉是一組互補的「地端醫療 AI」——FHIR-RAG-MEDS 偏「讀」(檢索病人資料 + 指引、生成建議,不寫病歷),SELSM 偏「寫/動作」(GET+POST,靠技能蒸餾完成會改動狀態的 FHIR 任務)。兩篇都用地端 Llama/Ollama、都靠 FHIR 接病歷、都以隱私為核心設計。
延伸閱讀
- 〈SELSM:用「狀態增強邏輯技能」打造可地端部署的醫療 AI 代理人〉——同為地端醫療 AI,偏「動作/寫入」面
- 〈FHIR 用 OAuth2 + PKCE 交換資料的運作機制〉——本篇 SMART on FHIR 授權的底層
- 〈台灣跨院 FHIR 互通:HIE 聯邦式架構〉——資料互通是個人化 CDS 的前提