AI編碼無需人類插手!Claude工程師摔斷右手,竟一周狂肝3000行代碼
原來,摔斷胳膊也是一件幸事......
當(dāng)事人表示,「我再也不想回到過去了」。
這是為何?
事情是這樣的,幾個(gè)月前,Claude工程師Erik Schluntz騎車上班的路上,意外摔斷右手,打上了石膏。
為了生計(jì),他不得已用左手打字。
即便如此,Schluntz依舊在Anthropic舊金山的辦公室里,一周狂肝了3000行代碼。
為AI編碼點(diǎn)贊
誰也不曾想,這背后竟是AI立了大功。
他通過結(jié)合語音轉(zhuǎn)文字技術(shù),與Claude AI結(jié)隊(duì),整整寫了2個(gè)月的代碼。不過,必須承認(rèn)的是,其中有許多是「樣板代碼」。
為此,Schluntz還撰寫了一篇長文,題為——AI替代了我的右手。
文章中,他表示,「通過這件事,體驗(yàn)到了人類幾乎不再需要自己編寫代碼的未來」。
老實(shí)說,我愛上了這種感覺。
另一位Anthropic工程師表示,通過從這件事,我們可以獲得軟件工程未來幾年的關(guān)鍵一瞥。
即使右手不能使,AI是完全可以讓你成為一個(gè)10倍程序猿。
那么,Erik Schluntz如何在受傷期間,能夠讓AI為他高效編碼呢?
初始設(shè)置
首先,文章開篇他最先介紹了,自己如何對(duì)AI進(jìn)行設(shè)置,最終決定使用了Claude AI。
Schluntz在摔斷手之前,也曾使用類似Copilot等AI代碼生成工具,但主要還是「手寫」。
2105年哈佛碩士畢業(yè),Cobalt機(jī)器人公司創(chuàng)始人、Anthropic AI技術(shù)研究員
此外,他也使用過「語音轉(zhuǎn)文字」,但也主要在手機(jī)上發(fā)短信,并未在電腦中嘗試過這一功能。
好在,Mac內(nèi)置語音控制在NLP處理上非常出色。
唯一不足的是,在聽寫任何與代碼相關(guān)的內(nèi)容時(shí),Siri表現(xiàn)得很糟糕。畢竟,一些符號(hào)和詞匯,大大超出其識(shí)別范圍。
就比如:
Schluntz:Eval
Siri:Eval?你想說的是Evil嗎?
當(dāng)然,目前有一些專門針對(duì)代碼的優(yōu)秀語音轉(zhuǎn)文字系統(tǒng),比如Talon。
但由于Schluntz對(duì)AI代碼生成非常感興趣,于是決定嘗試,用自家AI去完成這項(xiàng)艱巨的任務(wù)。
這里沒有使用Copilot,是因?yàn)槠渥詣?dòng)補(bǔ)全功能,對(duì)作者來說異常慢,需要開發(fā)者先寫出半行代碼,才能實(shí)現(xiàn)。
畢竟摔傷了一只手,「動(dòng)嘴」還是比「動(dòng)手」快。
這時(shí),只需將大塊代碼庫內(nèi)容一鍵復(fù)制粘貼到Claude AI中,然后通過語音命令進(jìn)行轉(zhuǎn)換。
舉個(gè)栗子,Schluntz會(huì)說「重構(gòu)ABC函數(shù)以接受輸入XYZ」或「為這些新函數(shù)ABC編寫單元測試,并查看XYZ的示例測試」。
雖然Claude并不總是能在第一次嘗試時(shí)成功,但它能很好地接受后續(xù)指令和調(diào)整——
「我感覺就像是,和AI進(jìn)行『結(jié)對(duì)編程』,而由另一個(gè)人操作鍵盤」!
調(diào)教Claude
「被迫」這樣寫代碼后,Schluntz很快就弄清楚了,什么樣提示會(huì)生成有效代碼,什么會(huì)是無效。
有時(shí)候,它非常神奇,但有時(shí)候,就連作者本人恨不得把電腦扔出窗外。
他不得不在IDE和Claude之間頻繁地復(fù)制粘貼,并手動(dòng)拼接被Claude輸出長度限制截?cái)嗟拇a片段。
甚至,有幾次他對(duì)Claude「提高了嗓門」,只因AI「忘記了」Schluntz之前的指令。
接下來,就看看Schluntz如何調(diào)教的Claude。
要具體,并舉例說明
如果你只給出一個(gè)基本請(qǐng)求,LLM可能會(huì)給出一個(gè)中規(guī)中矩的通用答案,可能并不適用于你的特定代碼庫。
這時(shí), 就需要給出「非常明確的指令」,來獲得更優(yōu)的結(jié)果。
比如,詳細(xì)說明你期望的輸入和輸出,使用哪些庫等。
Schluntz發(fā)現(xiàn),將指令放在輸入的開頭和結(jié)尾效果最好,可以確保AI不會(huì)「遺忘」重要的上下文。
最好是,能夠提供代碼庫示例,供AI參考。特別是,在編寫單元測試、處理樣板代碼時(shí),AI表現(xiàn)特別好。
通過示例,AI還可以學(xué)習(xí)如何使用代碼庫中的內(nèi)部工具函數(shù)。
這當(dāng)中,遷移和重構(gòu),是最完美的應(yīng)用場景。
Schluntz會(huì)手動(dòng)遷移一個(gè)實(shí)例,然后用它作為示例讓Claude轉(zhuǎn)換其余的輸入。
通過這種方式,他可以快速重構(gòu)大約3,000行代碼。
讓Claude掌舵
大多數(shù)人把LLM當(dāng)作StackOverflow的替代品:他們雖是在詢問方向,但仍然自己在駕駛。
Schluntz則反其道而行之。
「如果你能夠給Claude正確的基礎(chǔ)構(gòu)建模塊,它往往可以一次性完成整個(gè)任務(wù)」。
在周末的機(jī)器人項(xiàng)目中,Schluntz和朋友Survy給Claude提供了一段控制單個(gè)電機(jī)和讀取藍(lán)牙游戲手柄的代碼。
通過這些構(gòu)建模塊,Claude能夠一氣呵成地編寫出所有遠(yuǎn)程控制機(jī)器人的代碼,節(jié)省了大量時(shí)間和繁瑣的數(shù)據(jù)處理!
令人驚訝的是,這與常見的建議完全相反,即一次只向LLM提出一個(gè)問題。
尤其是,在Schluntz不熟悉的領(lǐng)域,Claude往往在任務(wù)分解方面表現(xiàn)得尤為出色。
過于具體的請(qǐng)求也能奏效,但有時(shí)會(huì)導(dǎo)致失去整體視角,類似于在沒有整體背景的情況下,給出狹隘的建議。
RTFM == Read This For Me
電機(jī)控制器,有一份100頁的說明書,內(nèi)容繁瑣且復(fù)雜。
但Schluntz和Survy將其上傳到Claude,然后提問,迅速解決了其中一個(gè)問題。
在以前,這可能需要一個(gè)小時(shí)的仔細(xì)閱讀,并查找相關(guān)術(shù)語和教程。
機(jī)械同理心
「你不需要成為工程師才能成為賽車手,但你必須擁有機(jī)械同理心?!?/span>
——三屆F1世界冠軍Jackie Stewart
漸漸地,Schluntz開始建立起一種非常好的直覺,Claude能正確處理哪些事情,以及哪些事情仍需要人類做。
了解這種區(qū)別,讓他在兩個(gè)方向上都避免了很多挫敗感。
Schluntz學(xué)會(huì)了哪些地方可以進(jìn)行簡化處理:
- 「我正在使用一個(gè)名為pygame的Python庫……」 簡化為 「在pygame中……」
- 「當(dāng)我運(yùn)行你的代碼時(shí),我收到了這個(gè)錯(cuò)誤信息……你認(rèn)為我現(xiàn)在應(yīng)該怎么做」 簡化為直接復(fù)制堆棧追蹤(stack trace)。
他甚至還學(xué)會(huì)了,轉(zhuǎn)換或重構(gòu)大塊代碼可以帶來顯著效果。例如,在每一行之間添加計(jì)時(shí)器(timing instrumentation)。
另一方面,Schluntz學(xué)到如果一個(gè)LLM在兩次嘗試中,無法修復(fù)一個(gè)錯(cuò)誤,那么它永遠(yuǎn)也不能修復(fù)。這時(shí)就需要自己動(dòng)手了。
他還對(duì)Claude可能會(huì)犯的錯(cuò)誤,有了很好的直覺。
有一次,Claude給了一段代碼,它循環(huán)遍歷motor1, motor2, motor2, motor4,遺漏了motor3。
作者的朋友注意到這一點(diǎn),并說 「這一定是幻覺」!但Schluntz能感覺到,「Claude絕不會(huì)犯這種錯(cuò)誤」。
果然,當(dāng)他們檢查輸入時(shí),發(fā)現(xiàn)這個(gè)錯(cuò)誤確實(shí)存在于最初放入Claude的原始代碼中。
為自己構(gòu)建臨時(shí)工具
當(dāng)Schluntz帶著機(jī)器人繞著后院轉(zhuǎn)了一圈后,它輸出了一份包含GPS坐標(biāo)和其他數(shù)據(jù)的CSV文件。
他想檢查這些數(shù)據(jù)與實(shí)際情況的準(zhǔn)確性,但并沒有很高效的方法,要弄清楚如何查看和分析這些GPS坐標(biāo)可能需要一個(gè)小時(shí)。
甚至,他可能會(huì)手動(dòng)在手機(jī)上檢查GPS坐標(biāo),用眼睛死死盯著這些數(shù)字,害怕漏掉其中一行。
這次,Schluntz將CSV文件的前兩行提供給Claude。
它立即生成了一個(gè)網(wǎng)頁APP,可以在衛(wèi)星圖像上渲染上傳的GPS坐標(biāo)CSV文件!
擁有恰好符合我需求的完美調(diào)試工具,而不用依賴print語句或預(yù)先構(gòu)建的可視化工具,徹底改變了局面。
AI讓軟件開發(fā)變得如此便宜,以至于它可以為特定任務(wù)創(chuàng)建一次性工具!
總的來說,這些經(jīng)驗(yàn)和教訓(xùn)讓Schluntz在使用AI寫代碼時(shí),變得更高效!
沒有AI工具,這就像是放棄編譯器,改為手寫匯編語言一樣。
未來會(huì)怎樣?
在文章的最后,Schluntz將AI編程劃分為三個(gè)階段:
過去1-2年
過去的幾年里,AI在軟件工程中的最大用途是,在IDE中使用Copilot自動(dòng)補(bǔ)代碼,或是通過ChatGPT查詢代碼知識(shí)(以往需要去StackOverflow尋找答案)。
以及,通過一些智能體,在沒有人類監(jiān)督情況下輔助編程,執(zhí)行多個(gè)步驟,但這些并不實(shí)用。
今年
2024年,這三個(gè)領(lǐng)域都在發(fā)生變革。
諸如Zed、Cursor和各種VSCode擴(kuò)展這樣的IDE,深入地整合了大模型,擁有更完美的上下文,還能處理更大塊的代碼生成。
Claude Artifacts、ChatGPT的Data Analyst取代了Jupyter Notebook。它們已經(jīng)成為作者的原型開發(fā)工具,和一次性代碼的首選解決方案。
最后,一批如Cognition、Factory、CodeGen等智能體初創(chuàng)公司,正在端到端地自動(dòng)化某些工作流程。
未來1-3年
Schluntz認(rèn)為,未來1-3年,會(huì)出現(xiàn)真正的「AI工程師」。
也就是說,這三個(gè)領(lǐng)域可能會(huì)融合成一個(gè)產(chǎn)品——「AI工程師」,一個(gè)可以在自主模式和同步模式之間連續(xù)工作的系統(tǒng):
1. 自主模式適用于范圍明確的任務(wù)
AI將完全獨(dú)立工作,具備編寫和運(yùn)行代碼、使用外部工具、搜索網(wǎng)絡(luò)信息、訪問內(nèi)部文檔以及從過去錯(cuò)誤中學(xué)習(xí)的能力。它會(huì)不斷迭代任務(wù),直到完成或遇到瓶頸。這將占據(jù)80%的工作量。
2. 配對(duì)編程模式適用于最難的任務(wù)
人類將在高層次上指導(dǎo)AI,而AI負(fù)責(zé)處理低層次的實(shí)現(xiàn)細(xì)節(jié)?;?dòng)將是高度多模態(tài)的,人類和AI將在文本描述、視覺圖表、口頭討論和直接操作彼此代碼之間無縫切換。你可能會(huì)共享屏幕,讓AI跟隨并給出建議和意見,或者AI共享它的屏幕,而你在它操作時(shí)給予指導(dǎo)。
除此之外:
- AI工程師將擁有與你作為員工時(shí)相同的所有背景信息和知識(shí)
AI將連接到公司的知識(shí)庫,訪問你的設(shè)計(jì)文件和客戶訪談?dòng)涗洝o論是自主操作還是與人類配對(duì),AI都能在需要時(shí)無縫地提取這些信息以做出決策。
- AI工程師將是主動(dòng)的而不是阿諛奉承的
如果你提出一個(gè)設(shè)計(jì)建議,AI會(huì)提供用戶訪談?dòng)涗洠⑻岢龈玫慕ㄗh。
AI工程師將為其工作中的簡單和可預(yù)測部分派遣更便宜的子智能體,從而降低計(jì)算成本和延遲。就像你可以瀏覽日志文件而不必逐字閱讀一樣。
在Schluntz看來,AI工程師在特定方面將比大多數(shù)人類工程師更聰明,但有時(shí)會(huì)缺乏常識(shí)或者需要重新集中注意力并接受指導(dǎo)。
實(shí)際上,這與今天經(jīng)理和產(chǎn)品經(jīng)理與工程師合作的方式并沒有太大區(qū)別。
我們還需要工程師嗎?
正如計(jì)算器的發(fā)明并沒有讓會(huì)計(jì)師失業(yè),而是提升了他們的工作,使他們能夠在更高的抽象層次上進(jìn)行思考。
會(huì)計(jì)師仍然需要知道如何做數(shù)學(xué)運(yùn)算和理解計(jì)算,但像計(jì)算器和電子表格這樣的工具使他們能夠創(chuàng)造比以前更多的價(jià)值。
類似的,AI也會(huì)降低創(chuàng)建軟件的門檻,就像任何人都可以使用Excel做個(gè)人會(huì)計(jì)一樣。
學(xué)生們可以在宿舍里啟動(dòng)完整的應(yīng)用程序和業(yè)務(wù),小型工作室也可以為自己創(chuàng)建量身定制的軟件工具。
這時(shí),創(chuàng)造力將會(huì)是唯一的瓶頸。
人類工程師不會(huì)消失。
我們?nèi)匀恍枰诟邔哟紊线M(jìn)行優(yōu)先級(jí)排序,理解問題的整體架構(gòu)和范圍,并審查AI的工作,尤其是在系統(tǒng)變得更大時(shí)。
不同的是,我們將會(huì)把更多的時(shí)間花在思考構(gòu)建什么上,而不是重復(fù)性地考慮「如何」構(gòu)建。
如今,Schluntz已經(jīng)擺脫了石膏的「束縛」,但他依然會(huì)將大部分代碼交給Claude去寫。
軟件工程的未來
巧合的是,Cognition AI的總裁Russell Kaplan昨天也發(fā)表了長推,預(yù)測在AI越來越擅長寫代碼的時(shí)代,軟件工程行業(yè)將如何發(fā)展。
Congnition AI正是第一個(gè)AI軟件工程師Devin的開發(fā)商。
在Kaplan看來,研究實(shí)驗(yàn)室將對(duì)下一代模型的編碼和推理進(jìn)行更多改進(jìn)。很快,模型在編程上就會(huì)變得非常出色。
為什么呢?
除了通用人工智能的進(jìn)步外,編程還有一個(gè)獨(dú)特的優(yōu)勢(shì):通過「自我對(duì)弈」實(shí)現(xiàn)超越人類的數(shù)據(jù)擴(kuò)展?jié)摿Α?/span>
模型可以編寫代碼,然后運(yùn)行它;或者編寫代碼,編寫測試,并檢查一致性。
這種類型的自動(dòng)監(jiān)督在大多數(shù)領(lǐng)域是不可能實(shí)現(xiàn)的,因?yàn)槲覀冊(cè)诮咏祟悓I(yè)知識(shí)極限時(shí),面臨著后訓(xùn)練的數(shù)據(jù)壁壘。而代碼不同——它可以通過經(jīng)驗(yàn)和自動(dòng)化進(jìn)行測試。
因此,軟件工程在幾年內(nèi)將會(huì)發(fā)生根本性的變化。
真正的編碼智能體將能夠完成端到端的任務(wù),并與今天的AI Copilot相輔相成。
在這個(gè)新世界中,每個(gè)工程師都將成為工程經(jīng)理,并配有一支由智能體組成的實(shí)習(xí)生大軍。
工程師只需將把基本任務(wù)委派給編碼智能體,然后就能把更多的時(shí)間花在解決更高層次的問題上:理解需求、架構(gòu)系統(tǒng)以及決定構(gòu)建什么。
這將引領(lǐng)我們進(jìn)入一個(gè)前所未有的軟件繁榮時(shí)代。
很快,曾經(jīng)難以開發(fā)且成本高昂的軟件將變得更加易于獲?。ㄌ岣?0倍),「一次性軟件」也將會(huì)大量涌現(xiàn)。
未來的軟件工程師將比現(xiàn)在多得多,只是工作方式會(huì)有很大不同:更多的自然語言,以及更少的樣板代碼。
當(dāng)然,對(duì)于這種變化,工程師們很快就能夠適應(yīng),就像他們從匯編語言過渡到Python時(shí)一樣。
除了直接的生產(chǎn)力提升之外,這還會(huì)對(duì)初創(chuàng)公司產(chǎn)生實(shí)質(zhì)性的「二階效應(yīng)」。
首先,面向開發(fā)者的公司也將針對(duì)編碼智能體進(jìn)行「營銷」。畢竟,你的智能體會(huì)決定使用哪個(gè)云服務(wù)和選擇哪個(gè)數(shù)據(jù)庫。
曾經(jīng)作為優(yōu)先考慮的用戶友好CLI,將轉(zhuǎn)變?yōu)橹悄荏w友好的UI/UX界面。
產(chǎn)品質(zhì)量的門檻也將提高。在開發(fā)者能夠更快交付的世界中,半成品或功能不完整的MVP將不再被接受。
隨著編碼智能體的興起,測試基礎(chǔ)設(shè)施將變得更加重要和普及。因?yàn)榫幋a智能體會(huì)編寫更多的測試,同時(shí)也會(huì)依賴這些測試來檢查他們的工作。
隨著智能體使代碼遷移變得更容易,轉(zhuǎn)換成本將不再是科技公司的護(hù)城河。公司甚至將智能遷移助手與產(chǎn)品進(jìn)行捆綁銷售,來簡化使用流程。
無論具體情況如何,總體趨勢(shì)是明確的:現(xiàn)在是成為開發(fā)者的最佳和最高效的時(shí)代。