總算來到了第 28 天,今天想要聊一聊的是,醫療軟體如果要使用 AI 來做摘要,我們需要注意什麼呢?
最簡單的作法是:將所有的資料全部傳給大語言模型(LLM),藉由給它適當的 Prompt 來生成摘要,但是採用這種方式有兩個最大的問題:
第一個問題是,如果全權交由大型語言模型(LLM)來處理,有可能在不小心的情況下,將病人的資訊與隱私隨著做摘要的同時一併洩漏出去。
第二個問題是,雖然我們將資料做好隱私處理才傳給 LLM,即使傳送前已經做過隱私處理,降低了個資外洩的風險,接下來仍有另一個問題:模型產生的摘要,不一定符合原始資料。
打個比方,我們預期的使用情境是收集一整個禮拜的資料後,才產生 AI 摘要,也就是說每一天都應該有數據。拿前面血壓 App 的例子來看,假設一天量測兩次,一個禮拜至少會有 14 次的量測值。
可是如果受測者只紀錄到一兩天的資料,若只將這兩天的資料丟給 LLM 去做運算,假如我們沒有預先做前處理,有很大的機會 AI 模型只會以這兩天的結果去做分析,卻忽略掉其實光靠這兩次模型仍然可以整理這一兩天的紀錄,但不能把它寫成整個禮拜的狀況,更不能自行補上沒有量測的日期。。
為什麼會出現這樣的情況呢?因為大語言模型會根據輸入的上下文生成文字,但它產生的內容不一定有資料支持。當資訊不足時,模型可能補出看似合理的解釋,也可能漏掉「資料不足」這個限制。如果沒有另外檢查,這些內容就可能被當成事實。
因此,如果我們的輸入有誤,或是資訊很少、不足,它就會自行產生出一些不適當的回覆,而這些回覆可能是我們沒辦法發現的。
如果要避免 LLM 幻覺,有下列三個方法:
因為模型是依照機率自己生成文字的,若我們能夠給予它足夠的資訊、上下文資訊充足;我們可以把摘要所需的資訊整理清楚,包括觀察期間、預期量測安排、實際紀錄筆數與缺少的日期。這能讓模型知道資料的範圍,但不能保證它一定回答正確,輸出後仍要核對。
譬如:血壓量測的例子,如果希望受測者一個禮拜當中每天都可以量測兩次,所以需要將量測的時間以及數量一併告知大語言模型。大語言模型在收到我們的前提與這些資訊資料時,就可以根據這些資料來做正確的答覆。
像紀錄筆數、日期覆蓋與單位是否完整,這些可以先由程式檢查。若不符合事先定義的趨勢分析條件,就顯示固定的資料不足提示,或只整理已有紀錄,不讓模型自行補出整週趨勢。
譬如說,我們知道受測者本週的血壓記錄不足了,這時候,我們在前處理的時,就可以先把這筆資料判定為「數量不夠」。此時或許就不需要傳給 LLM 作處理,因為我們已經知道這筆資料不符合。
接下來,我們需要調整一下我們的 prompt。
在 prompt engineering 當中,可以讓 prompt 擁有約束力;也就是說我們可以定義 prompt 的角色以及它禁止的事項。
以醫療軟體來說,我們不希望讓 LLM 直接說出疾病的名稱,我們使用 AI 是期待讓它做數據整理與已確認的資料變化說明,但是不會讓它提供一個確切的病因。這個時候,我們就可以將限制寫進 prompt 裡面。
若摘要需要計算平均值或查詢紀錄,可以先由程式或外部工具完成,再把結果交給模型整理成文字。MCP 可以用來連接這些工具,但使用 MCP 並不代表結果一定正確,工具回傳的資料與最後的摘要仍需要檢查。
模型產生摘要後,我們還要核對對象、日期、數值與單位,並檢查是否加入資料沒有支持的結論。若檢查失敗,就回到固定模板或原始紀錄。即使輸出符合指定格式,也不代表內容正確。
不管是醫療軟體或是一般的軟體,在使用 LLM 的時候,我們都需要小心謹慎,避免產生出 LLM 的幻覺。
今天我們介紹了三個解決 LLM 幻覺的方式,其實不外乎就是針對輸入的資料多做一些處理,不要把所有的判斷都交給 LLM。資料不足時,摘要應該把缺口寫清楚。提供上下文、限制 Prompt、接上工具之後,仍要檢查最後產生的內容。