「ChatGPT即將取代軟體工程師」,是最近很火的話。
於是我利用一系列題目與ChatGPT互動,測試他是否真的可以取代軟體工程師。首先,我有一張影像原圖如下,含有兩個箭頭圖案,不過都略有些雜訊(真實世界的數據)。

我想讓ChatGPT做的事情有:
找輪廓 平滑處理 旋轉 縮放 找出直線區間 找出轉折點
接下來會按照以上順序,節錄我與ChatGPT的部分對話與我實測的結果。
1. 找輪廓
當人類看到原圖,立刻可以知道圖中包含了兩個箭頭。但對電腦而言,這張圖只是一個數字矩陣,白色區域座標的值都是255,其餘的值都是0。為了要取得影像中的物件,我打算先對整張影像做一個「找輪廓」的動作。於是我開了要求:
🌹 幫我寫一個python程式,輸入一張一個通道的影像,輸出影像中偵測到物件之輪廓點集合
ChatGPT立刻給了我一段程式碼(下圖左)。而這段程式碼也確實跑出了我要的結果(下圖右),綠色曲線即為ChatGPT程式所輸出的兩個輪廓。

ChatGPT的做法是使用OpenCV庫的findContours函數(上圖紅匡處)來得到我要的結果。但這樣嚴格說起來就不是ChatGPT自己寫「找輪廓」這個程式了,他是「使用」別人寫好的程式來達到這個功能。然而我就是想讓ChatGPT自己寫看看,所以給了另一個要求:
🌹 可以不要使用OpenCV庫嗎?
於是ChatGPT改用了另一個庫 ...... 

我再次要求ChatGPT都不要使用任何第三方庫。ChatGPT再次給了我一段程式碼
🌹 可以不要使用第三方套件來找輪廓嗎
但是這一次程式碼不只無法跑,而且細看他寫的Code,發現他已經「裝死放棄」了。

不過,找輪廓這個演算法本來就很複雜,我從來沒相信ChatGPT可以寫出來過,只是想要看看他怎麼反應而已。於是進入下一題。
2. 平滑處理
我們就前面輸出的輪廓(點集合)來用吧。不過真實世界的訊號常常具有一些雜訊,因此常常會讓訊號經過平滑處理,於是我想看ChatGPT怎麼對封閉曲線做平滑處理。
🌹 輸入一個二維平面的封閉點集合,輸出一個經過平滑處理的新的點集合
ChatGPT給了我一個程式碼,成功達到我要的功能了!右圖黃線即為其輸出。

3. 旋轉
接下來,我想請ChatGPT對物件進行旋轉。
🌹 輸入一個二維平面點座標集合,輸出相對於其質心旋轉一個角度的新的點集合
ChatGPT給了我要的功能。不過因為他使用了套件來完成,於是我再次給了無理要求
🌹 可以不要使用numpy嗎 (numpy是套件名稱)
正確地給了我要的功能!兩個箭頭都順時針旋轉了45度。ChatGPT對於矩陣運算或座標轉換挺在行的!

4. 縮放
接下來,我想請ChatGPT對物件進行縮放。
🌹 輸入一個二維平面的封閉點集合,輸出以質心為中心進行放大或縮小的新的點集合
ChatGPT不只給我程式碼,還分解了他的步驟。如果不考慮經過縮放之後的點集合可能重複或未必相鄰,ChatGPT再次給了我正確功能!

5. 找出直線
接下來,我想請他做比較困難的題目。找出輪廓的點集合中,具有「直線」特徵的區間。於是我這麼問ChatGPT:
🌹 輸入一個二維平面的點集合,輸出點集合當中,接近直線的區間
看他的描述,我想他是有理解我的意思的,因為他提到的「霍夫變換」,我經過Google發現這真的是一個檢測影像中直線特徵的演算法。

只是細看他給我的程式碼後,我發現ChatGPT真的是來亂的!也許是我之前有要求他不要使用套件的關係吧,於是我這次允許他使用套件來找直線,看他怎麼使用霍夫變換:
🌹 這一次,你可以使用套件來做這個題目,你會怎麼做?
這次ChatGPT不是使用霍夫變換,而是使用RANSAC演算法。不過沒關係,我們看他這段程式碼的結果。下圖的紅線是ChatGPT找出路的直線,一個箭頭給一個最佳的直線區間,雖然我原本要的是所有直線區間,但有這個結果我也滿意了。

6. 找出轉折點
最後,我請ChatGPT輸出點集合中的轉折點:
🌹 輸入一個二維平面的點集合,輸出點集合中,轉折的點,可能不只一個轉折點
ChatGPT第一次給我的程式碼看起來合邏輯,但實際上不能用,因為ChatGPT設定只要不是完美地在前兩個點構成的直線上,就歸為「轉折點」,這樣我的箭頭幾乎快要每個點都成為轉折點了!我不死心,再次要求他寫一個可以用的程式給我,他給了我另一段程式碼

這次的結果看起來「好像」好多了,但是細看他的做法後,原來只是把方向分成三類:向前、向左、向右。他的判別方式就是從這三類改變的就是轉折點。他這樣寫,雖然結果看起來好像有點一回事,但實務上還是不能用的!
以上就是我與ChatGPT互動的過程了,如果總結一下其成功與失敗表現可以列如下表:
| 找輪廓 | 平滑處理 | 旋轉 | 縮放 | 找出直線區間 | 找出轉折點 | |
| 不用套件 | X | O | O | O | X | X |
| 使用套件 | O | O | X |
最後我歸納出一些自己看到ChatGPT的 強項:
1. 語意的理解
以我目前的感受,ChatGPT對於語意的理解是最讓我驚艷的。
2. 分解問題
當ChatGPT理解我們的語意後,接著會嘗試分解問題,不過這部分目前都很SOP
3. 善用工程界常用技術
許多的工程常用技術早已有完整與強大的套件可使用,使用方式可能就只是幾行的程式碼。這部分用得好,就是令外行覺得他很神的秘密了~
然而,ChatGPT也有一些 弱點:
1. 複雜的問題無法解
ChatGPT目前都只做比較單純的邏輯,如果遇到比較複雜的,例如真實世界的數據,ChatGPT目前還挺弱的。我已經遇到好幾次ChatGPT開始耍賴裝死的情況。
<- chatgpt="" span="">
有人會說AI會越來越厲害,能解的複雜度會慢慢增加。但我相信地球上存在問題的複雜度也是無上限的,永遠都會存在AI無法解的問題。
2. 不會有創新作法
既然ChatGPT是從大數據中訓練出來的,那麼其能力當然就僅限於「過去的經驗」。(難道是在暗示如果人類都基於自己過去經驗來斷定事情的話,智慧就跟AI沒有很大差異嗎
)
由以上來看,如果我們的專長的是ChatGPT的弱點、或者我們的專長比ChatGPT的專長還強,我們就不用擔心被取代囉!如此,我覺得ChatGPT不只不會取代軟體工程師,反而是來補足軟體工程師弱點的吧...
甚至,當大家都過度依賴ChatGPT,很容易就不會做扎馬步的工作,這時候我們多花一點工夫把馬步扎好了,就是自己與別人的一道鴻溝。千萬別說基本功給ChatGPT寫就可以了,這個基本功就是想要「創新」的起手式喔!
限會員,要發表迴響,請先登入


