隨著人工智慧技術的普及,愈來愈多事情都可以交給AI來協助,寫程式當然也不例外;日前我看到臉書上有一位工程師在一篇貼文中,討論人工智慧的寫程式功能是否有可能取代人類工程師;但是底下的留言,卻好像有很多「意見」反對這些工程師。其中最多的敘述不外乎就是這一句:
你們工程師真的遇過「問了AI好多次都還是錯」的情形嗎?

現在的AI雖然在補全程式碼邏輯、尋找語法錯誤等方面,表現已經可圈可點,但卻還是有一群人在抱怨它精度的問題;先姑且不論模型之間的不同造成的影響,我覺得其實可能是這些反對者沒有想過他們使用AI來人機協作的方式是否正確。
從我開始自己學習 Python 到現在,也才剛好滿半年的時間,但是我也遇過好幾次「詢問人工智慧好幾次都不如預期」的挫折;但是最後都發現問題其實不是出在人工智慧,而是傳達過程中不必要的假設與誤會,以及程式開發者自己的問題,諸如沒有保持良好的程式碼編輯習慣等。以下將綜合我實際遇過的事件與小範例,協助各位檢視與AI互動來編寫程式碼的過程。如果你也正在疑惑「為什麼請AI來寫程式都錯」的話,這篇文章也許可以協助你。
新手最容易踩到的四個雷區
雷區 1 :邏輯或拼字錯誤導致 AI 無法協助

我曾經在某一間實作影像辨識的生物資訊公司實習過;當時我正在做的 Python 專案,目標是要能正確地將圖片中的四個重疊的區域找出來,並根據區域的面積等基礎資訊,輸出文字到圖片上以協助辨認。
所以,那一段程式碼中就包含了許多變數,再加上我當時並沒有對變數命名習慣的正確認知,於是就有兩個變數被我命名成只差在幾個英文字母(想像一下img_feat
與img_feta
的差別)然後又反反覆覆使用了好幾次。
有次在檢查的時候,經驗豐富的前輩突然跟我說這些數據不符合預期,要求我從頭到尾再檢查一次。於是我從輸入圖片座標資訊的 JSON檔案、 Python 虛擬環境、程式碼裡的每個自訂函數,都請AI來協助檢查。由於我一開始並未察覺變數名稱有誤,所以也沒告訴AI這個問題;這樣檢查了好幾回後,輸出的數據不是沒有變,就是變得更偏離前輩預期的數據。最後迫於進度壓力的我,只好把每一行程式碼都跟自己解釋一次,就有點像跟自己Code Review那種感覺。
就是在這個時候,我發現有個變數怪怪的,跟我印象中應該在這裡的變數不一樣;把它的拼寫錯誤改回來,產出的數據終於讓前輩信服,我也才能安然度過那次危機。
上述是拼字問題;而邏輯問題也是AI會預設「你是對的」的一個環節。請看以下範例:
def is_prime(n):
if n < 2:
return False
for i in range(2, n):
if n % i == 1:
return False
return True
num = 9
if is_prime(num):
print(f"{num} 是質數")
else:
print(f"{num} 不是質數")
這是一個很經典的錯誤案例;開發者試著使用「餘數與整除」的概念來判斷一個數字是否為質數;這段程式碼可以正常輸出結果,但它輸出的內容是:「9 是質數」
然而,依據質數的定義, 9 因為是 3 的倍數,換言之它的因數不只有 1 與自身,還有 3 這個數字,所以不為質數。仔細看會發現這位開發者輸入的判斷條件是n % i == 1
,表示只要 n 不小於 2 ,那麼 n 正好可以通過條件而回傳 True ,進而輸出「 9 是質數」的錯誤結論。
在這個案例中,其實只要將n % i == 1
改為n % i == 0
即可輸出「 9 不是質數」,但請AI除錯時,即使是這樣的錯誤,AI也會因為假設使用者的邏輯正確,在沒有特別提及的前提下直接跳過,造成明明錯誤近在咫尺,卻看不見的窘境。
AI 不會主動懷疑你的邏輯錯了,它只會幫你「沿著你的邏輯除錯」
雷區 2 :錯誤說明過於簡略,AI 難以判斷
想像一下:今天有個人突然拿了一支手機,跟你說:它壞掉了;但是完全沒有更多的錯誤描述、背景資料。你只能檢測一次,並在短時間內協助這位客戶找出所有潛在問題並完全修正。如果你抓不出問題,或是再要求更多的錯誤描述,客戶就直接一星負評,這樣的手機維修服務你要做嗎?
同樣的道理,把「修東西的人」換成AI、手機換成程式碼,應該就很好理解了。如果你直接貼上了一段程式碼,跟AI說「為什麼這段程式碼不能運行?」且沒有錯誤訊息、執行畫面、預期輸出等資訊,這樣AI也只能有幾分描述、猜幾分錯誤,結果就是抓不到你真正的問題。
AI 不會通靈,無法感覺到你螢幕上的錯誤訊息和你的心情
雷區 3 :將 AI 當成萬能的程式機器
現在沒有AI可謂萬萬不能,但是「有了AI也不是萬能」。
這篇文章所引述的臉書貼文,底下的留言吵成了戰場;原因大致是因為該位使用者(下文簡稱他『S君』)「只會用 GitHub Copilot 來讀取所有程式碼」;然後要求它寫了一些測試用的程式碼,並且「期待它會自己先內部執行過來驗證」;最後當AI「可能」因為傳達上沒有講清楚導致AI給的程式碼不完全正確,這時S君又請AI直接修改,後果就是整個邏輯直接被「砍掉重練」讓S君不開心。
雖然從S君留言中的有限資訊來看,我無法得知他的具體操作流程為何,但是這樣期待AI要做完整套的話,某種程度上也不切實際。
AI 是工具,不是你腦袋的替身。
雷區 4 :只複製貼上,忽略背後原理
之前我曾經在這篇文章中分享過我在大學做專題的事情:
當時因為對 Python 的基礎認知不足,而且又有結果產出的某種壓力,造成我必須使用複製貼上的方式,快速完成程式碼的部分;但是後續我竟然發現:複製貼上的程式碼在參數設計的方面出現單位錯誤,造成產出結果不如預期。
想像一下:如果我這時候只會問AI「為何它只會跑出我不要的東西」然後完全也不知道函數的算式中,這些參數的實際意義,那麼就算AI能夠神準抓出問題並修正,我看到的也只有那張結果圖,但是卻完全不知道它的意義,這樣有學 Python 也等於沒學一般。
複製貼上有時也是最貴、最難償還的技術債
如何避免踩到新手地雷
秘訣 1 :釐清需求再撰寫程式碼

