譯者 | 李睿
審校 | 重樓
生成代碼是ChatGPT和其他遵循指令運(yùn)行的大型語言模型(LLM)一個(gè)功能強(qiáng)大的應(yīng)用。如果得到正確的提示,大型語言模型(LLM)可以生成程序員可能需要數(shù)小時(shí)才能編寫的代碼。
然而,大型語言模型(LLM)并不能完成程序員的所有工作。他們無法分解復(fù)雜的問題,思考邏輯和結(jié)構(gòu),也無法創(chuàng)建多層次的解決方案。它們一次處理一個(gè)指令,預(yù)測可能遵循用戶提示和輸出的下一段代碼。
以下是可以幫助用戶充分利用ChatGPT強(qiáng)大的編碼能力以及避免進(jìn)入陷阱的四個(gè)技巧。
如果無法驗(yàn)證,就不要信任ChatGPT
像ChatGPT這樣的大型語言模型(LLM)的一個(gè)突出特征是它們的權(quán)威聲音。它們總是充滿信心地回答,即使他們的答案毫無意義。不可避免,有時(shí)ChatGPT采用令人信服但錯(cuò)誤的答案回答了一些問題。
本文作者表示,他使用ChatGPT的經(jīng)驗(yàn)法則是,只在他完全理解并可以驗(yàn)證的主題中使用它。例如不會用它來寫量子物理的解釋,因?yàn)樗麑@個(gè)主題了解不夠。但是ChatGPT可以幫助他撰寫一篇關(guān)于機(jī)器學(xué)習(xí)基礎(chǔ)知識的有趣文章,因?yàn)榭梢酝耆珯z查和糾正它的輸出。
同樣,當(dāng)使用ChatGPT生成代碼時(shí),只讓它完成可以完全驗(yàn)證的任務(wù)。ChatGPT可能編寫無效或更糟的代碼,這些代碼雖然有效但不安全。因?yàn)镃hatGPT是一個(gè)自動化工具,可以完成那些需要花費(fèi)很長時(shí)間編寫或需要多次訪問文檔頁面或在線論壇(如StackOverflow)的繁重工作。例如,可以要求它編寫排序算法,采用Python/ target=_blank class=infotextkey>Python啟動Web服務(wù)器的代碼,從數(shù)據(jù)庫模式中執(zhí)行SQL查詢,或者在Matplotlib中執(zhí)行數(shù)據(jù)可視化命令。
一次迭代一個(gè)代碼塊
大型語言模型(LLM) 往往難以處理需要推理和逐步規(guī)劃的任務(wù)。因此,不要指望ChatGPT能夠成功地編寫完整的程序或復(fù)雜的代碼塊。但是,這并不意味著ChatGPT不能幫助人們完成復(fù)雜的編程任務(wù)。如果給它提供一個(gè)簡單的任務(wù)(例如上面提到的任務(wù)),就有可能完成。
用戶可以將任務(wù)分解成更小的步驟,并一次一步地提示ChatGPT。一個(gè)成功的方法是從給ChatGPT一個(gè)你想要編寫的程序的邏輯的逐步大綱開始。
這有助于大型語言模型(LLM)為更復(fù)雜的任務(wù)做好準(zhǔn)備,然后逐步提示大型語言模型(LLM)。簡而言之,用戶進(jìn)行推理,ChatGPT完成工作。順便說一句,這種從大綱開始并逐步完成的方法在完成其他任務(wù)時(shí)也很成功,例如撰寫某些類型的文章。
如果對循序漸進(jìn)的過程沒有清晰的愿景,用戶可以從ChatGPT本身獲得幫助。通過提示大型語言模型(LLM)生成完成任務(wù)的步驟列表來啟動編碼會話。然后根據(jù)需要修改大綱,并開始提示它生成第一步的代碼。
向ChatGPT提供反饋
不能指望ChatGPT每一步都提供干凈、安全、有效的代碼。當(dāng)查看其代碼并將其輸入集成開發(fā)環(huán)境(IDE)時(shí),可以進(jìn)行更正和調(diào)整。當(dāng)這樣做時(shí),最好的做法是將更正后的代碼作為反饋提供給ChatGPT,并在適用的情況下提供解釋。
需要注意的一點(diǎn)是,ChatGPT對場景非常敏感,它的行為可以根據(jù)聊天歷史改變。用戶可以利用這一點(diǎn),這就是為什么提供反饋和糾正代碼片段非常有幫助的原因。
例如,用戶可以說:“這就是我更改你提供的代碼的方式:[在這里插入修改后的代碼]。試著(插入行為更正)繼續(xù)這樣做。”這可以幫助引導(dǎo)ChatGPT朝著正確的方向前進(jìn),避免在回答以后的提示時(shí)重復(fù)犯錯(cuò)。(同樣,本文作者在ChatGPT的其他任務(wù)中也成功地使用了這種反饋方法,包括撰寫文章)。
有時(shí)可以使用ChatGPT來獲得關(guān)于其自身代碼的反饋。嘗試打開一個(gè)單獨(dú)的聊天會話,在其中向ChatGPT提供它生成的代碼,并要求它對其進(jìn)行改進(jìn)或更正。有時(shí),它會產(chǎn)生有趣的結(jié)果和新的探索方向。
清理ChatGPT的場景
如果用戶正在處理一個(gè)特別大的任務(wù),聊天記錄可能會變得很長,特別是如果使用ChatGPT進(jìn)行了大量的重復(fù)操作。根據(jù)用戶使用的模型,大型語言模型(LLM)可能會耗盡ChatGPT場景的內(nèi)存。ChatGPT的免費(fèi)版本有4000個(gè)令牌的內(nèi)存。(對于語言任務(wù),100個(gè)令牌覆蓋大約75個(gè)單詞。對于編程來說,它通常要少得多。)
一個(gè)成功的技巧是偶爾清理一下ChatGPT的場景。為此,可以采用一個(gè)提示啟動一個(gè)新的聊天會話,在這個(gè)提示中,可以向ChatGPT提供任務(wù)的大綱、到目前為止完成的步驟、到目前為止生成的代碼,以及希望它遵循的一些通用指導(dǎo)原則。然后告訴它繼續(xù)下一步。通過消除以前與大型語言模型(LLM)交互中的混亂,可以提供更清晰的場景,并提高了ChatGPT生成代碼的準(zhǔn)確性。
大型語言模型(LLM)正在改變編程方式
大型語言模型(LLM)輔助編程領(lǐng)域正在迅速發(fā)展。例如,ChatGPT Plus現(xiàn)在有幾個(gè)插件可以幫助程序員預(yù)測代碼。其他基于大型語言模型(LLM)的編碼工具(例如Github Copilot和Amazon CodeWhisperer)正在幫助程序員顯著提高他們的速度和生產(chǎn)力。檢索增強(qiáng)技術(shù)可以使程序員將大型語言模型(LLM)的行為定制為他們自己的專有代碼庫或庫,這些代碼庫沒有包含在訓(xùn)練數(shù)據(jù)集中。人們?nèi)栽谔剿鞔笮驼Z言模型(LLM)能為程序員做些什么。
原文標(biāo)題:How to write better code with ChatGPT,作者:Ben Dickson