l

2023年2月7日 星期二

與ChatGPT聊天(1)

February 07 20:57~22:15

▲ChatGPT官網首頁畫面

 

前言

ChatGPT自從去年11月推出以來引起很大的關注,原本Teddy對於這方面的議題是沒有涉略,但上周五在會議中聽鄭老師(Teddy的指導教授)分享他使用ChatGPT的經驗,引起Teddy對ChatGPT的興趣。

Teddy完全不懂AI,對於ChatGPT背後的運作原理也不了解。單純以軟體開發人員的身分,從軟體設計與學習的角度,分享Teddy使用ChatGPT的經驗。

***

幫我寫合約

最近這陣子Teddy與ezKanban團隊在研究以驗收測試加上Design By Contract(DBC)取代傳統驗收測試加上單元測試來確保軟體品質的方式,於是Teddy就想考考ChatGPT對於寫合約的能力。

 

Teddy請ChatGPT針對Stack class產生push method的合約,結果如下。如果不懂DBC的人,也無法判斷產出結果是否正確(廢話XD)。如果略懂DBC的人,可能會覺得ChatGPT產生的合約,已經與一般教科書中的參考答案相去不遠,頂多少一個stack not full的precondition。

 

***

 

但Teddy一眼就看出來,上面的程式少了一個很重要的postcondition,於是Teddy繼續追問:「postconditions好像不完整」。沒想到ChatGPT自己就補上了一條新的postcondition:

@post For all i in [0, list.size() - 2], list.get(i).equals(old(list.get(i)))

這一條postcondition想表達「除了stack top元素以外,stack內容在push之前與之後的其它元素要相等」,換句話說push只可以將新元素放到stack頂端,不可動到原本stack內部的其它元素。。

 

***

 

看到這裡,鄉民們覺得ChatGPT是不是很厲害?但請仔細看它產生的程式碼,其實有bug。什麼bug,Teddy再給它一個提示:「list.get(i).equals(list.get(i)) 不能確定現有元素沒有被改變,你必須儲存 old list」

這一次,ChatGPT產生的程式「看起來」就算完整了。

 

試到這裡Teddy覺得很奇怪:很明顯地ChatGPT是知道push contract的「完整答案」,但為什麼第一次只給了一個常見但不完整的答案?是為了節省運算資源嗎?還是有什麼其他原因,就不得而知

 

***

老師在講你有沒有在聽?

正當Teddy以為ChatGPT已經「學會」如何回答這個問題,於是Teddy重新再問一次,而且強調「The generated contracts should be as accurate and correct as possible. 」,提醒它不要忘了第三條postcondition。

但是,ChatGPT依然故我,還是回答只有兩條合約的答案。

 

***

 

Teddy還是好心提問:「Is the postcondition correct?」但這次ChatGPT居然回答Yes。之前Teddy問:「postconditions 好像不完整」,ChatGPT就補上第三條合約,但問它「postcondition是否正確?」,可能它覺得這兩條postcondition是正確的,所以回就答Yes。

 

對話至此,這個問題Teddy的懶得繼續問下去了。

***

感想

如果你對於詢問ChatGPT的問題心中已有答案,可以分辨ChatGPT產生結果的正確性,那麼它不失為一種快速代替人類產出文字的好工具。但是如果你對於問題的答案沒個準,那麼盲目相信ChatGPT的產出結果是很危險的。因為它才剛剛問世,對於它產生的結果的「信心指數」還是個謎。如果你在教科書上學到一個知識,基本上信心指數很高,你可以基於這樣的知識繼續累積其他更大的知識體系,但現階段ChatGPT應該還是達不到這種等級的信心要求。

從Teddy的角度來看,經過與ChatGPT對話之後獲得正確答案,自然期望相同問題再問一次,就可以得到上次對話的結果,但ChatGPT卻沒有滿足這個期待。這也是另一個令人失望的地方,因為原本想把它「訓練」成自己的小幫手,但是訓練過後它又忘了,那就無法將使用者的個人知識累積在ChatGPT上面。

Teddy覺得平均而言,ChatGPT對於問題的理解能力與專業知識量應該已經狂勝個別的人類。只要提升ChatGPT產出結果的正確性,還有就是請它做到「知之為知之,不知為不知」,不要不懂裝懂,這樣子可用性就更大,更值得依賴它用來解決特定的小問題。

***

 

友藏內心獨白:受過專業的廢話訓練。