4

與ChatGPT聊天(1)

 9 months ago
source link: https://teddy-chen-tw.blogspot.com/2023/02/chatgpt1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

與ChatGPT聊天(1)

February 07 20:57~22:15

AMWts8BhAZQ9EgGYI2ToW8UudIMVdyMJUtRdCu0Ll5V6TS2HLwjY-WiZyf2HrGs8rAuFIT8e6WnFOwo_M_XI32et5KK78FIaGvMke85fKeKkCIK8_xtXpjYoXuBYzDumBHS7dvAyM1Ccpf_toeHUU3eBtfUCVw=w1502-h882-no?authuser=0

▲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。

AMWts8DTNxfIydKs5vd363Wogd5CjusJZGHH8uFhzdOEeZvbGLEMujmeAAoDzNsEJfq1hDiHk186D6aGTI3ot9s5Dh587iOYnwa_I4-t3p7n_C53Cjx5bd-9-itP6Am-Fh2iOT4-RcT1j_RHkx6-J8SUGp0dbQ=w965-h2003-no?authuser=0

但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內部的其它元素。。

AMWts8BUpPWabf7zKfyDTzspwntVVmF6uBmwmxn9eRkg3fdCdStf9aEqG7CPtWEBvQsD7JgQ0GWPzbKFHb44wyKb-lq9b5LqPPhiDUTcdmnbb57RhTDOcN0cubaFN3kubFvbwo6mh3iuD5aT6jjslTIZnEy3WA=w897-h2003-no?authuser=0

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

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

AMWts8AlSv5NHNb8yQRdyeeTgEYDWQH1m5QLev2GOPcSe0-OVDoOjIQdYygBWA-hnp4tM5wax4j8XzJZNRG7xIAnUW26NdXprfH7qztg_kSBcx_4qBR4Atch5hjSK45ZY_NpnC3IAkSuASUhOUovCTjOk6u_AA=w881-h2003-no?authuser=0

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

老師在講你有沒有在聽?

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

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

AMWts8D1f046Y3BLoNGmYrKhsdkh-UnIaw4OivCwg-yEs97t5mRngJh655xaDaU4DTATK1wa9TSMkz7PsdIBWyFH0WdhxLCd1XTxqgR0K0Fz74j0L7mLF6hSyOAM2oZYQl149sWtM-ZTZBvX1NfrgDQdXB3jVw=w851-h2003-no?authuser=0

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

AMWts8BccMGTisxTbUAjg0Na6cjJn09nSyMaV10RmGUJzgvJUfE26iu6xOFzF86HKx_mOXsepIchLMuWFCF7pzMqiOjbG7xte7_sUdYwWPPCw0N8p4BXvb-slKJ8YkhKYlNRgfo08QiaPO6LiOsrbkxl2BoQvA=w1250-h628-no?authuser=0

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

感想

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK