兩周前,我讓 GPT-4 從頭編寫(xiě)一款應(yīng)用程序。由于這段經(jīng)歷感覺(jué)良好,當(dāng)時(shí)我認(rèn)為 GPT-4 是非常強(qiáng)大的編程伙伴。然而,上周末我讓 GPT-4 擴(kuò)展這款應(yīng)用程序,卻有了完全不同的體驗(yàn)。
因此,我想通過(guò)本文記錄整個(gè)過(guò)程,并分享一些心得和技巧。
我的這款應(yīng)用程序主要是為了幫助用戶學(xué)習(xí)音程:
如想嘗試這款應(yīng)用,可前往:https://ericsilberstein.github.io/gpt4-interval-trainer/interval-trainer.html
如想查看源代碼,可前往:https://github.com/ericsilberstein/gpt4-interval-trainer
我詢(xún)問(wèn)了 GPT-4 關(guān)于如何擴(kuò)展這款應(yīng)用程序的想法。
我提問(wèn):接下來(lái),我們應(yīng)該添加哪些功能?
GPT-4 回答:
下面是你可以考慮添加到音程聽(tīng)力訓(xùn)練應(yīng)用功能的一些想法:
1. 自定義音程范圍:允許用戶選擇練習(xí)的音程,而不只是練習(xí)八度以下的所有音程。
2. 上行、下行以及和聲音程:添加分別練習(xí)上行、下行以及和聲音程或混合模式的選項(xiàng)。
3. 旋律練習(xí):添加生成具有多個(gè)音程的短旋律練習(xí)功能,供用戶辨別。
4. 和弦識(shí)別:擴(kuò)展應(yīng)用,添加和弦識(shí)別練習(xí),允許用戶練習(xí)通過(guò)聽(tīng)力判斷和弦。
5. 一段時(shí)間內(nèi)的進(jìn)度跟蹤:實(shí)現(xiàn)一個(gè)功能,允許用戶保存自己的進(jìn)度,并記錄一段時(shí)間內(nèi)的進(jìn)步程度。
6. 計(jì)時(shí)練習(xí):添加計(jì)時(shí)模式,允許用戶挑戰(zhàn)在規(guī)定時(shí)間內(nèi)識(shí)別盡可能多的音程。
7. 排行榜和社交功能:創(chuàng)建一個(gè)排行榜,鼓勵(lì)用戶之間的友好比拼,允許他們?cè)谏缃幻襟w上分享進(jìn)度。
8. 自定義音頻設(shè)置:允許用戶選擇不同樂(lè)器或音頻播放的聲音設(shè)置。
9. 移動(dòng)應(yīng)用:開(kāi)發(fā)移動(dòng)應(yīng)用,方便用戶隨時(shí)隨地練習(xí)聽(tīng)力。
10. 集成音樂(lè)理論課程:提供額外的教學(xué)內(nèi)容,或集成已有的音樂(lè)理論課程,幫助用戶更好地理解音程的理論知識(shí)。
以上是可以考慮的一些想法。你可以根據(jù)該應(yīng)用的規(guī)劃隨意選擇,另外你也可以大膽地提出能夠改善用戶體驗(yàn)和功能的其他意見(jiàn)。
這些想法都很不錯(cuò)。最終我選擇采納第 6 條建議。
我提問(wèn):我們來(lái)試試看第 6 個(gè)吧,你可以添加這個(gè)功能嗎?
GPT-4 回答:
當(dāng)然可以。下面,我們?yōu)槟愕囊舫搪?tīng)力訓(xùn)練應(yīng)用添加計(jì)時(shí)功能。添加這個(gè)功能后,用戶就可以在規(guī)定時(shí)間內(nèi)識(shí)別盡可能多的音程。下面,我將提供實(shí)現(xiàn)這個(gè)功能的代碼片段。
首先,更新 HTML,添加計(jì)時(shí)控制:
接下來(lái),更新 JavaScript,處理計(jì)時(shí)邏輯:
看到了嗎?有經(jīng)驗(yàn)的人應(yīng)該一眼就能看出這段代碼中存在兩個(gè)問(wèn)題:
首先,它想讓我在
其次,它想讓我更新函數(shù) handleIntervalButtonClick(),但實(shí)際上這個(gè)函數(shù)也不存在。
無(wú)效技巧 1:闡明需求
這不是什么大問(wèn)題,我之前也遇到過(guò)類(lèi)似的問(wèn)題,只需要進(jìn)一步闡明需求。
然而,與之前不同的是,僅僅闡明需求還不夠。GPT-4 像一個(gè)糟糕的工程師,沒(méi)有搞清楚整體狀況,就根據(jù)我的反饋?zhàn)龀隽朔磻?yīng),更可怕的是,它還開(kāi)始隨意修改一些不需要改動(dòng)的代碼。
下面舉個(gè)例子。我指出了一個(gè)問(wèn)題,它開(kāi)始嘗試解決,但它的 handleIntervalButtonClick() 引用了一個(gè)不存在的變量(isAnswering)和一個(gè)不存在的函數(shù)(playRandomInterval):
無(wú)效技巧 2:提醒代碼
后來(lái),我嘗試了不同的技巧,“提醒”它一些代碼。
可是這并沒(méi)有用。而且很奇怪的是,它似乎知道代碼前后要保持一致,但并沒(méi)有理解我希望它完成的功能(添加計(jì)時(shí)功能)。
無(wú)效技巧 3:要求它倒退一步
來(lái)回折騰了很多遍,它仍未能生成可以運(yùn)行的代碼,這感覺(jué)就好像我在帶實(shí)習(xí)生一樣,最后我只好要求它倒退一步。
這次終于可以了。給出的反饋是正確的,前面對(duì)話中澄清的問(wèn)題也得到了解決。然后,我再次提醒它一些代碼,希望它能正確理解需求,并編寫(xiě)出正確的代碼。
可惜失敗了,它生成的代碼和前面一樣都是錯(cuò)的。
無(wú)效技巧 4:開(kāi)啟一個(gè)新的聊天會(huì)話
接下來(lái),我嘗試開(kāi)了一個(gè)新的聊天會(huì)話。因?yàn)槲艺J(rèn)為,當(dāng)前的這段聊天太長(zhǎng)了,涉及太多上下文,如果它能專(zhuān)注于需求和當(dāng)前代碼,也許就可以解決問(wèn)題。
我使用了與兩周前一模一樣的提示,但額外提供了功能、需求和源代碼文件。
不過(guò),情況似乎并沒(méi)有改善。我反復(fù)嘗試了很多遍,始終沒(méi)能得到可以正常運(yùn)行的代碼。
無(wú)效技巧 5:要求它加倍小心
我要求它加倍小心,集中注意力解決它生成的代碼中的一個(gè)問(wèn)題:start() 調(diào)用 startTimer(),startTimer() 調(diào)用 start(),但依然沒(méi)有用。
無(wú)效技巧 6:人為介入,重構(gòu)代碼
在我看來(lái),GPT-4 似乎不“理解” start() 函數(shù)。按照最初它編寫(xiě)代碼的方式,start() 將在用戶開(kāi)始練習(xí)以及用戶點(diǎn)擊“下一個(gè)音程”時(shí)調(diào)用——但它在告訴我如何添加計(jì)時(shí)功能時(shí),卻假設(shè) start() 只會(huì)被調(diào)用一次。如果人類(lèi)程序員不仔細(xì)閱讀代碼,可能也會(huì)做出這樣的假設(shè)。
所以,我嘗試手動(dòng)重構(gòu),可能起一個(gè)更好的名字,它就會(huì)明白了。
我將 start() 分解成了兩個(gè)函數(shù):start() 和一個(gè)新函數(shù) nextInterval()。GPT-4似乎很“喜歡”這個(gè)名字,因?yàn)樵谥暗姆磸?fù)中它就調(diào)用了這個(gè)函數(shù)。為了盡可能避免混淆,我開(kāi)啟了一個(gè)新的聊天會(huì)話,并提供了需求和新代碼。
但依然沒(méi)有任何效果。我反復(fù)嘗試了幾次,它甚至生成了一個(gè)新版本,卻莫名地將 JavaScript 移到了 HTML 中。
我放棄了:如果對(duì)方是一個(gè)人類(lèi),我會(huì)認(rèn)為這個(gè)人頭腦不清醒、粗心大意、心不在焉、能力不足,或者四者兼而有之!
初次建立這個(gè)項(xiàng)目時(shí),我與 GPT-4 的交互體驗(yàn)與現(xiàn)在截然不同。是不是因?yàn)樵撃P涂梢浴八伎肌钡拇a量很有限,而我已經(jīng)觸及上限了?不過(guò)至少對(duì)人類(lèi)而言,計(jì)時(shí)功能與添加其他功能(示例歌曲、統(tǒng)計(jì)數(shù)據(jù))一樣簡(jiǎn)單,甚至更簡(jiǎn)單,所以我感覺(jué)應(yīng)該是代碼量的問(wèn)題。
有用的技巧:要求它給函數(shù)寫(xiě)文檔
經(jīng)過(guò)這件事后,我經(jīng)常在想:如果代碼中的函數(shù)非常清晰且文檔齊全,GPT-4 是否能勝任更高級(jí)別的抽象工作,而不需要“思考”每個(gè)函數(shù)的代碼?如果有明確的文檔說(shuō)明,它是不是就不會(huì)在意那么多細(xì)節(jié)了?因?yàn)槿祟?lèi)就是這樣,我們大腦能夠承受的復(fù)雜度是有限的,我們也是通過(guò)這種方式構(gòu)建大型系統(tǒng)的。
于是,我做了一些測(cè)試,要求它為代碼生成文檔。
它給了我如下帶有文檔說(shuō)明的函數(shù):
我將這些函數(shù)的文檔復(fù)制到了源文件中,并在新的聊天中重復(fù)了之前的操作,不過(guò) ChatGPT 抱怨我的請(qǐng)求太長(zhǎng),所以我刪除了 CSS 文件。
這次它終于成功地生成了代碼!雖然用戶界面需要完善,但基本要素齊全:你可以選擇是否啟用計(jì)時(shí)模式,你可以指定秒數(shù),它會(huì)顯示一個(gè)倒計(jì)時(shí),還會(huì)在倒計(jì)時(shí)結(jié)束時(shí)強(qiáng)制停止練習(xí),并告訴你一共答對(duì)了多少道題。
最后一次,ChatGPT 終于生成了可以正常運(yùn)行的代碼,但原因是什么呢?是因?yàn)槲臋n,還是因?yàn)闆](méi)有了 CSS,它需要處理的代碼量減少了?為了弄清楚,我進(jìn)行了一些實(shí)驗(yàn),最后發(fā)現(xiàn)似乎僅刪除 CSS 是不夠的。
我們需要反復(fù)嘗試,才能學(xué)會(huì)如何與這個(gè)外星人(ChatGPT)一起工作。我想知道其他人是否也遇到過(guò)這類(lèi)問(wèn)題,以及它們?nèi)绾未蚱七@些限制的。
審核編輯 :李倩
-
HTML
+關(guān)注
關(guān)注
0文章
278瀏覽量
35783 -
代碼
+關(guān)注
關(guān)注
30文章
4801瀏覽量
68735 -
應(yīng)用程序
+關(guān)注
關(guān)注
37文章
3283瀏覽量
57749 -
GPT
+關(guān)注
關(guān)注
0文章
354瀏覽量
15431
原文標(biāo)題:兩周時(shí)間,我體驗(yàn)了 GPT-4 從編程‘神器’變成編程‘智障’!
文章出處:【微信號(hào):軟件質(zhì)量報(bào)道,微信公眾號(hào):軟件質(zhì)量報(bào)道】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論