撰寫程式碼本來就是為了解決我們遇到的問題、滿足我們的需求;不論是請 AI 協助或自己撰寫,了解你要解決的問題本質都是最重要的第一步。
現在的AI模型通常對於我們所用的自然語言,理解能力都已經十分優秀;所以如果連續五次,AI都沒有辦法解決你程式碼的問題,請先離開電腦,好好想一想寫這段程式碼、每一個函數、每一個變數的意義與目的。把它寫成一個脈絡,再一五一十告訴AI,遠比雞同鴨講要好。
秘訣 2 :主動提供錯誤位置與背景資訊
一段完整的程式碼,最多或包含這些部分:
輸入-處理-邏輯-主功能-輸出-環境
- 輸入(例如讀取檔案)
- 處理(例如欄位過濾、資料清理)
- 邏輯(例如 if、for 等條件與流程)
- 主功能(例如建模、繪圖、訓練)
- 輸出(例如圖表、文字、csv 檔)
- 環境(例如套件版本、作業系統)
當中假設是「輸入」這個環節出問題,例如檔案路徑錯誤之類,後果就是程式碼整段崩潰,然後跟你報告FileNotFoundError
,最後沒有結果產出。
這時候我們看到的是「程式碼跑不出來」還是「錯在哪個環節」對於跟AI人機協作就至關重要;清晰地給出問題可以讓 AI迅速地縮小問題範圍,避免使用AI幻覺做出不必要的錯誤假設,回答的精確度也就跟著提升。
以輸入的問題為例:
錯誤做法:「(貼上Traceback message)這段程式碼不能輸出,請檢查」
正確做法:「我用 pd.read_csv
讀資料進來,但輸出欄位不是我預期的;我預期它應該是...(附上表格的截圖或是cat
指令的結果)但是實際輸出是...,並且有Traceback訊息如下:(許多程式編輯工具都有複製完整錯誤訊息的功能,請善用)」
再以環境的錯誤為例:
錯誤做法:「為什麼xxx
套件不能在我的電腦上運行?」
正確做法:「我的環境是 Python 3.10、WSL 2 Ubuntu 24.04 LTS,用的是 seaborn 0.12,不確定這個參數是否支援」
秘訣 3 :不要害怕發問
我們也可以練習將AI當成你的共同開發者;試著向AI進行一場Code Review,詳細解釋這些程式碼的流程應該要如何運作;這樣AI就會第一時間檢查你說的邏輯是否有正確吻合你程式碼裡的內容。
如果真的因為進度壓力,沒有辦法先通盤了解所用的套件,它所包含每個參數的意義,那麼等AI生成完程式碼以後,當發現有問題(比如:主功能問題)時,除了比照上面的詢問方式之外,也可以詢問AI這個套件中參數的意義、把它們一一調高或調低會如何影響輸出之類。
總結
與 AI 溝通是在「協作」不是在「指派工作」。
與其說 AI 是你的下屬,它更像是一位與你有合作關係的同事(或同學);你會如何不要為難彼此,就用那個原則去對待AI。再者,你越能清楚說出問題的背景、需求與症狀,它就越能精準幫你拆解問題。
還有一句話叫做「教學相長」,在我們花時間跟 AI 解釋你的問題、程式碼邏輯的同時,其實也是默默在培養我們寫程式、抓錯誤的能力與直覺。當這樣的能力慢慢變成你的直覺時,就算AI再準確,也可能沒有我們的反應要快。
有時候,錯誤不是 bug,是學習的訊號。
能找到錯的原因,比永遠不犯錯更重要。
最後,有一部YouTube影片我很喜歡,有助於各位與AI溝通,推薦各位看看:
【為什麼別人家的 ChatGPT 這麼聰明,我們家的整天跟我雞同鴨講??
搞懂「提示工程」讓你成為專業的 AI 溝通師! | PAPAYA 電腦教室】
如果喜歡這篇文章的分析,請按個喜歡;每一個喜歡,都是我繼續的動力。
若有發現筆者的邏輯需要修正,請不吝指教;每一個建議,都是我成長的地基。