2023 年一位美國律師在準備訴訟資料時,請 ChatGPT 幫忙找相關判例,ChatGPT 很快列出六個案例,案件名稱、判決內容、引用格式一應俱全,看起來完全不像臨時編出來的,律師沒有進一步查證,就把這些案例寫進提交給法院的文件。
法院一查發現六個案例全都不存在,在準備時律師曾經一度起疑,還回頭問 ChatGPT:「這些案例是真的嗎?」ChatGPT 還很有自信的回答:「是真的」。
最後律師因引用虛構判例遭法院裁罰 5000 美元,也就是 Mata v. Avianca 案。



圖片來源:Schwartz 宣誓書
上述的範例是典型的 AI 幻覺,它麻煩的地方是不只會答錯,還會答得很像真的,它可能引用不存在的論文、捏造從未發生過的判例、編出一本根本沒出版過的書,並且替自己的答案補上看似合理的解釋。
這類聽起來很有道理、卻不一定是真的的輸出,在 OWASP LLM Top 10 裡被獨立列為 LLM09:Misinformation。
理解 LLM 為什麼會胡說八道之前,我們先退一步,搞清楚 AI、ML、DL、生成式 AI 到底是什麼關係,這幾個名詞常常一起出現,也很容易被混在一起,但其實它們比較像一層包著一層的同心圓。

最外層是 AI(Artificial Intelligence,人工智慧),只要目的是讓電腦完成原本需要人類智慧才能處理的事情,都可以算是 AI,例如自然語言處理、電腦視覺、機器人、專家系統等,都屬於 AI 的範圍。
AI 裡面有一塊叫做 ML(Machine Learning,機器學習),它和傳統程式最大的不同在於工程師不再把所有判斷規則一條一條寫進程式,而是準備資料,讓模型自己從資料中找出規律。
例如我們給模型幾萬張已經標記好「貓」和「狗」的照片,它會慢慢學會怎麼分辨兩者,等之後看到沒見過的新照片,也能做出判斷。整個過程裡不會看到任何一條寫著「貓的耳朵是尖的」或「狗的鼻子比較長」的規則,模型留下來的只有一大堆數值,也就是我們常說的權重(Weights)。

再往裡面一層,就是 DL(Deep Learning,深度學習),它本質上還是 Machine Learning,只是改用多層神經網路來學習資料,因此需要更多資料、更多算力,但也能處理更複雜的問題,近年來大家熟悉的生成式 AI(Generative AI),就是 Deep Learning 的應用之一。
生成式 AI 和過去許多 AI 最大的差別,在於它不只是分類或判斷,而是開始創造。
以前的 AI 處理的是:
生成式 AI 處理的是:
而 LLM(Large Language Model,大型語言模型),就是生成式 AI 裡專門處理文字的模型。
一路看到這裡就可以知道,LLM 回答問題靠的是生成,不是查詢,它不會去哪裡查出正確答案,而是根據學到的語言模式,一步一步生成看起來合理的文字,而這種用生成代替查詢的本質,正是幻覺會出現的原因。
那 LLM 到底怎麼決定接下來要說什麼?現在主流的 LLM 建在一種叫 Transformer 的深度學習架構上,它處理文字的流程,可以拆成幾個齒輪:
king 和 queen 會比 king 和 table 近。which 指的是 mat,就算它們隔了好幾個字。消化完這些齒輪之後,模型會根據前面所有的文字,預測下一個最可能出現的 token,接上去,接完之後把「原本的輸入 + 剛剛生成的 token」一起當成新的輸入,繼續預測下一個 token,這個過程會不斷重複直到生成完成。這種一步一步生成文字的方式,叫自迴歸(Autoregressive)生成。
接龍迴圈的運作流程如下:

看第 3 與 第 4 步就知道模型從頭到尾都在做「猜下一個字」這件事,它沒有「不知道」的選項,也沒有開關會在它不確定的時候停下來說「這題我沒把握」,只要文字接得夠通順,它就會一路接下去,所以回答流不流暢和內容正不正確是兩件不同的事情。
這也解釋了為什麼 LLM 很擅長文法、語氣、拼字,卻容易在生日、年份、法條、論文引用等沒有明顯規律的事情上出錯,OpenAI 在 Why language models hallucinate 中提到,這類無法單靠語言模式推斷的零散資訊,就是幻覺最容易發生的地方。
換句話說,幻覺不是 LLM 沒調好的 Bug,是用機率接龍生成文字時與生俱來的特性,可以透過更好的模型、更多資料、更好的提示詞或 RAG 降低發生機率,但無法完全消失。
如果幻覺只是聊天時偶爾答錯,頂多影響使用者體驗,但當 LLM 被接進產品、系統和工作流程後,一句看似合理的回答,就可能演變成財務、法律,甚至資安事件。
先看一個真實案例,加拿大航空(Air Canada)的客服聊天機器人,曾經告訴一位乘客:「你符合喪親票價的退款資格。」乘客照著指示購票、申請退款,最後卻被航空公司以不符合政策為由拒絕,事情一路鬧上法院,法院認定航空公司必須對自家網站提供的資訊負責,包括聊天機器人的回答,最後判決航空公司需要賠償乘客的損失,細節可以參考 BBC 的報導。
對資安人和開發者來說,更值得注意的是另一種可怕情況,假設你請 LLM 幫你寫一段 Python 程式,它生成了下面這段程式碼:
from viviantools import pwn
pwn('flag')
接著,你照著它的建議執行
pip install viviantools
結果會因為 vivanitools 套件根本不存在,而顯示 Error,如果事情停在這裡,頂多只是浪費幾分鐘。

但如果換到攻擊者視角,這裡藏著供應鏈攻擊(Supply Chain Attack)的路,攻擊者只要搶先把這個名字註冊到 PyPI,再放上藏有惡意程式的套件,之後直接相信 AI、執行 pip install 的人,就會把惡意程式裝進自己的環境,這就是近年開始受到關注的 slopsquatting 攻擊。
這不是單純的理論風險,在 2024 年就有安全研究員實測,發現 ChatGPT 會反覆建議一個不存在的套件名,他把一個空套件用那個名字上傳到 PyPI,三個月內被下載超過三萬五千次,其中還包含來自大型企業的開發者(InfoWorld 報導)。
大規模研究也分析了數十萬筆 AI 生成的程式碼,發現開源模型生成的內容裡約有兩成引用了不存在的套件,讓這種供應鏈攻擊更有可乘之機。
一台只會猜下一個字的機器,本來就分不清它猜出來的套件名是真的存在還是憑空捏造,攻擊者只要在它猜錯的地方守株待兔就好。
理解 LLM 的運作方式之後,就可以知道幻覺沒辦法完全消除,但我們可以降低它造成的影響。
如果你是使用者,最重要的一件事是不要把 LLM 當成事實來源,尤其是人名、日期、數字、法條、引用來源,一律自己去原始出處交叉驗證一次,LLM 很適合幫你整理資料、建立初稿、提供方向,但最後的查證,還是要自己完成。
如果你是開發者,就要把 LLM 的輸出當成不可信的輸入,它跟使用者從表單送進來的資料沒有差別,使用之前都要驗證,而不是直接相信或執行。
很多人第一次接觸 LLM,都會把它當成一個很厲害的搜尋引擎,但理解它的運作方式後,就會知道 LLM 回答問題靠的是生成文字,不是查詢答案,這個觀念很重要,因為後面很多 AI 攻擊手法,都和它如何理解上下文、如何生成內容有關。
今天先把基本觀念理解,下一篇我們看看 AI 的另一面:AI 是最好的助手,也是攻擊者的新武器。