所有入門單元免費開放 · 課程內容持續更新中

幻覺與驗證:不要照單全收

AI 有時會編出不存在的套件、用過時的寫法,或寫出只在一般情況下正確的程式。這堂課給你一套五關檢查法,讓你放心使用 AI 的產出。

第 4.5 堂約 13 分鐘

第一堂課我們說過:AI 是在預測「最像正確答案」的文字,所以它寫錯的程式,看起來和寫對的一樣專業。這種自信地產生不正確內容的現象,通常稱為「幻覺」(hallucination)。

上一堂的除錯,處理的是「會報錯」的問題。這一堂要處理更麻煩的:不會報錯,但其實是錯的。

先說清楚:這不是要你不信任 AI,而是要建立一個習慣。就像你請朋友幫忙算帳,算完也會大概看一下總數合不合理。

幻覺在程式裡長什麼樣子

編造的套件或函式

你請 AI 寫一個取得即時匯率的腳本,它可能寫出:

import twrate  # 這個套件可能根本不存在

rate = twrate.get_rate("TWD", "JPY")

名字很合理,用法很直覺,但這個套件可能根本不存在。更常見的是套件存在、函式不存在:真實的套件,搭配一個 AI 想像出來的方法或參數。

過時的寫法

套件會改版,舊的寫法可能被移除或改名。AI 的訓練資料有截止時間,可能還在用幾年前的語法。執行時看到 DeprecationWarning(「這個用法即將淘汰」的警告),或是錯誤訊息說某個屬性不存在,就要懷疑是這個原因。

只在一般情況下正確

這是最難發現的一種。例如一個計算「本月花費」的函式,平常都對,但遇到這些情況就出錯:

  • 這個月還沒有任何紀錄(空資料)
  • 有一筆退款是負數
  • 日期跨年,從 12 月到 1 月

程式沒有報錯,只是默默算出錯的數字。

驗證五關

驗證五關:1 真的存在嗎、2 跑得起來嗎、3 結果對嗎、4 邊界情況呢、5 請 AI 自我檢查

不是每段程式都要過完五關。越重要的程式,就走得越深。

第 1 關:真的存在嗎?

看到不熟悉的套件、函式或參數,花一分鐘去官方文件查。搜尋「套件名稱 + documentation」,確認它存在、用法相符。

第 2 關:跑得起來嗎?

一定要實際執行。看起來沒問題的程式,執行時才發現少了某個匯入,是非常常見的事。

第 3 關:結果對嗎?

用你自己算得出答案的例子去測。例如:

輸入:300 台幣,匯率 4.7
預期:1410 日圓
實際:(執行看看)

如果連簡單的例子都算錯,複雜情況就更不用說了。

第 4 關:邊界情況呢?

刻意餵它「奇怪」的資料:0、負數、空字串、超大的數字、有逗號的 1,000、全形數字。看它是正確處理、給出清楚的錯誤訊息,還是默默算錯。

第 5 關:請 AI 自我檢查

AI 寫程式時是「一路往下寫」,但請它回頭審查時,常常能發現自己的錯。關鍵是要求它用挑毛病的角度看:

請 AI 審查自己的程式

請扮演一位嚴格的程式審查者,檢查你剛才寫的程式:

  1. 有沒有用到不存在、或已經過時的套件、函式、參數?如果不確定,請直接說「不確定」。
  2. 列出至少五個可能讓它出錯或算錯的輸入。
  3. 針對每個輸入,說明目前的程式會怎麼反應。

先不要修改程式,只列出問題。

「如果不確定,請直接說不確定」這句很重要。它讓 AI 比較願意承認自己沒把握的地方,而不是硬掰一個答案。

什麼時候要更小心

情況 為什麼風險較高
冷門套件、公司內部工具 AI 幾乎沒看過,最容易亂猜
最近才改版的工具 訓練資料可能還是舊版
牽涉金錢、日期、時區 小錯誤會造成大問題
會刪除或修改檔案的程式 錯了可能無法復原

遇到這些情況,請 AI 附上它參考的官方文件連結,然後你親自點進去看。AI 也可能給出不存在的網址,所以看連結本身也是一種驗證。

行動練習
  1. 請 Claude 或其他 AI 寫一個函式:輸入一串記帳金額,回傳平均每筆花費。
  2. 先自己想三個你算得出答案的例子,執行驗證。
  3. 再試試邊界情況:空清單、包含負數、包含 0。記下哪些情況出錯。
  4. 用上面的審查提示詞請 AI 自我檢查,比較它找到的問題和你找到的有什麼不同。

讀完了嗎?

標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。

卡住了?讓 AI 當你的家教複製這段提問範本,貼到 Claude 或其他 AI 工具,再補上你卡住的地方。

留言與討論

卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。

留言區即將開放。現在可以先到 GitHub 討論區 發問,或看看 交流頁 的其他管道。