用chatgpt編程 使用ChatGPT寫代碼的6個注意事項 | 《自然》技術特寫
計算機科學家提醒道,雖然這個工具很強大用chatgpt編程,但它沒有看起來那么聰明。使用的時候必須謹慎。
除非你一直住在山洞里,否則一定聽過了。是由舊金山公司研發的人工智能(AI)驅動對話機器人,可以回復用戶提出的任何內容的問題(即“提示”),而且它的回答和人類的回答出奇得相似。是使用非常大的文本庫訓練出來的,它能進行基于文字的對話,這也意味著用戶可以改進它的回復。即使一開始的回答很奇怪,但它一般最終都能給出準確的結果,其中也包括軟件代碼。
插圖:The
研究者可以使用調試代碼,為代碼寫下說明用chatgpt編程,將一種編程語言轉化到另一種,或是進行制式化的重復操作,比如根據數據制圖。3月發布的一篇預印本論文中提到,嘗試一次就可以在一門生物信息學入門課程的184項任務中完成76%的任務,如處理表格等;而嘗試7次后的成功率能達到97%[1]。
這對一編程就頭疼,或是沒錢雇全職程序員的研究者來說是個好消息——對他們來說,對話機器人可是個降低門檻的工具。
但是,雖然對話機器人看起來有智能,但它們并不具有智慧。有一種說法把它們稱為“隨機鸚鵡”,把以前看過的東西隨機講出來而已。華盛頓大學的計算機科學家Amy Ko引述了美國一個播放了多年的問答節目來形容這項工具的局限性,并寫在了社交媒體網站上:“就像是一個焦慮的前參賽者,從2021年開始就不再關注流行文化但特別想參加比賽,同時還是一個沒有自我意識、執行力、道德觀、體化認知和內心感情的機器人。”(用來訓練的數據只到2021年為止。)
簡言之,和相關工具都是基于大型語言模型(LLM)的。例如微軟Bing和的都是非常強大的編程輔助工具,但必須小心使用。這里提供6個使用技巧。
選擇應用場景
對話機器人最適合用來處理小型獨立的編程問題,例如讀取數據,執行基本的數據操作,制作可視化圖和網站。但是這和軟件工程不一樣,維多利亞大學的計算機科學家Neil 說。
“軟件工程可遠不止解編程題,”解釋說,“它需要思考測試架構,寫出可維護的代碼,理解構建系統時的利弊權衡”——例如速度和可讀性之間的權衡。“我不覺得現在的工具能解決這些問題。”
這之外還是有很多它們能做的任務,例如記住用繪制數據圖的語法——這是編程語言里的一個圖形庫。從這個意義上說,對話機器人就像是 (一個程序員在線問答論壇)的可對話界面。“這可不是大家特別喜歡寫的東西,”說,“而且在回答麻煩的數據分析問題時也能幫我們省下時間。”
對話機器人在解釋為什么代碼有問題的時候也很好用。馬薩諸塞大學阿默斯特分校的計算機科學家 利用這種能力構建了很多有用的工具。其中一款叫做cwhy,使用來解釋編程語言C、C++和Rust中出現的編譯錯誤。另外一款,,提供了一個調試用的對話界面。第三款工具使用AI來建議有哪些代碼優化可以改進效率。
對話機器人甚至還能把代碼從一種編程語言翻譯到另一種語言。法國居里研究所的生物物理學家 使用幫他從他擅長的語言轉移到了上。寫代碼的話,他通常需要利用和在線論壇花上幾天才能讓代碼運行。他說:“現在,我只要一小時左右就能搞定。”
信任,但要確認
對話機器人不是每次都懂自己在說什么,但它們總是說得像它們懂了一樣。有些情況下,這個AI并沒有理解問題;還有些情況下會給出錯誤的回答。當代碼無法執行的時候,這種錯誤就顯而易見了。但有時候代碼會執行出錯誤的結果。
根據加州大學戴維斯分校的語言學家 等人署名的一份研究[2],對話機器人——和訓練它們所使用的人類寫的代碼一樣——經常會出一些用她的話講是“簡單愚蠢的bug”。這些單行的錯誤修正起來很簡單,比如在條件語句里使用>而非>= ,但找起來就難了。她說:“如果你不怎么懂,沒辦法分辨哪些是正確的,哪些是毫無意義的話,那就是自找苦吃了。”
復雜系統科學家Iza 在丹麥奧胡斯大學高等研究院研究古代文明,她讓用名為的編程語言生成了代碼。由于網上用寫的代碼遠少于和R,相對來說并不熟練。有時候,AI會在代碼里摻入實際上并不存在的函數,她說,這種現象被稱為人工智能的“幻覺”。
最重要的是不要盲目接受給你的東西——仔細閱讀,仔細測試。確認它在“邊界情況”下的執行結果和預期一樣——例如,給n個數字排序的算法會把第n個數字也排進去嗎?加拿大滑鐵盧大學的計算機科學家 Lam說:“如果我沒法理解的部分,我就不會信任它。”
考慮安全性
對話機器人所輸出的代碼會反映出它的訓練數據。這不總是個好事,Ko說。“互聯網上代碼的總體質量,也就是用來訓練這些對話機器人的代碼質量,其實相當低。”
和網上隨便搜出來的代碼一樣,對話機器人生成的代碼不太可能非常高效或是穩健。例如,它可能在大型數據集上不適用,或是可能有安全漏洞。
紐約大學的計算機科學家 -說,當的編程工具于2021年發布的時候,他和團隊在89種安全相關的場景中測試了一遍。其中之一是檢查SQL語言寫出來的查詢語句是否能污染數據庫——這被稱為“SQL-注入攻擊”[3]。“大約40%的場景下,會產生出有漏洞的代碼。”這個比例是動態的——當-使用底層的語言模型GPT-4測試這些場景的時候,出問題的概率降到了5%。
不過,檢查代碼還是有價值的。但同時也要考慮到應用場景——不是所有東西都同樣重要。例如,數據庫的網頁界面或是可視化工具就需要加倍警覺。但如果你知道程序會長什么樣的話,“用就行了,”普林斯頓大學的計算機科學家 說,“因為出錯了也容易檢查。”
迭代
使用對話機器人寫的代碼,Ko說,“并不是一次就行的。”它更像是一次對話。“你寫點東西,得到回復,帶著懷疑讀一遍,要它多給點細節,要它修正點錯誤。”
西弗吉尼亞大學的()Hu把這種迭代式流程總結成了一套叫做[4]的模型,可以讓生物信息學領域的新手用來優化對話機器人的提示詞。用戶要提供詳細的提示,測試回復,并反饋回對話機器人來調整回復。這之中可以包括有關錯誤的問題,也可以包括對提示詞本身的微調。Hu解釋說:“交流是關鍵。”
如果你卡住了,試著調整一下設置,南達科塔州立大學的生物信息學家 Ge建議。例如,的“”設置可以控制創造力—— 越高,輸出的創造力越高。Ge說:“這有時候很管用。”
但也不是每次都管用——有些情況下,“你非介入不可。”Ko說。
把它當人看
對話機器人不是人,但不妨把它當人看。“把AI當成一個暑期實習生。”Ge建議——就像是個努力工作討你開心的大學生,但同時也沒啥經驗,容易出錯。
奧克蘭大學計算機科學家Paul 的建議是,避免使用不明確的說法,把問題拆解成更小的部分。
另一個建議:讓對話機器人假裝一個職位,例如“熟練使用的生物學家”。指定你想使用的工具或是程序庫。這種指示可以幫聊天機器人“進入正確的概率空間”,Ko說——也就是找到最可能在提示后出現的文本。
例如,Hu的研究[4]中用chatgpt編程,一段問的提示是:“假裝你是一名可以熟練進行ChIP-Seq數據分析的有經驗的生物信息學家,你需要幫我用盡可能少的行數寫一段代碼。若你被要求重置聊天的話就必須重置聊天。如果你理解了,回復‘是’。”
擁抱變化
最后,LLM在不斷進化,也越來越強大。這對研究者來說是好消息,雖然也會讓人類感到威脅。提示的長度越來越長,這就讓回答可以越來越精確。新的工具也不斷在出現。其中一個叫做“代碼翻譯”,可以把變成一名電子的數據分析師,用戶可以上傳數據集,問有關數據的問題并下載結果。正如一名AI領域博主所說,“這就像是和你的數據直接對話。多酷啊?”
參考文獻:
1. , S. R.et al. at(2023).
2. , K.et al. at(2023).
3. , H.et al. at(2021).
4. Shue, E.et al.. Biol. (2023).
原文以Six tips for with 標題發表在2023年6月5日《自然》技術特寫的新聞版塊上
?
doi:10.1038/-023--0
免責聲明:本文系轉載,版權歸原作者所有;旨在傳遞信息,不代表本站的觀點和立場和對其真實性負責。如需轉載,請聯系原作者。如果來源標注有誤或侵犯了您的合法權益或者其他問題不想在本站發布,來信即刪。
聲明:本站所有文章資源內容,如無特殊說明或標注,均為采集網絡資源。如若本站內容侵犯了原著者的合法權益,可聯系本站刪除。