展會(huì)信息港展會(huì)大全

爆火AI編程應(yīng)用何以單挑微軟?Cursor團(tuán)隊(duì)2小時(shí)訪談揭秘
來源:互聯(lián)網(wǎng)   發(fā)布日期:2024-10-14 09:14:07   瀏覽:2081次  

導(dǎo)讀:劃重點(diǎn) 01Cursor團(tuán)隊(duì)在構(gòu)建人機(jī)協(xié)同體系,旨在改善程序員生活,提高編程效率。 02團(tuán)隊(duì)成員認(rèn)為,未來的編程將更加關(guān)注你想要?jiǎng)?chuàng)造什么,而非過度依賴AI。 03為此,他們正在研究如何將AI與人類智慧相結(jié)合,提高編程者的控制力和效率。 04同時(shí),團(tuán)隊(duì)也在探索合...

劃重點(diǎn)

01Cursor團(tuán)隊(duì)在構(gòu)建人機(jī)協(xié)同體系,旨在改善程序員生活,提高編程效率。

02團(tuán)隊(duì)成員認(rèn)為,未來的編程將更加關(guān)注“你想要?jiǎng)?chuàng)造什么”,而非過度依賴AI。

03為此,他們正在研究如何將AI與人類智慧相結(jié)合,提高編程者的控制力和效率。

04同時(shí),團(tuán)隊(duì)也在探索合成數(shù)據(jù)分類法,以更好地訓(xùn)練AI模型。

05除此之外,他們還計(jì)劃在未來幾年內(nèi)實(shí)現(xiàn)AGI,讓編程更加有趣。

以上內(nèi)容由騰訊混元大模型生成,僅供參考

智東西(公眾號(hào):zhidxcom)

編譯 | 尹明順 吳浪娜

編輯 |漠影

智東西10月10日消息,當(dāng)?shù)貢r(shí)間10月7日,知名播客主持人Lex Fridman和Cursor團(tuán)隊(duì)4名創(chuàng)始成員Michael Truell、Sualeh Asif、Arvid Lunnemark和Aman Sanger進(jìn)行了一場(chǎng)長(zhǎng)達(dá)兩個(gè)半小時(shí)的對(duì)話。

Cursor是一個(gè)基于VS Code的代碼編輯器,它為AI輔助編程添加了許多強(qiáng)大的功能,它引起了編程和AI社區(qū)的關(guān)注和興奮,風(fēng)頭正盛。那么Cursor作為一個(gè)初創(chuàng)團(tuán)隊(duì),如何能夠與科技巨頭微軟的Github Copilot一戰(zhàn)呢?

在播客中,幾人深度討論了Cursor團(tuán)隊(duì)目前的發(fā)展以及未來的探索方向,還廣泛談?wù)摿司幊痰奈磥,以及人類與AI在設(shè)計(jì)和構(gòu)建復(fù)雜而強(qiáng)大的系統(tǒng)方面達(dá)成合作的各種可能。

團(tuán)隊(duì)成員在博客中詳細(xì)分享了Cursor如何理解你的代碼庫(kù)并以此為依據(jù)預(yù)測(cè)你下一步要做什么,然后以驚人的速度生成代碼,從而有效提升了編程效率。

他們還介紹了Cursor更多功能,不僅擅長(zhǎng)自動(dòng)補(bǔ)全代碼,它還引入了影子工作區(qū)輔助編寫代碼,并能通過簡(jiǎn)單的描述來命令A(yù)I編寫更復(fù)雜的代碼,完成更多的任務(wù)。

此外,團(tuán)隊(duì)成員還對(duì)AI編程的技術(shù)要領(lǐng)進(jìn)行了深入分析,并對(duì)人與AI編程之間的倫理問題展開探討,提到了希望將OpenAI o1模型集成的愿景。

值得一提的是,團(tuán)隊(duì)成員認(rèn)為,快速就是有趣(Fast is Fun)。吸引人們?cè)陔娔X上創(chuàng)造新內(nèi)容的原因之一就是驚人的迭代速度,而在其他領(lǐng)域,你可能會(huì)受到資源或能力的限制,但在編程的世界,只要有你和計(jì)算機(jī),你就能非?焖俚貥(gòu)建出非常酷的東西。

創(chuàng)始團(tuán)隊(duì)中,Aman Sanger擔(dān)任Cursor的CEO,是一位工程師和企業(yè)家,此前他曾在Instagram和Facebook擔(dān)任領(lǐng)導(dǎo)職位。Arvid Lunnemark是公司的CTO,是一位工程師,曾在Spotify和Google工作。Michael Truell擔(dān)任設(shè)計(jì)主管,Sualeh Asif擔(dān)任公司COO。

▲播客現(xiàn)場(chǎng)介紹Cursor團(tuán)隊(duì)成員(來源:YouTube)

以下是對(duì)該播客內(nèi)容的完整編譯(為提高可讀性,智東西調(diào)整了部分問答的順序,并在不違背原意的前提下進(jìn)行了一定的增刪修改)。

一、類似增強(qiáng)版文字處理器,代碼編輯器可處理更多任務(wù)

Lex:代碼編輯器有什么用?

Michael:代碼編輯器主要是構(gòu)建軟件的地方,長(zhǎng)期以來,而在今天或很長(zhǎng)一段時(shí)間里,代碼編輯器是指對(duì)正式編程語(yǔ)言進(jìn)行文本編輯的地方。對(duì)于非程序員來說,可以將代碼編輯器理解為程序員專用的增強(qiáng)版文字處理器。之所以說它是增強(qiáng)版,是因?yàn)榇a有很多結(jié)構(gòu)。因此,這個(gè)“文字處理器”即代碼編輯器,實(shí)際上可以為你做很多事情,而這些是傳統(tǒng)的文字處理器在文本編輯方面做不到的。

這包括給代碼中不同的元素提供視覺區(qū)分,以便快速瀏覽;可以在代碼庫(kù)中導(dǎo)航,直接跳轉(zhuǎn)到用戶正在使用的內(nèi)容的定義,就像在互聯(lián)網(wǎng)上使用超鏈接;還有進(jìn)行錯(cuò)誤檢查以捕獲基本錯(cuò)誤等。傳統(tǒng)上,這就是代碼編輯器的定義。我認(rèn)為在未來十年內(nèi),隨著構(gòu)建軟件的方式有所變化,代碼編輯器的定義也將發(fā)生很大變化。

Lex:我認(rèn)為代碼編輯器也應(yīng)該很有趣。

Arvid:是的,這非常重要。這實(shí)際上是我們決定構(gòu)建什么的一個(gè)被低估的方面。我們構(gòu)建的很多東西,通過試用它們,再進(jìn)行實(shí)驗(yàn),然后因?yàn)樗鼈儾挥腥ざ阉鼈內(nèi)拥。所以,有趣的很大一部分在于很多時(shí)候要快?焖倬褪怯腥。

Michael:基本上,我認(rèn)為吸引很多人在電腦上構(gòu)建東西的原因之一是這種驚人的迭代速度,而在其他領(lǐng)域,你可能會(huì)受到資源或能力的限制……甚至將一大群人聚在一起編程也是一件令人驚奇的事情,只有你和計(jì)算機(jī),你才能可以非?焖俚貥(gòu)建出非?岬臇|西。

二、從Copilot的粉絲到開發(fā)Cursor,Cursor起源的兩個(gè)重要時(shí)刻

Lex:對(duì)于不知道的人來說,Cursor是一個(gè)超級(jí)酷的新編輯器,它是VS Code的一個(gè)分支。聽聽你們對(duì)自己編輯器之旅的講述會(huì)很有趣。我想你們所有人都是VS Code和Copilot的忠實(shí)粉絲。你們是如何接觸到VS Code的,以及這如何引導(dǎo)你們走向Cursor?

Aman:我們最初都是純Vim用戶。沒有Neovim,只有純Vim和終端。至少對(duì)我自己來說,當(dāng)Copilot出來的時(shí)候,大約是2021年,我真的很想試試它。所以我進(jìn)入了VS Code,這是唯一可以使用Copilot的代碼編輯器,盡管我真的很喜歡使用Vim,但VS Code和Copilot的體驗(yàn)足以說服我發(fā)生轉(zhuǎn)變。所以,這基本上成了默認(rèn)設(shè)置,直到我們開始開發(fā)Cursor。

Lex:也許應(yīng)該解釋一下Copilot的功能。它是一個(gè)非常不錯(cuò)的自動(dòng)補(bǔ)全工具。當(dāng)你開始寫東西時(shí),它會(huì)建議一到三行代碼來完成它,這是一種有趣的體驗(yàn)。你知道當(dāng)你有親密的朋友時(shí),你的朋友會(huì)幫你補(bǔ)全你的話一樣。當(dāng)它做得很好時(shí),會(huì)有一種親密的感覺。可能“親密”這個(gè)詞不太準(zhǔn)確,但有一種很酷的感覺,就像“哇,它懂我”。然而當(dāng)它不懂你時(shí),就會(huì)有一種不愉快的感覺。所以會(huì)有這種摩擦。但我想說,對(duì)于很多人來說,那種“它懂我”的感覺壓倒了“它不懂我”的感覺。

Arvid:我認(rèn)為GitHub Copilot被低估的一點(diǎn)是,即使它出錯(cuò)了也有點(diǎn)煩人,但并沒有那么糟糕,因?yàn)槟阒恍柙佥斎胍粋(gè)字符,也許它就能理解你了,或者你再輸入一個(gè)字符,它就能理解你了。所以即使它錯(cuò)了,也不會(huì)那么糟糕。

Sualeh:你可以進(jìn)行迭代和修復(fù)。我的意思是,對(duì)我來說,Copilot的另一個(gè)被低估的部分是,它是第一個(gè)真正的AI產(chǎn)品,第一個(gè)面向消費(fèi)者的語(yǔ)言模型產(chǎn)品。

Lex:所以Copilot有點(diǎn)像語(yǔ)言模型的第一個(gè)殺手級(jí)應(yīng)用。

Michael:是的,它的beta版在2021年發(fā)布。

Lex:那么Cursor的起源故事是什么樣的?

Michael:大約在2020年,OpenAI發(fā)布了scaling laws論文,這是一個(gè)關(guān)鍵時(shí)刻,這個(gè)領(lǐng)域似乎取得了清晰可預(yù)測(cè)的進(jìn)展,即使我們沒有任何新想法,看起來只要有更多的計(jì)算能力和更多的數(shù)據(jù),就可以讓這些模型變得更好。

Lex:順便說一下,我們可能需要花三到四個(gè)小時(shí)來討論scaling laws這個(gè)話題。但簡(jiǎn)而言之,這是一系列論文中的一篇,這些論文提出了一系列觀點(diǎn),認(rèn)為在機(jī)器學(xué)習(xí)領(lǐng)域,模型的大小和數(shù)據(jù)的大小,越大越好。

Michael:所以在那段時(shí)間,我們中的一些人有很多關(guān)于這會(huì)是什么樣子的概念性討論。對(duì)于所有這些不同知識(shí)領(lǐng)域的工作者來說,這項(xiàng)技術(shù)的發(fā)展將如何讓他們變得更好?然后我認(rèn)為有幾個(gè)時(shí)刻,那篇論文中預(yù)測(cè)的理論進(jìn)展開始變得非常具體,開始覺得你可以在AI領(lǐng)域做實(shí)際上有用的工作,而不需要去攻讀博士。感覺現(xiàn)在可以構(gòu)建一整套真正有用的系統(tǒng)。我認(rèn)為第一個(gè)時(shí)刻是玩轉(zhuǎn)Copilot的早期測(cè)試版,那種感覺很棒,很神奇。

我認(rèn)為第二個(gè)重要時(shí)刻是提前獲得了GPT-4的早期訪問權(quán)限。大約在2022年底,我們開始修改這個(gè)模型,能力的升級(jí)感覺非常巨大。在此之前,我們一直在研究一些不同的項(xiàng)目。因?yàn)镃opilot,因?yàn)閟caling laws,因?yàn)槲覀冎皩?duì)這項(xiàng)技術(shù)的興趣,我們一直在修改程序員使用的工具,但這些都是非常具體的工具。所以我們正在為必須在Jupyter Notebook上工作的金融專業(yè)人士構(gòu)建工具,或者嘗試使用這些模型進(jìn)行靜態(tài)分析。

而GPT-4的升級(jí)讓我們感覺這確實(shí)證實(shí)了我們之前預(yù)測(cè)的理論進(jìn)展。感覺就像在那個(gè)時(shí)間點(diǎn)你可以立即構(gòu)建很多東西。而且,如果我們保持一致,這真的感覺不僅僅是一個(gè)點(diǎn)解決方案,這將涉及整個(gè)編程領(lǐng)域,所有編程都將通過這些模型進(jìn)行,而且感覺這需要一種不同類型的編程環(huán)境,一種不同的編程方式,所以我們開始構(gòu)建那種更大的愿景。

Sualeh:有一件事我印象非常深刻,我的室友是IMO金牌得主,美國(guó)有一個(gè)叫Putnam的比賽,這有點(diǎn)像是大學(xué)生的IMO,也是一個(gè)數(shù)學(xué)競(jìng)賽,它非常精彩。我記得Shengtong和Aman在2022年6月左右打賭,賭能否在2024年6月或7月的IMO中獲得金牌。

Lex:IMO是國(guó)際數(shù)學(xué)奧林匹克競(jìng)賽。

Sualeh:Arvid和我也參加了,盡管我在某種程度上相信進(jìn)步,但我認(rèn)為想拿下IMO金牌,Aman是在異想天開。但老實(shí)說我完全錯(cuò)了,但這可能是團(tuán)隊(duì)中最有先見之明的賭注。

Aman:我清楚地記得我和Michael有一次對(duì)話,在那之前我還沒有非常深入和批判性地思考過scaling laws,他提出了一個(gè)問題,為什么scaling laws就是你需要的一切,或者為什么scaling laws不會(huì)帶來巨大的進(jìn)步?我想我經(jīng)歷了悲傷的五個(gè)階段,最后終于接受了。

我想從那以后我一直對(duì)進(jìn)步充滿希望和樂觀。我想要補(bǔ)充的一點(diǎn)是,這也取決于你將在哪些領(lǐng)域看到進(jìn)步。數(shù)學(xué)是一個(gè)偉大的領(lǐng)域,尤其是形式化定理證明,因?yàn)槟憧梢缘玫揭粋(gè)很好的信號(hào)來實(shí)際驗(yàn)證事物是否正確。所以這意味著像強(qiáng)化學(xué)習(xí)這樣的東西可以工作得非常好,我認(rèn)為你可能會(huì)擁有在數(shù)學(xué)上非常超人的系統(tǒng),但從技術(shù)上講仍然沒有AGI。

三、Cursor預(yù)測(cè)你的下一步,或?qū)⒏淖儤?gòu)建軟件的方式

Lex:好的,那么我們談?wù)凜ursor。

Michael:對(duì)我們來說,決定做一個(gè)編輯器似乎是顯而易見的,至少對(duì)于我們想要做的事情和實(shí)現(xiàn)的目標(biāo)來說是這樣的,因?yàn)楫?dāng)我們開始開發(fā)編輯器時(shí),想法是這些模型會(huì)變得更好,它們的能力會(huì)提高,這將徹底改變你構(gòu)建軟件的方式,這不僅會(huì)讓你獲得巨大的生產(chǎn)力提升,而且會(huì)帶來根本性的改變,構(gòu)建軟件的方式也會(huì)發(fā)生很大的變化。所以,如果你是現(xiàn)有編程環(huán)境的一個(gè)插件,那么你對(duì)代碼編輯器的控制會(huì)非常有限,我們不想被這些限制所束縛。我們希望能夠構(gòu)建最有用的東西。

Lex:Cursor與Copilot在某種程度上是競(jìng)爭(zhēng)對(duì)手,你們?nèi)绾稳?靠速度和功能質(zhì)量嗎?

Aman:是的,我想這是一個(gè)相當(dāng)有趣,也許非常獨(dú)特的領(lǐng)域,如果你看看以前的技術(shù)浪潮,也許只有一種主要的事情發(fā)生,它解鎖了一波新的公司,但每年,每一個(gè)模型能力的跳躍,你就解鎖了一波新的功能,尤其是編程中可能實(shí)現(xiàn)的事情。

所以我認(rèn)為在AI編程中,即使只是領(lǐng)先幾個(gè)月,更不用說一年了,也會(huì)讓你的產(chǎn)品變得有用得多。我認(rèn)為一年后的Cursor將需要讓今天的Cursor看起來過時(shí)。我認(rèn)為微軟已經(jīng)做了很多很棒的事情,但我認(rèn)為他們不像一個(gè)初創(chuàng)公司那樣有很大的空間真正繼續(xù)創(chuàng)新和推動(dòng)這方面的發(fā)展。

Sualeh:我不知道我是否從功能的角度來考慮它,還是從程序員的能力的角度來考慮它。隨著新的o1模型發(fā)布,我相信會(huì)有更多不同類型的模型,比如更長(zhǎng)上下文的,也許更快,所有這些瘋狂的想法你都可以去嘗試,希望其中10%的瘋狂想法能夠變成某種很酷且有用的東西,我們希望人們能更快地?fù)碛兴Q句話說,一個(gè)被低估的事實(shí)是,我們正在為自己創(chuàng)造它。

當(dāng)我們開始構(gòu)建Cursor時(shí),你真的會(huì)感到沮喪,你可以看到模型變得更好,但Copilot的體驗(yàn)沒有改變。就像,這些家伙天花板越來越高,為什么他們不創(chuàng)造新東西?他們應(yīng)該創(chuàng)造新東西。那些Alpha功能在哪里?但沒有那些功能。如果做了新東西,我確信它是一門好生意。我敢肯定這是一項(xiàng)偉大的事業(yè),我是那種真的想嘗試和使用新東西的人,但很長(zhǎng)一段時(shí)間都沒有做出新東西。

Lex:當(dāng)你比較Cursor和Copilot時(shí),Copilot很快就開始因?yàn)槟撤N原因而給人一種過時(shí)了的感覺。

Arvid:是的,我認(rèn)為對(duì)我們有幫助的一件事是,我們把所有事情都做成了,我們?cè)陂_發(fā)用戶體驗(yàn)和與模型交互的方式的同時(shí),也在開發(fā)如何讓模型給出更好的答案。所以你如何構(gòu)建提示,或者你如何找到上下文,對(duì)于Cursor Tab來說,你如何訓(xùn)練模型?所以我認(rèn)為這有助于我們讓同一批人來負(fù)責(zé)整個(gè)體驗(yàn)。

Sualeh:是的,就像制作UI的人和訓(xùn)練模型的人坐在一起,相距18英尺遠(yuǎn),甚至經(jīng)常是同一個(gè)人。你可以創(chuàng)造出一些如果不交談、不實(shí)驗(yàn)就不可能實(shí)現(xiàn)的東西。

Lex:你們用Cursor來寫Cursor?

Arvid:當(dāng)然。

Lex:我們聊聊無所不能的Tab,堪稱加強(qiáng)版自動(dòng)補(bǔ)全的功能。Tab是怎么工作的?它是什么?

Michael:概括來說,我認(rèn)為Cursor目前在兩個(gè)方面表現(xiàn)不錯(cuò)。當(dāng)然,它還有其他功能,但這兩項(xiàng)功能對(duì)程序員來說非常有幫助。一是它就像在你身后觀察,是一個(gè)速度很快、可以搶在你前面輸入并預(yù)測(cè)你下一步要做什么的同事。這也是一個(gè)好的自動(dòng)補(bǔ)全功能的初衷,預(yù)測(cè)你下一步要做什么,但我們可以更進(jìn)一步,不僅預(yù)測(cè)Cursor后面的字符,還能預(yù)測(cè)你要進(jìn)行的下一個(gè)整體更改、下一個(gè)差異、接下來要跳轉(zhuǎn)的位置。

第二個(gè)是,能幫助你有時(shí)領(lǐng)先于AI,告訴它該做什么,實(shí)現(xiàn)從指令到代碼的轉(zhuǎn)換。為了做好這兩件事,我們?cè)谔岣呔庉嬻w驗(yàn)上下了很多功夫,讓它們既符合人體工程學(xué),又足夠智能和快速。

四、加強(qiáng)版自動(dòng)補(bǔ)全功能Cursor Tab,消除編輯器中的低熵操作

Sualeh:我們真正想要實(shí)現(xiàn)的是,讓模型能夠?yàn)槲覀兙庉嫶a。這是我們的愿望,在擁有能夠編輯代碼的優(yōu)質(zhì)模型之前,我們進(jìn)行了多次嘗試。有了優(yōu)質(zhì)模型后,為了讓使用體驗(yàn)更加流暢,我們付出了很多努力來加快推理速度,并已經(jīng)開始整合。

Michael剛才也提到了這種跳轉(zhuǎn)到不同位置的能力,我認(rèn)為這種跳轉(zhuǎn)源于一種感覺,即一旦你接受了編輯,下一步要去哪里應(yīng)該非常明顯。比如,我做了這個(gè)更改,模型應(yīng)該直接知道下一步要跳轉(zhuǎn)到第18行。如果你是WIM用戶,你可能會(huì)按18JJ之類的快捷鍵,但為什么我要這么做呢?模型應(yīng)該直接知道。

所以,你只需要按Tab鍵,它就會(huì)跳到第18行,然后顯示下一個(gè)編輯,你再按Tab鍵,你只需一直按Tab鍵,就能一直這樣操作下去。所以內(nèi)部競(jìng)爭(zhēng)就變成了,我們能讓人按多少次Tab鍵?一旦你有了這個(gè)想法,更抽象地說,要考慮的是如何使編輯達(dá)到零熵狀態(tài)。

也就是說,一旦你表達(dá)了意圖并且編輯,沒有新的信息片段來完成你的想法,但你仍然需要輸入一些字符來讓計(jì)算機(jī)理解你真正的想法,那么模型或許應(yīng)該“讀懂”你的心思,所有零熵位都應(yīng)該只是被Tab鍵消除,這就是比較抽象的說法。

Aman:一個(gè)有趣的現(xiàn)象是,如果你看不同領(lǐng)域的language model loss,我相信每字節(jié)的比特?cái)?shù),這是一種對(duì)代碼字符標(biāo)準(zhǔn)化損失的衡量,比語(yǔ)言低,這意味著代碼中有很多token是非?深A(yù)測(cè)的,很多字符也是非常可預(yù)測(cè)的。而且,當(dāng)你不僅僅是試圖自動(dòng)補(bǔ)全代碼,而是預(yù)測(cè)用戶在編輯現(xiàn)有代碼時(shí)的下一步操作時(shí),這種可預(yù)測(cè)性會(huì)被進(jìn)一步放大。因此,Cursor Tab的目標(biāo)是消除編輯器中所有低熵操作。一旦意圖得到有效確定,就讓我們直接跳轉(zhuǎn)到未來的某個(gè)時(shí)間點(diǎn),向前跳過。

Lex:那么,Tab在近期內(nèi)應(yīng)該能夠做什么?

Aman:我可以講講讓這些功能發(fā)揮作用的一些細(xì)節(jié)。它們的延遲極低,所以你需要在這個(gè)任務(wù)上訓(xùn)練小型模型。特別是,它們非常需要預(yù)填充token。這意味著它們有非常長(zhǎng)的提示,能看到很多代碼,但實(shí)際上生成的token并不多。因此,使用MOE模型是最合適的。這是我們?nèi)〉玫囊豁?xiàng)突破,極大地提高了模型在長(zhǎng)上下文中的性能。另一個(gè)突破是我們構(gòu)建的投機(jī)解碼的變體,稱為投機(jī)編輯。我認(rèn)為,這兩點(diǎn)是使其質(zhì)量高、速度快的重要因素。

Lex:那么緩存起作用了嗎?

Aman:緩存起到了巨大的作用。因?yàn)槟阋幚磉@么多輸入token,如果你在給定行中輸入的每個(gè)按鍵都要針對(duì)所有傳入的token重新運(yùn)行模型,那么一是會(huì)大大降低延遲,二是會(huì)讓GPU負(fù)載過高。因此,你需要設(shè)計(jì)用于模型的實(shí)際提示,使其具有緩存意識(shí)。然后,你需要跨請(qǐng)求重用KV緩存,以減少計(jì)算量。

Sualeh:希望能跳轉(zhuǎn)到不同的文件。所以,如果你在一個(gè)文件中進(jìn)行了編輯,可能需要轉(zhuǎn)到另一個(gè)文件來完成你的想法,它也應(yīng)該轉(zhuǎn)到第二個(gè)文件。

Arvid:完整的泛化是下一步行動(dòng)預(yù)測(cè)。有時(shí)你需要在終端中運(yùn)行命令,它應(yīng)該能夠根據(jù)你編寫的代碼來建議命令,或者有時(shí)它會(huì)給出建議,但你很難判斷它是否正確,因?yàn)槟阈枰嘈畔韺W(xué)習(xí)。你需要知道類型才能驗(yàn)證其是否正確。所以它或許應(yīng)該先帶你到某個(gè)定義的地方,然后再帶你回來,這樣你就有了接受下一個(gè)補(bǔ)全所需的所有必要知識(shí)。

Michael:編程是一門奇特的學(xué)科,有時(shí)你接下來五分鐘要做什么,實(shí)際上是可以根據(jù)你最近所做的事情預(yù)測(cè)出來的。那么,我們能否創(chuàng)造一個(gè)世界,讓這接下來的五分鐘要么在你放手的情況下自動(dòng)完成,要么在你看到下一步要做什么并確認(rèn)無誤后,通過輕觸Tab鍵就能快速實(shí)現(xiàn)。

五、增加顯示框提示代碼差異,圍繞審查者體驗(yàn)做設(shè)計(jì)

Lex:Cursor有一個(gè)非?崆乙俗⒛康墓δ,那就是整個(gè)diff界面情況。所以,模型用紅色和綠色顯示我們將如何修改代碼,然后可以在聊天窗口中應(yīng)用它,它會(huì)向你顯示diff,你可以接受diff。那么,你能講講這方面的發(fā)展方向嗎?

Sualeh:我們可能會(huì)有四五種不同的diff。我們?yōu)樽詣?dòng)補(bǔ)全功能優(yōu)化了diff,因此它具有與審查大塊代碼時(shí)不同的diff接口。然后,我們正在嘗試優(yōu)化另一個(gè)diff功能,以適應(yīng)處理多個(gè)不同文件的情況。從高層次來看,差異在于,當(dāng)你進(jìn)行自動(dòng)補(bǔ)全時(shí),讀取速度應(yīng)該非常快。實(shí)際上,在所有情況下它的讀取速度都應(yīng)該非常快,但在自動(dòng)補(bǔ)全功能中,你的注意力會(huì)集中在一個(gè)區(qū)域,人類無法同時(shí)關(guān)注太多不同的地方。

在界面方面,我們有當(dāng)前框,如果你試圖在某個(gè)地方刪除代碼并嘗試添加其他代碼,它會(huì)嘗試在側(cè)面顯示一個(gè)框。

我們嘗試了三四種不同的方法來實(shí)現(xiàn)這個(gè)功能。最初的方法是在旁邊顯示一個(gè)帶有藍(lán)色刪除線的框。它過去會(huì)以Google Docs的風(fēng)格顯示要?jiǎng)h除的代碼,你會(huì)看到一條線穿過,然后看到新代碼,這非常分散注意力。然后我們嘗試了很多不同的方法……有刪除、紅色高亮等。

之后的迭代版本有點(diǎn)有趣,你會(huì)按住Mac上的option鍵。所以它會(huì)高亮顯示一段代碼,以顯示AI有建議給你。在這個(gè)例子中,輸入和值都會(huì)變成藍(lán)色,藍(lán)色是用來高亮顯示AI對(duì)你有一個(gè)建議。它不會(huì)直接顯示建議的內(nèi)容,而只是提示你AI有一個(gè)建議。如果你真的想看到它,就按住option鍵,然后你會(huì)看到新的建議,松開option鍵后,你又會(huì)看到原始代碼。

Arvid:我個(gè)人非常期待在這個(gè)領(lǐng)域做出很多改進(jìn)。我們經(jīng)常把它稱為驗(yàn)證問題,這些差異對(duì)于小范圍修改來說很好用。但如果是大范圍修改,或者涉及多個(gè)文件等情況,審查這些差異就有點(diǎn)費(fèi)力了。所以這里有幾個(gè)不同的想法。一個(gè)想法是,差異中的某些部分很重要,包含了很多信息。而有些部分的信息熵很低,就是重復(fù)的內(nèi)容。

所以,或許可以高亮顯示重要的部分,而將不那么重要的部分灰度顯示;蛘撸憧梢杂幸粋(gè)模型,它查看差異并發(fā)現(xiàn),“哦,這里可能有個(gè)漏洞。”我會(huì)用紅色波浪線標(biāo)記出來,并提示你,“你應(yīng)該重點(diǎn)審查這部分差異。”我覺得這類想法很令人興奮。

而且,你希望用一個(gè)智能模型來完成這項(xiàng)工作。目前的算法只是普通算法,沒有智能性。算法的設(shè)計(jì)需要智能,但你并不關(guān)心它是關(guān)于這個(gè)還是那個(gè),你只希望模型能做到這一點(diǎn)。

Sualeh:所以我認(rèn)為一個(gè)普遍的問題是,隨著這些模型變得越來越智能,它們能夠提出的更改也會(huì)越來越大。而隨著更改越來越大,人類需要做的驗(yàn)證工作也越來越多。這變得越來越……你需要幫助他們。我可不想把所有的時(shí)間都花在代碼審查上。

Aman:GitHub試圖通過代碼審查來解決這個(gè)問題。當(dāng)你進(jìn)行代碼審查時(shí),你正在審查多個(gè)文件中的多個(gè)差異。但就像Arvid之前說的,我認(rèn)為你可以做得比代碼審查更好。代碼審查有點(diǎn)糟糕。你花了很多時(shí)間去理解那些通常對(duì)你來說很陌生的代碼,而且它甚至并不能真正捕捉到很多漏洞。

我認(rèn)為,使用語(yǔ)言模型可以顯著改善審查體驗(yàn),例如,使用Arvid之前描述的那種技巧,即可能指向?qū)嶋H重要的區(qū)域。我還認(rèn)為,如果代碼是由這些語(yǔ)言模型生成的,而不是由其他人生成的……代碼審查體驗(yàn)是同時(shí)為審查者和代碼編寫者設(shè)計(jì)的。

在代碼編寫者是語(yǔ)言模型的情況下,你就不必那么關(guān)心他們的體驗(yàn)了,你可以完全圍繞審查者來設(shè)計(jì)整個(gè)體驗(yàn),讓審查者的工作盡可能有趣、輕松、高效。我覺得,如果只是天真地試圖讓這些東西看起來像代碼審查,那就會(huì)出現(xiàn)問題。我認(rèn)為你可以更有創(chuàng)造力,并推動(dòng)可能性的邊界。

Arvid:還有一個(gè)想法是,我認(rèn)為順序很重要。通常,當(dāng)你審查一個(gè)拉取請(qǐng)求(PullRequest)時(shí),你會(huì)看到一個(gè)文件列表,并且從上到下依次審查,但實(shí)際上,你可能需要先理解這個(gè)部分,因?yàn)檫@部分在邏輯上是先發(fā)生的,然后你再理解下一部分,而你不希望自己弄清楚這一點(diǎn),你希望有一個(gè)模型來引導(dǎo)你。

我認(rèn)為,并不是所有的編程都會(huì)變成自然語(yǔ)言。如果我正在和Sualeh結(jié)對(duì)編程,Sualeh在電腦前和鍵盤上,有時(shí)如果我來主導(dǎo),我會(huì)對(duì)Sualeh說,嘿,實(shí)現(xiàn)這個(gè)功能,這樣就行了。但有時(shí),向Sualeh解釋我想讓他做什么太麻煩了,所以我會(huì)接過鍵盤,給他展示一下。

我寫一部分示例,然后他就明白了,這是最容易的溝通方式。所以我認(rèn)為,對(duì)AI來說也是這樣。有時(shí),與AI溝通的最簡(jiǎn)單方式就是展示一個(gè)示例,然后它就會(huì)在其他地方執(zhí)行這個(gè)操作。

或者,有時(shí)如果你在做網(wǎng)站,例如,向AI展示你想要什么最容易的方式不是告訴它要做什么,而是拖動(dòng)或繪制東西,也許最終我們會(huì)實(shí)現(xiàn)腦機(jī)接口之類的,你就可以讓它理解你在想什么。所以我認(rèn)為自然語(yǔ)言會(huì)有一席之地。但我肯定地認(rèn)為,它不會(huì)是大多數(shù)人大部分時(shí)間編程的方式。

▲播客現(xiàn)場(chǎng)(來源:YouTube)

六、Apply定制模型創(chuàng)建差異,更少的token使用更智能的模型

Lex:我在使用這個(gè)編輯器時(shí),真的感受到了通用AI(AGI)的存在。感覺它背后有很多機(jī)器學(xué)習(xí)在起作用。能告訴我一些讓它正常工作的機(jī)器學(xué)習(xí)內(nèi)容嗎?

Aman:Cursor真正發(fā)揮作用的地方在于,我們通過這組自定義模型與前沿模型一起訓(xùn)練,這些模型在推理密集型任務(wù)中表現(xiàn)非常出色。Cursor Tab就是一個(gè)很好的例子,你可以將這個(gè)模型專門化,使其甚至比前沿模型還要好。另一個(gè)領(lǐng)域是Apply,令人驚訝的是它需要定制模型,但這是必要的,而且在應(yīng)用方面效果很好。

這些前沿模型在草擬代碼計(jì)劃和生成變化的粗略草圖方面相當(dāng)出色,但實(shí)際上,為訓(xùn)練模型創(chuàng)建差異對(duì)于前沿模型來說是非常困難的。如果你嘗試用Sonnet、o1或任何其他前沿模型來做這件事,它會(huì)在一些愚蠢的事情上出錯(cuò),比如計(jì)算行數(shù),尤其是在非常大的文件中。為了解決這個(gè)問題,我們讓模型勾勒出這個(gè)粗略的代碼塊,表明將發(fā)生哪些變化,然后我們訓(xùn)練一個(gè)模型,將該變化應(yīng)用到文件中。

Lex:我們應(yīng)該說,Apply模型會(huì)查看你的代碼,并給你一個(gè)非常好的新操作建議。而看似對(duì)人類來說微不足道的將兩者結(jié)合起來的步驟,并不容易。

Sualeh:與普遍認(rèn)知相反,這不是一個(gè)確定性算法。

Aman:是的,你會(huì)發(fā)現(xiàn)其他地方有Apply的淺拷貝,但大多數(shù)情況下它都會(huì)失效,因?yàn)槟阌X得可以嘗試進(jìn)行一些確定性匹配,但它至少會(huì)有40%的時(shí)間失敗了,這會(huì)導(dǎo)致產(chǎn)品體驗(yàn)非常糟糕。我認(rèn)為,隨著模型變得越來越智能,這種趨勢(shì)將繼續(xù)下去。所以,Apply還能讓你做另一件事,那就是你可以用更少的token來使用最智能的模型。這在生成所有這些token的延遲和成本方面都很昂貴。

所以,你可以給出一個(gè)非常粗略的草圖,然后讓你的模型去實(shí)現(xiàn)它,因?yàn)閷?shí)現(xiàn)這個(gè)非常粗略的代碼是一個(gè)更容易的任務(wù)。我認(rèn)為這種趨勢(shì)將繼續(xù)下去,你可以使用越來越智能的模型來進(jìn)行計(jì)劃,然后也許可以由不那么智能的模型來處理實(shí)現(xiàn)細(xì)節(jié)。也許你可以使用o1,也許它會(huì)有更強(qiáng)大的模型,給出更高級(jí)別的計(jì)劃,該計(jì)劃由sauna遞歸應(yīng)用,然后是apply模型。

Sualeh:也許應(yīng)該談?wù)勅绾巫屗兛臁?/p>

Aman:讓它變快的一個(gè)主要組成部分是投機(jī)編輯。投機(jī)編輯是投機(jī)解碼的一種變體,也許簡(jiǎn)要描述一下投機(jī)解碼會(huì)很有幫助。在投機(jī)解碼中,你可以利用這樣一個(gè)事實(shí),大多數(shù)情況下,我會(huì)加上一個(gè)限定,那就是當(dāng)你在語(yǔ)言模型生成中受到內(nèi)存限制時(shí),如果你一次處理多個(gè)token,這比一次生成一個(gè)token要快。

所以我們做的是,不是使用投機(jī)解碼通常所做的,即使用一個(gè)小模型來預(yù)測(cè)這些草稿token,然后你的大模型會(huì)進(jìn)去驗(yàn)證,在代碼編輯中,我們對(duì)現(xiàn)有代碼的外觀有非常強(qiáng)的先驗(yàn),并且該先驗(yàn)實(shí)際上是完全相同的代碼。所以,你可以做的是,將原始代碼的部分反饋回模型,然后模型大多數(shù)情況下都會(huì)同意,“好吧,我只是要把這段代碼原樣輸出。”

所以,你可以并行處理所有這些行,只要使用足夠多塊即可。然后最終你會(huì)達(dá)到一個(gè)分歧點(diǎn),模型現(xiàn)在將預(yù)測(cè)與原始代碼不同的文本。它會(huì)生成這些token,然后,在足夠多的token與原始代碼匹配后,我們會(huì)重新開始以代碼塊為單位進(jìn)行預(yù)測(cè)。

這實(shí)際上看起來就像是正常編輯代碼的一個(gè)更快版本。所以它看起來就像是模型重寫所有代碼的一個(gè)更快版本。因此,我們可以使用與diff相同的接口,但它的流式傳輸速度會(huì)快得多。

七、GPT和Claude在編程上哪個(gè)更勝一籌?

Lex:哪個(gè)大語(yǔ)言模型更擅長(zhǎng)編程?GPT和Claude,在編程方面,哪個(gè)更勝一籌?

Aman:我認(rèn)為沒有哪個(gè)模型能在所有我們認(rèn)為重要的類別中都優(yōu)于其他模型,這些類別包括速度、編輯代碼的能力、處理大量代碼的能力、長(zhǎng)文本上下文,以及其他幾個(gè)因素和編程能力。我現(xiàn)在會(huì)說總體上最好的是Sonnet。我認(rèn)為這是大家的共識(shí)。

o1也非常有趣,它非常擅長(zhǎng)推理。所以,如果你給它一些很難的編程面試風(fēng)格的問題或者領(lǐng)導(dǎo)代碼問題,它能做得很好,但它似乎不如Sonnet那樣能理解你的大致意圖。如果你看看其他很多前沿模型,我有一個(gè)疑慮,那就是感覺它們不一定好……我不是說它們?cè)诨鶞?zhǔn)測(cè)試上訓(xùn)練,但它們?cè)诨鶞?zhǔn)測(cè)試中的表現(xiàn)確實(shí)非常好,相對(duì)于所有中間的東西。

所以如果你嘗試所有這些基準(zhǔn)測(cè)試和它們?cè)u(píng)估的分布中的東西,它們會(huì)做得很好。但是,當(dāng)你把它們稍微推離這個(gè)范圍時(shí),Sonnet是我認(rèn)為在保持相同能力方面做得最好的。你在基準(zhǔn)測(cè)試中擁有的能力與嘗試指示它執(zhí)行任何與編程相關(guān)的事情時(shí)擁有的能力相同。

Sualeh:順便說一下,這是一個(gè)非常困難且至關(guān)重要的細(xì)節(jié),基準(zhǔn)測(cè)試與真正的編程之間的區(qū)別在于,真正的編程并不是面試風(fēng)格的編程。人類有時(shí)會(huì)說半吊子的英語(yǔ),有時(shí)你會(huì)說,“哦,按照我之前做的那樣做。”有時(shí)你會(huì)說,“添加這個(gè)東西,然后為我做這個(gè)其他事情,然后制作這個(gè)UI元素。”但很多事情都是依賴于上下的。你真的想要理解人類,然后按照人類的意愿去做,而不是……也許抽象地說,面試問題是非常明確具體的。它們?cè)诤艽蟪潭壬弦蕾囉诿鞔_說明,而人類的東西則不那么明確。

Aman:關(guān)于Claude,我聽到過一個(gè)有趣的觀點(diǎn),我認(rèn)為AWS有不同的芯片,我懷疑它們與Nvidia GPU的數(shù)值略有不同,有人推測(cè)Claude性能下降可能與在AWS Bedrock上使用的量化版本與Anthropics GPU上運(yùn)行的版本不同有關(guān)。

八、Preempt系統(tǒng)可自動(dòng)實(shí)現(xiàn)預(yù)想效果

Lex:在這一切中,一個(gè)好的提示(Prompt)扮演著什么角色?

Arvid:我認(rèn)為這取決于你使用的是哪個(gè)模型,它們都有細(xì)微的差別,對(duì)不同的提示反應(yīng)也不同。但我認(rèn)為,最初的GPT-4和去年的某些模型,它們對(duì)提示相當(dāng)敏感,而且它們的上下文窗口也很校所以我們有很多與代碼庫(kù)相關(guān)的信息,這些信息可能在提示中會(huì)很有用。

你有文檔、你添加的文件、你有對(duì)話歷史,然后問題就來了,你如何決定實(shí)際上要把什么放進(jìn)提示里,特別是當(dāng)你的空間有限時(shí)?對(duì)于今天的模型,即使你有長(zhǎng)上下文,填滿整個(gè)上下文窗口就意味著它會(huì)變慢。這意味著有時(shí)模型實(shí)際上會(huì)感到困惑,而且有些模型比其他模型更容易困惑。

我們內(nèi)部有一個(gè)系統(tǒng)叫做Preempt,它在這方面對(duì)我們有一些幫助。我認(rèn)為它是為我們有8000個(gè)token上下文窗口的時(shí)代建立的,它有點(diǎn)類似于當(dāng)你在制作一個(gè)網(wǎng)站時(shí)。你希望它在手機(jī)上能正常工作,你希望它在桌面上也能正常工作,而你有這些動(dòng)態(tài)信息,但你沒有固定的布局。

例如,如果你設(shè)計(jì)一本印刷雜志,你知道你可以把東西放在哪里,但是當(dāng)你有一個(gè)網(wǎng)站或者一個(gè)提示時(shí),你有這些輸入,然后你需要格式化它們,以便它們能總是正常工作,即使輸入非常大,你可能必須削減一些內(nèi)容。所以我們的想法是,好吧,讓我們從中獲得一些啟發(fā)。

設(shè)計(jì)網(wǎng)站的最佳方式是什么?我們非常喜歡的是React以及它的聲明式方法,你在JavaScript中使用JSX,然后直接聲明:這就是我想要的,我認(rèn)為這個(gè)部分比其他部分具有更高的優(yōu)先級(jí)或更高的Z軸順序。在網(wǎng)頁(yè)設(shè)計(jì)中,你有一個(gè)渲染引擎,就像Chrome一樣,在Cursor中它是一個(gè)preempt渲染器,它會(huì)將所有內(nèi)容都放在頁(yè)面上。你只需說明你想要的效果,渲染器會(huì)自動(dòng)幫你實(shí)現(xiàn)。我們發(fā)現(xiàn)這鐘方法非常有幫助,而且它的作用隨著時(shí)間的推移已經(jīng)發(fā)生了變化。

最初它是為了適應(yīng)較小的上下文窗口,而現(xiàn)在它在拆分進(jìn)入提示詞的數(shù)據(jù)和實(shí)際生成方面發(fā)揮了很大作用。因此,它更容易調(diào)試,因?yàn)槟憧梢孕薷奶崾驹~,然后在舊的提示上進(jìn)行測(cè)試,直接查看你的修改是否真的提升了整個(gè)評(píng)估集的表現(xiàn)。

Lex:所以你們是真的用JSX來提示嗎?

Arvid:是的。我們有一個(gè)文件組件,它接收光標(biāo)。通常在你的文件中有一行光標(biāo)所在的位置,那可能是最重要的一行,因?yàn)槟鞘悄阏诓榭吹囊恍。然后你可以給出優(yōu)先級(jí)。而且,如果你有很多來自整個(gè)代碼庫(kù)的代碼塊,你可以使用檢索和嵌入等重新排序分?jǐn)?shù)來為這些組件添加優(yōu)先級(jí)。

Lex:那么當(dāng)人類提問時(shí),也應(yīng)該嘗試使用那樣的東西嗎?這是否意味著問題會(huì)變得松散和混亂,還是這樣的系統(tǒng)應(yīng)該鼓勵(lì)人們更清晰地表達(dá)?

Arvid:我認(rèn)為我們的目標(biāo)是,你應(yīng)該只做對(duì)你來說最自然的事情,然后我們的工作就是弄清楚如何實(shí)際檢索到相對(duì)重要的事情,以便你的思考是有意義的。

Lex:模型選擇回應(yīng)與一般回應(yīng)有多難?這很難,如何處理不確定性。我是否選擇詢問更多信息以減少歧義?

Sualeh:我們最近為Cursor添加了一個(gè)加入文件的功能。當(dāng)你在編輯代碼或輸入內(nèi)容時(shí),模型會(huì)嘗試預(yù)測(cè)你正在做什么,如果模型發(fā)現(xiàn)有不確定的地方,它會(huì)猜測(cè)你可能在編寫某種API。然后,模型會(huì)查看你的歷史記錄,推測(cè)哪些文件與當(dāng)前的編輯內(nèi)容相關(guān)。

這里有一個(gè)技術(shù)上的難題,就是如何在所有歷史記錄中找到相關(guān)的信息,判斷在當(dāng)前的提示詞下哪些文件最重要。雖然這個(gè)功能還處于試驗(yàn)階段,但相信我們會(huì)逐步完善它,但我們想展示出這個(gè)想法:你是否想添加這個(gè)文件、那個(gè)文件,以便模型幫你編輯?

也許你在編寫一個(gè)API,你也應(yīng)該需要編輯使用這個(gè)API的客戶端和服務(wù)器代碼,那么API發(fā)生變化時(shí),客戶端和服務(wù)器代碼也需要相應(yīng)更新。

Cursor可以做的是,當(dāng)你在編寫提示或代碼時(shí),在你按下回車之前,模型可以幫你找到這些可能需要一起修改的部分。這樣做的好處是,可以提前解決一些不確定性,確保所有相關(guān)的代碼都被正確更新,而不需要手動(dòng)去查找和同步這些改動(dòng)。

九、我們正在接近AGI時(shí)代,但AI Agent還不實(shí)用

Lex:你們?cè)趺纯碅gent?Agent有多有用?

Arvid:我覺得Agent就像是人類,你能感覺到你正在接近AGI,因?yàn)槟隳芸吹揭粋(gè)演示,它表現(xiàn)得就像一個(gè)真人,這真的很酷。我認(rèn)為Agent在很多事情上還不是特別有用,但我們已經(jīng)越來越接近它們真正變得有用的階段了。

所以我覺得有些類型的任務(wù),有Agent的話會(huì)更好。例如,如果我們有一個(gè)bug,有時(shí)你不能在聊天輸入框中使用Command+C和Command+V,這是一個(gè)非常明確的任務(wù),我只需要用兩句話來說:“這個(gè)不能用,請(qǐng)修復(fù)它。”然后我會(huì)很樂意有一個(gè)Agent,它會(huì)自動(dòng)去處理,修復(fù)這個(gè)bug,然后我回來檢查修復(fù)情況。

它會(huì)找到正確的文件,嘗試重現(xiàn)bug,修復(fù)它,然后驗(yàn)證它是否正確。這可能是一個(gè)需要很長(zhǎng)時(shí)間的過程。所以我覺得我會(huì)很喜歡這樣。而且我覺得在編程中,經(jīng)常有人認(rèn)為Agent會(huì)取代所有的編程工作。我不認(rèn)為我們這么認(rèn)為,因?yàn)楹芏嗑幊坦ぷ鳎芏鄡r(jià)值在于迭代,或者說你其實(shí)不想一開始就明確指定什么,因?yàn)槟阏娴牟恢滥阆胍裁,直到你看到了初始版本,然后你想在此基礎(chǔ)上進(jìn)行迭代,然后提供更多的信息。

所以在很多編程工作中,我認(rèn)為你實(shí)際上想要的是一個(gè)即時(shí)的系統(tǒng),它能立即給你一個(gè)初始版本,然后你可以非?焖俚剡M(jìn)行迭代。

Lex:比如最近推出的ReplicaAgent,它可以設(shè)置開發(fā)環(huán)境,解決軟件包問題,配置一切,包括配置數(shù)據(jù)庫(kù)和部署應(yīng)用。這也是你夢(mèng)想中的一部分嗎?

Arvid:我覺得是的,對(duì)于某些類型的編程工作,這真的很酷。

Lex:這在Cursor的范圍內(nèi)嗎?

Arvid:是的,我們目前并沒有積極地在做這件事,但可以肯定的是我們想讓程序員的生活更輕松、更有趣,有些事情真的很乏味,你需要經(jīng)過一系列步驟,你想把這些事情交給Agent去做。然后有些事情,你可以讓一個(gè)Agent在后臺(tái)工作,同時(shí)你也在工作。比如說,你有一個(gè)同時(shí)涉及后端和前端的PR(Pull Request),你在前端工作,然后你可以讓一個(gè)后臺(tái)Agent去處理后端部分,當(dāng)你開始處理后端部分的PR時(shí),你就已經(jīng)有了一些初始代碼可以迭代了。所以這也會(huì)很酷。

十、影子工作區(qū),在后臺(tái)運(yùn)行代碼

Arvid:首先,我們要明確的是,我們希望在后臺(tái)進(jìn)行大量的操作,并且我們正在嘗試很多內(nèi)容。目前,除了緩存預(yù)熱或找出命令鍵提示所需的正確上下文之外,我們并沒有太多其他后臺(tái)操作。但我們的想法是,如果能真的在后臺(tái)進(jìn)行計(jì)算,那么就可以幫助你預(yù)測(cè)更長(zhǎng)時(shí)間范圍內(nèi)的操作,而不僅僅是預(yù)測(cè)你接下來要寫的幾行代碼。

而是預(yù)測(cè)在接下來的10分鐘里,你可能會(huì)做什么。通過在后臺(tái)進(jìn)行計(jì)算,我們可以花更多的計(jì)算資源來做這件事。所以我們實(shí)施的影子工作區(qū)(Shadow Workspace)的概念,并在內(nèi)部進(jìn)行實(shí)驗(yàn),是為了真正利用后臺(tái)計(jì)算的優(yōu)勢(shì),我們需要給模型提供某種反饋信號(hào),不然可以通過讓模型思考更長(zhǎng)時(shí)間來獲得更高的性能,比如o1就是一個(gè)很好的例子。

但另一種提高性能的方法是讓模型進(jìn)行迭代并獲得反潰對(duì)于程序員來說,一個(gè)非常重要的反饋來源是語(yǔ)言服務(wù)器。它存在于大多數(shù)不同的語(yǔ)言中,并且每種語(yǔ)言都有一個(gè)單獨(dú)的語(yǔ)言服務(wù)器。它可以告訴你“你在這里使用了錯(cuò)誤的類型”,并給出錯(cuò)誤提示,或者它還可以跳轉(zhuǎn)到定義,并理解你的代碼結(jié)構(gòu)。TypeScript語(yǔ)言服務(wù)器是由TypeScript團(tuán)隊(duì)開發(fā)的,Rust語(yǔ)言服務(wù)器是由Rust團(tuán)隊(duì)開發(fā)的,它們都通過語(yǔ)言服務(wù)器協(xié)議與VS Code進(jìn)行交互。這樣,VS Code就不需要內(nèi)置所有不同的語(yǔ)言,而是可以使用現(xiàn)有的編譯器基礎(chǔ)結(jié)構(gòu)。

這是為了代碼檢查、跳轉(zhuǎn)到定義以及查看你正在使用的正確類型。當(dāng)你在處理一個(gè)大型項(xiàng)目時(shí),類型檢查和引用查找功能都是必不可少的。如果沒有這些功能,就很難在大型項(xiàng)目中編寫代碼。

Lex:在Cursor中是如何使用語(yǔ)言服務(wù)器協(xié)議進(jìn)行通信的嗎?

Arvid:在Cursor中,我們使用語(yǔ)言服務(wù)器協(xié)議向程序員展示信息,就像在VS Code中一樣,但我們的想法是,我們還想將這些信息展示給智能模型,并且我們想在不影響用戶的情況下做到這一點(diǎn),也就是說,我們想在后臺(tái)進(jìn)行這些操作。

影子工作區(qū)的想法是,我們可以創(chuàng)建一個(gè)隱藏的Cursor窗口這樣你就可以在它里面設(shè)置這個(gè)標(biāo)志,然后把它隱藏起來。雖然你看不到它,但它確實(shí)存在。在這個(gè)窗口中,AIAgent可以隨意修改代碼,只要它們不保存修改,因?yàn)檫@仍然是同一個(gè)文件夾。然后,它們可以從linters(代碼檢查工具)中獲得反饋,跳轉(zhuǎn)到定義,并對(duì)代碼進(jìn)行迭代。

這是我們最終想要實(shí)現(xiàn)的目標(biāo),也是我們博客文章主要討論的內(nèi)容,因?yàn)閷?shí)現(xiàn)這一點(diǎn)有點(diǎn)棘手。我們希望它在用戶的機(jī)器上運(yùn)行,以便完全模擬用戶的環(huán)境。在Linux上,我們可以做一些很酷的事情,比如鏡像文件系統(tǒng),并讓AI在文件級(jí)別上進(jìn)行操作,但實(shí)際上,這些操作是存儲(chǔ)在內(nèi)存中的。我們可以創(chuàng)建一個(gè)類似于內(nèi)核的擴(kuò)展來實(shí)現(xiàn)這一點(diǎn)。而在Mac和Windows上,這有點(diǎn)難,但這是一個(gè)有趣的技術(shù)問題,所以我們?cè)谶M(jìn)行這項(xiàng)研究。

Aman:一個(gè)可能有些粗糙但很有趣的想法是,對(duì)保存操作進(jìn)行鎖定。這樣,你可以讓語(yǔ)言模型在保存到磁盤時(shí)鎖定,然后你就不必在保存到磁盤的文件的真實(shí)版本上操作,而是在操作影子工作區(qū)中的那些未保存的內(nèi)容。你仍然可以獲得錯(cuò)誤提示,并可以在其中編寫代碼。然后,當(dāng)你嘗試運(yùn)行代碼時(shí),會(huì)出現(xiàn)一個(gè)小警告,提示有鎖存在,這時(shí)你可以從語(yǔ)言服務(wù)器或影子工作區(qū)中釋放鎖,以便并發(fā)地執(zhí)行其他操作。

十一、模型查詢bug仍有困難,Open o1也不例外

Lex:允許模型修改文件是一個(gè)令人興奮的未來,雖然這聽起來也有些嚇人。設(shè)想AI agent可以自動(dòng)執(zhí)行一系列任務(wù),用戶第二天只需對(duì)結(jié)果進(jìn)行審查,AI就好像你的同事一樣。

Aman:我認(rèn)為,模型在可運(yùn)行性方面會(huì)有不同情況。執(zhí)行一些簡(jiǎn)單任務(wù)時(shí),用戶可以在幾分鐘內(nèi)順利完成,在本地機(jī)器上運(yùn)行也是合理的。而執(zhí)行一些需要更長(zhǎng)時(shí)間以及更大變動(dòng)的任務(wù)時(shí),則需要在遠(yuǎn)程的沙盒環(huán)境中完成。如何精準(zhǔn)將用戶環(huán)境重現(xiàn)在遠(yuǎn)程沙盒中,并能確保代碼運(yùn)行結(jié)果的一致性是極具挑戰(zhàn)的。

Sualeh:我很好奇,你們(用戶)想要什么樣的編碼agent?幫助你們找到漏洞?還是實(shí)現(xiàn)一些新的功能?

Lex:編碼方面,我認(rèn)為應(yīng)該去關(guān)注查找各種級(jí)別的bug,尤其是邏輯錯(cuò)誤,以及實(shí)現(xiàn)方向上的錯(cuò)誤。

Aman:這些模型在簡(jiǎn)單地提示下并不善于尋找和發(fā)現(xiàn)錯(cuò)誤。它們的校準(zhǔn)非常差,即便是最聰明的模型o1也是如此。

Lex:您能解釋一下嗎?

Aman:我認(rèn)為這些模型都能夠很好地反映預(yù)訓(xùn)練數(shù)據(jù)的分布,隨著損失函數(shù)的降低,模型的泛化能力也在增強(qiáng)。但現(xiàn)在損失函數(shù)的降低已足夠多,以至于模型能夠?qū)崿F(xiàn)全面的泛化。我們主要在前沿領(lǐng)域使用模型,用它們進(jìn)行代碼生成并對(duì)問題進(jìn)行回答。在預(yù)訓(xùn)練階段,GitHub上的大量代碼,數(shù)量高達(dá)數(shù)萬億個(gè)token,Stack Overflow和GitHub Issues等平臺(tái)上也有大量問題和答案,都為任務(wù)提供了豐富的數(shù)據(jù)。

但當(dāng)你嘗試推動(dòng)其中一些在網(wǎng)絡(luò)上并不常見的事情時(shí),比如根據(jù)已有的編輯來預(yù)測(cè)下一個(gè)編輯的Cursor Tab目標(biāo),模型的脆弱性就會(huì)顯現(xiàn)出來。

另一個(gè)很好的例子是bug檢測(cè),因?yàn)閷?shí)際上并沒有太多真實(shí)的檢測(cè)bug并提出修復(fù)建議的例子,所以模型在這方面會(huì)遇到很大的困難。

但我認(rèn)為,這同樣是一個(gè)模型遷移的問題,我們需要將其他模型遷移到Cursor Tab上,在將非常擅長(zhǎng)代碼的通用模型遷移到bug檢測(cè)任務(wù)時(shí),效果應(yīng)該也不錯(cuò),只是需要我們稍做引導(dǎo)。

Sualeh:很明顯,我認(rèn)為模型非常了解代碼。當(dāng)它們?cè)陬A(yù)訓(xùn)練過程中,或許已經(jīng)能夠粗略地察覺到代碼的問題所在。這是因?yàn)橛行┤艘呀?jīng)對(duì)這些錯(cuò)誤進(jìn)行了嚴(yán)格的校準(zhǔn)。

但當(dāng)用模型編程的時(shí)候,比如編寫數(shù)據(jù)庫(kù),這是很龐大的數(shù)據(jù)信息,即便設(shè)置了很多嚴(yán)格的校準(zhǔn)程序,可能錯(cuò)誤也還是很難被修正。

十二、危險(xiǎn)代碼標(biāo)注存爭(zhēng)議,開發(fā)團(tuán)隊(duì)并不看好賞金制度

Lex:人類也很難判斷代碼的重要性。如果某行代碼可能造成嚴(yán)重后果,應(yīng)該添加“這行代碼是危險(xiǎn)的”這一注釋。

Arvid:全部大寫,重復(fù)十次

Lex:是的,即使是同一個(gè)人也可能會(huì)忘記單個(gè)代碼的危險(xiǎn)性。

Arvid:我認(rèn)為在一定程度上這也適用于今天的AI模型,如果你真的在每一行中都標(biāo)注dangerous,dangerment,dangerous的話,模型也會(huì)更加關(guān)注這些,并且更有可能在該區(qū)域發(fā)現(xiàn)錯(cuò)誤。

Lex:明確標(biāo)注代碼的潛在危害程度是一種良好的實(shí)踐。

Arvid:但這種做法存在爭(zhēng)議,例如Sualeh就不太喜歡。

Sualeh:雖然從美學(xué)角度來看我不喜歡這種做法,但它確實(shí)對(duì)模型和容易遺忘代碼危險(xiǎn)性的人們很有幫助,可以避免一些小的錯(cuò)誤導(dǎo)致嚴(yán)重的情況,例如服務(wù)器宕機(jī)。

Aman:即使是普通的文檔字符中,人們?cè)谛薷拇a時(shí)也經(jīng)常會(huì)忽略,因此需要明確指出潛在風(fēng)險(xiǎn)。

Lex:人們?cè)谛薷拇a時(shí)往往只考慮如何改進(jìn)功能,而忽略了潛在的風(fēng)險(xiǎn)。

Arvid:如果能夠?qū)λ写a進(jìn)行形式化驗(yàn)證,就可以確保不會(huì)引入bug。

Aman:這個(gè)設(shè)想中的未來具體會(huì)是什么樣子?

Arvid:我認(rèn)為人們可能不再需要編寫測(cè)試了,模型會(huì)根據(jù)代碼自動(dòng)生成規(guī)范,用戶只需審查規(guī)范。同時(shí),智能推理模型會(huì)計(jì)算出代碼是否符合規(guī)范。這種方式適用于大多數(shù)函數(shù)。

Michael:規(guī)范的生真的容易嗎?為軟件明確人類的意圖是具有難度的,畢竟有些想法很難指定,也很難證明它是否真的能夠符合你的想法去執(zhí)行。

Arvid:您認(rèn)為規(guī)范很難生成?

Michael:對(duì)于難以用規(guī)范語(yǔ)言描述的需求,形式驗(yàn)證并不可靠。

Arvid:即使有大量的規(guī)范文檔也難以達(dá)成?

Michael:規(guī)范可以取代單元測(cè)試。

Arvid:但規(guī)范語(yǔ)言可以不斷發(fā)展,以涵蓋更多需求。

Lex:這一設(shè)想是否適用于整個(gè)代碼庫(kù),而不僅僅是單個(gè)函數(shù)?

Arvid:的確,對(duì)整個(gè)代碼庫(kù)進(jìn)行形式化驗(yàn)證更難,但這是值得追求的目標(biāo),并且從理論上是可行的。例如,最近有一些研究可以對(duì)硬件進(jìn)行形式化驗(yàn)證,包括C代碼、GCC編譯器和Verilog硬件描述語(yǔ)言。大型代碼庫(kù)也類似于多層系統(tǒng),如果可以分解并分別驗(yàn)證每個(gè)部分,那么形式化驗(yàn)證整個(gè)代碼庫(kù)應(yīng)該是可能的。不過,規(guī)范問題確實(shí)是個(gè)挑戰(zhàn)。

Aman:如何處理副作用和外部依賴?例如調(diào)用Stripe API?

Sualeh:Stripe為其API編寫了一個(gè)規(guī)范。

Aman:是否所有外部依賴都可以提供規(guī)范?例如,如果程序中使用了語(yǔ)言模型作為原語(yǔ),如何將其納入形式化驗(yàn)證?

Arvid:這也是可能的。

Aman:如何證明語(yǔ)言模型效果?

Arvid:可以證明語(yǔ)言模型的對(duì)齊性,或者證明它能夠給出正確的答案。

Sualeh:這是最終的夢(mèng)想。

Lex:如果這能夠?qū)崿F(xiàn),將有助于確保代碼的正確性和AI的安全性。

Lex:既然模型在bug查找方面存在困難,那么未來的希望在哪里?

Sualeh:希望模型首先能夠幫助發(fā)現(xiàn)一些簡(jiǎn)單的bug,例如off-by-one錯(cuò)誤或注釋與代碼不一致的情況。最終,模型應(yīng)該能夠發(fā)現(xiàn)更復(fù)雜的bug。

Michael:強(qiáng)大的bug查找模型對(duì)于實(shí)現(xiàn)AI編程至關(guān)重要。如果AI能夠自動(dòng)生成代碼,那么也需要能夠驗(yàn)證代碼的正確性。這不僅是為了幫助人類程序員,也是為了驗(yàn)證AI生成的代碼。

Arvid:是的,但實(shí)際上是怎么做到的呢?有一個(gè)流行的想法是這樣的,引入bug比找到bug更容易,因此可以訓(xùn)練一個(gè)模型并引入一些錯(cuò)誤代碼,然后就可以訓(xùn)練一個(gè)反向錯(cuò)誤的模型,并用其中的合成數(shù)據(jù)去尋找錯(cuò)誤。這是一個(gè)不錯(cuò)的例子。

Michael:還可以利用大型模型和代碼之外的信息來輔助查找bug,例如通過代碼執(zhí)行軌跡和調(diào)試器信息。bug查找工具可能會(huì)有兩種不同的產(chǎn)品形態(tài),其一是在后臺(tái)運(yùn)行的快速模型,用于發(fā)現(xiàn)常見的bug。其二是用于解決特定bug的高計(jì)算量模型,用戶可以支付一定的費(fèi)用去使用。

Lex:是否考慮過用資金將這些整合起來?如果模型能夠找到bug或生成高質(zhì)量的代碼,我愿意付費(fèi)。前幾天,我用Cursor模型生成了三個(gè)完美的函數(shù),主要用于與YouTube API交互,為我提供多語(yǔ)言字幕更新功能。

API文檔不是很好,而且有代碼交叉現(xiàn)象,我用谷歌搜索得不到確切信息,只有一些令人困惑的內(nèi)容,而Cursor生成得則非常完美。我想,真希望能有一個(gè)“打賞”按鈕,寫著“5美元”既可以支持公司發(fā)展,也可以向模型發(fā)送積極反饋信號(hào)比如“Good Job”。在bug查找中,也可以引入類似的賞金機(jī)制。你們有考慮嗎?

Arvid:公司內(nèi)部對(duì)此存在爭(zhēng)議。我認(rèn)為在某種程度上,這取決于你對(duì)人性的信仰程度。我認(rèn)為,如果你不花任何錢就找到一個(gè)bug那非常棒。如果沒發(fā)現(xiàn)錯(cuò)誤,你就不用花錢,而如果你花錢并找到了一個(gè)bug,并且你要點(diǎn)擊的“接受”,那么它會(huì)顯示在括號(hào)中,比如1美元。

這會(huì)存在一種擔(dān)憂,比如,我們?cè)谟?jì)算中投入了很多,也許人們會(huì)復(fù)制粘貼代碼,或者付費(fèi)機(jī)制會(huì)影響用戶的體驗(yàn)。我認(rèn)為,可以考慮把付費(fèi)機(jī)制與產(chǎn)品進(jìn)行分離,如果用戶每月支付一定的費(fèi)用,就可以免費(fèi)獲得所有的功能。

Lex:可以添加一個(gè)“打賞”功能,而不是強(qiáng)制收費(fèi)。

Arvid:即使是打賞也涉及到金錢,可能會(huì)影響用戶體驗(yàn)。

Aman:用戶在分享模型時(shí),人們就已經(jīng)在表達(dá)對(duì)模型的認(rèn)可了。

Michael:如果能夠開發(fā)出一種技術(shù)手段來驗(yàn)證bug是否已被修復(fù),那么就可以不必依賴那些依賴于榮譽(yù)系統(tǒng)的賞金機(jī)制了。

十三、AWS基礎(chǔ)設(shè)施非常可靠,出現(xiàn)問題的概率微乎其微

Lex:終端和代碼之間有多少交互?在終端中運(yùn)行代碼可以獲得多少信息?是否可以實(shí)現(xiàn)一個(gè)循環(huán),讓模型運(yùn)行代碼并建議如何對(duì)代碼進(jìn)行更改?目前代碼及其實(shí)際運(yùn)行是完全分離的嗎?目前,據(jù)我所知是可以在終端中使用“Ctrl+K”來輔助進(jìn)行代碼編寫。

Aman:可以在Check命令和Ctrl+K中使用終端上下文信息。但目前還沒有實(shí)現(xiàn)循環(huán)功能,不過這很有意義。關(guān)鍵問題在于,這個(gè)循環(huán)是在前臺(tái)進(jìn)行還是像之前那樣在后臺(tái)進(jìn)行。

Lex:后臺(tái)運(yùn)行的確很酷,因?yàn)樗梢灾С植煌姆绞竭\(yùn)行代碼。此外,還需要考慮數(shù)據(jù)庫(kù)方面的問題,例如如何防止模型修改數(shù)據(jù)庫(kù)。

Sualeh:有一個(gè)不錯(cuò)的解決方案。即正在開發(fā)一個(gè)新的API,我認(rèn)為PlanetScale和Turbopuffer數(shù)據(jù)庫(kù)都會(huì)支持這種功能。當(dāng)你正在開發(fā)一個(gè)功能并對(duì)數(shù)據(jù)庫(kù)進(jìn)行測(cè)試時(shí),實(shí)際上你并不想針對(duì)廣泛的數(shù)據(jù)庫(kù)進(jìn)行測(cè)試,你可以向數(shù)據(jù)庫(kù)添加一個(gè)分支,而不是去修改主數(shù)據(jù)庫(kù)。

這種技術(shù)的實(shí)現(xiàn)方式是為數(shù)據(jù)庫(kù)的預(yù)寫日志添加分支。數(shù)據(jù)庫(kù)公司需要不斷開發(fā)新功能,而分支功能可能成為未來的一個(gè)趨勢(shì),AI agent也可以利用數(shù)據(jù)庫(kù)分支進(jìn)行測(cè)試。

Lex:在此可以對(duì)基礎(chǔ)設(shè)施相關(guān)信息提出一些問題,Cursor團(tuán)隊(duì)目前是主要使用AWS(亞馬遜云科技)嗎?在使用AWS的過程中,都遇到了什么挑戰(zhàn)?

Arvid:AWS非常出色,無論在何時(shí)使用它的產(chǎn)品總是能夠正常工作,雖然完成其設(shè)置過程可能超級(jí)麻煩。實(shí)話說,AWS確實(shí)值得信賴,如果出現(xiàn)問題,那很可能是你自己的問題。

十四、擴(kuò)展問題是公司發(fā)展難關(guān),隱私保護(hù)也亟待突破

Lex:Cursor作為一家初創(chuàng)公司,在發(fā)展中遇到了哪些挑戰(zhàn)?

Michael:隨著請(qǐng)求量級(jí)的不斷提升,緩存和數(shù)據(jù)庫(kù)等通用組件都會(huì)遇到瓶頸。例如,我們現(xiàn)在已經(jīng)遇到遇到了數(shù)據(jù)表溢出等問題。此外,我們構(gòu)建的一些定制系統(tǒng),例如用于代碼語(yǔ)義索引和問答的檢索系統(tǒng)回答有關(guān)代碼庫(kù)的一些問題,我也一直認(rèn)為這是比較棘手的擴(kuò)展問題之一。

Sualeh:我的超級(jí)高級(jí)工程師朋友們說,在擴(kuò)展過程中很難預(yù)測(cè)系統(tǒng)會(huì)在哪里崩潰。您可以提前嘗試預(yù)測(cè),但是在添加這些額外的內(nèi)容時(shí),總會(huì)發(fā)生一些奇怪的事情。具體而言,Cursor將所有的代碼進(jìn)行分塊,然后發(fā)送代碼進(jìn)行嵌入,然后將嵌入代碼儲(chǔ)存在數(shù)據(jù)庫(kù)中,但實(shí)際上,并不儲(chǔ)存任何代碼。此后就是我們要確保不引入客戶端bug,因?yàn)槲覀儗?duì)這些bug非常嚴(yán)格,服務(wù)器上存儲(chǔ)了許多細(xì)節(jié),一切都是加密的。

因此,技術(shù)挑戰(zhàn)之一就是如何確保本地代碼庫(kù)狀態(tài)與服務(wù)器端狀態(tài)保持一致。技術(shù)層面上來說,我們的做法是將對(duì)服務(wù)器端的哈希值進(jìn)行下載,并對(duì)比本地的哈希值,計(jì)算差額,來確定缺少的文件是什么。但這會(huì)增加網(wǎng)絡(luò)開銷。如果您使用了Cursor,沒有人希望有人一直對(duì)WiFi施加操作。

而且,這也會(huì)對(duì)數(shù)據(jù)庫(kù)造成巨大開銷。它將讀取數(shù)十TB的數(shù)據(jù)庫(kù),每秒鐘接近20TB或者更大的數(shù)據(jù)庫(kù)。這太瘋狂。為此,我們采用了Merkle樹結(jié)構(gòu),只需要協(xié)調(diào)單個(gè)哈希,即項(xiàng)目的根節(jié)點(diǎn),去查看哈希值不匹配的子項(xiàng),并以此類推,可以極大地降低開銷。

但隨著使用人數(shù)的增多,代碼庫(kù)也變得格外龐大。最初,我們對(duì)暗代碼庫(kù)進(jìn)行了重新排列,但如今其規(guī)模已經(jīng)遠(yuǎn)不如一些擁有龐大文件的公司的規(guī)模了。建構(gòu)一個(gè)東西很簡(jiǎn)單,但擴(kuò)展到更多人、更多公司,這是個(gè)難題。我們也在努力解決這些問題。

Aman:的確,索引系統(tǒng)有很多需要琢磨的東西。實(shí)際上嵌入代碼才是瓶頸。為了避免重復(fù)嵌入同樣的代碼塊,我們采用了一種緩存機(jī)制,即將代碼塊的哈希值與對(duì)應(yīng)的向量緩存起來,這會(huì)使得一些公司,在使用Cursor時(shí),代碼嵌入的速度會(huì)大大提升,用戶不需要儲(chǔ)存代碼數(shù)據(jù),只存儲(chǔ)向量數(shù)即可。

Lex:目前,您認(rèn)為代碼庫(kù)索引帶來的最大收益是什么?短期來看,代碼庫(kù)有什么用呢?

Arvid:最明顯的一點(diǎn)是,當(dāng)你想找出大型代碼庫(kù)中特定的一些東西時(shí),你可以通過模糊性的提問來進(jìn)行搜索。比如“我想找到執(zhí)行X功能的地方。”但是你并不知道在文本搜索中要輸出什么語(yǔ)言。你只需要請(qǐng)求聊天,按照enter命令來詢問代碼庫(kù)進(jìn)行聊天。很多時(shí)候,模型通常都能夠給你提供正確位置。

Lex:為什么Cursor不考慮在本地進(jìn)行代碼嵌入等操作?

Arvid:我們也考慮過這種方案,但實(shí)現(xiàn)起來很困難。一些用戶使用的是最新的MacBook Pro,但超過80%的用戶用的是Windows機(jī)器,其中許多機(jī)器功能并不是非常強(qiáng)大,實(shí)際上,本地模型實(shí)際僅適用于最新的計(jì)算機(jī),并且構(gòu)建過程也會(huì)出現(xiàn)很大的開銷。因此,即使我們向這樣做,但也還是很難做得到。

Aman:是的,龐大的數(shù)據(jù)庫(kù)只會(huì)消耗大量的內(nèi)存與CPU。此外,正如Arvid所說的那樣,本地模型建設(shè)存在著巨大阻力,其中似乎都在朝著MOE架構(gòu)發(fā)展,雖然MOE模型對(duì)內(nèi)存帶寬的要求更高,并且有利于本地運(yùn)行,但整體模型的規(guī)模也會(huì)變得更大,需要更多臺(tái)機(jī)器才能運(yùn)行。我認(rèn)為,對(duì)于編碼生成而言,用戶希望能夠用到最好、最聰明、最有能力的模型,但在本地實(shí)現(xiàn)卻很困難。

Arvid:實(shí)際上我很喜歡本地模式的替代方案。我認(rèn)為,它仍然處于研究階段,可以把它想象成,為語(yǔ)言模型推理進(jìn)行同態(tài)加密。用戶可以在本地加密輸入的數(shù)據(jù),然后發(fā)送給服務(wù)器進(jìn)行推理。服務(wù)器可以可以對(duì)加密數(shù)據(jù)進(jìn)行處理,但無法讀取數(shù)據(jù)的具體內(nèi)容,此后服務(wù)器會(huì)把答案發(fā)回給用戶并進(jìn)行加密處理,用戶只能通過解密查看返還的內(nèi)容。目前同態(tài)加密的成本依然很大,如果能夠降低成本,我相信這會(huì)非常值得期待。

世界上有越來越多的信息和數(shù)據(jù)將流經(jīng)兩個(gè)中心化的參與者,但這會(huì)有些令人擔(dān)憂,比如傳統(tǒng)黑客的入侵,這是非?膳碌。用戶可能會(huì)被黑客監(jiān)控。人們努力防止不良入侵者使用AI模型,繼而引入一些監(jiān)控機(jī)制,但這些監(jiān)控機(jī)制又可能被濫用,比如用戶的數(shù)據(jù)可能會(huì)被監(jiān)控。所以我們希望,我們可以解決同態(tài)加密問題。

Lex:我想說,這是所有軟件都面臨的挑戰(zhàn)。就像云可以提供很多便利的功能,人們就越來越依賴它,但是它也存在缺點(diǎn),這就是為什么需要依靠強(qiáng)大的安全措施來抵御一些攻擊。但是也又一些具有影響力的公司控制著這些數(shù)據(jù),這就是我們存在著的現(xiàn)實(shí)生活。

Sualeh:是的,我非常擔(dān)心。例如Anthropic公司有這種負(fù)責(zé)任的擴(kuò)展政策,其中我們是低級(jí)別的,當(dāng)我們進(jìn)入高級(jí)別時(shí),任何模型都會(huì)出于合理的安全原因,都會(huì)希望對(duì)監(jiān)控有所提示。我認(rèn)為這是合理的,但也存在一些弊端,如果所有信息都被見監(jiān)控,那會(huì)非常可怕。

Aman:您認(rèn)為它(AI模型監(jiān)控)與云服務(wù)供應(yīng)商有何不同?

Arvid:我認(rèn)為很多數(shù)據(jù)一開始并不會(huì)流向云供應(yīng)商,而通常你會(huì)把更多的數(shù)據(jù)提供給AI。一開始用戶并不會(huì)把自己的數(shù)據(jù)都放在網(wǎng)絡(luò)上,給那些公司或者模型。但現(xiàn)在AI模型的監(jiān)控更加集中,云服務(wù)中的用戶都可以使用加密密鑰,而AWS對(duì)此卻無能為力,但在這里只有中心化AI模型提供商才能夠看到確切的文本內(nèi)容。

十五、關(guān)于上下文訓(xùn)練中關(guān)于上下文和模型訓(xùn)練的探討

Lex:在使用Cursor時(shí)遇到的一個(gè)問題,當(dāng)我在Python中寫代碼的時(shí)候,會(huì)導(dǎo)入一些內(nèi)容,模型怎么知道我想在上下文中提到哪些內(nèi)容,弄清楚這一點(diǎn)有多困難?

Michael:我認(rèn)為我們將來可以在自動(dòng)計(jì)算上下文方面做的更好。需要注意的是,包含自動(dòng)上下文需要權(quán)衡取舍。因此,你為這些模型包含的上下文愈多,其速度就越慢,這些請(qǐng)求的成本的就越高,這意味著,你可以調(diào)用的模型就會(huì)越來越少。此外,對(duì)于這類模型來說,如果提示中包含了太多信息,它們會(huì)覺得困惑。因此,在上下文中呈現(xiàn)出的信息準(zhǔn)確性和相關(guān)性的標(biāo)準(zhǔn)要十分高,我們也希望能夠做得更好。

我們?cè)趦?nèi)部也嘗試過一些改進(jìn)措施,但目前該領(lǐng)域還存在一些問題。讓語(yǔ)言模型真正達(dá)到理解新信息語(yǔ)料庫(kù)?上下文窗口能否無限擴(kuò)展?模型能夠真正做到關(guān)注無限的上下文嗎?能夠?qū)@些上下文進(jìn)行緩存而不必重復(fù)計(jì)算嗎?還有很多想法都在嘗試中,這些想法類似于在模型權(quán)重學(xué)習(xí)過程中進(jìn)行微調(diào)。同時(shí)作為一家公司,我們很高興可以擁有更好的檢索系統(tǒng),也希望可以做的更好。

Aman:一個(gè)有趣證明是VSCode(跨平臺(tái)源代碼編輯器)。

我們處于一個(gè)分叉節(jié)點(diǎn)。VS Code的代碼是開源的,大型語(yǔ)言模型在預(yù)訓(xùn)練過程中已經(jīng)見過這些代碼,并且經(jīng)過微調(diào)和RLHF(人類反饋)訓(xùn)練,能夠回答與代碼相關(guān)的問題。因此,當(dāng)用戶詢問關(guān)于VS Code的問題時(shí),模型有時(shí)能夠給出正確的答案,盡管有時(shí)也會(huì)出現(xiàn)誤差。如果能夠訓(xùn)練一個(gè)專門的模型并成立一個(gè)理解這些問題的代碼庫(kù),這會(huì)很有研究?jī)r(jià)值。

另外,我們對(duì)于一個(gè)開放性的研究問題充滿興趣,同時(shí)也存在著不確定性,即用戶是希望模型在前端執(zhí)行完所有任務(wù),還是將檢索與代碼生成進(jìn)行分離?未來的幾個(gè)月,可能會(huì)出現(xiàn)一些真正有能力的模型,此后用戶可以單獨(dú)訓(xùn)練一個(gè)非常優(yōu)秀的開源模型并將其作為檢索器,在上下文中為這些更大的模型提供信息。

Lex:如何針對(duì)特定代碼庫(kù)進(jìn)行模型訓(xùn)練?

Aman:有很多方法可以嘗試,需要通過嘗試確定效果。一件非常幼稚的事情,是嘗試復(fù)制VS Code和一些前沿模型做過的事情。所以我們應(yīng)該繼續(xù)進(jìn)行預(yù)訓(xùn)練。某種持續(xù)的預(yù)訓(xùn)練,在繼續(xù)預(yù)訓(xùn)練階段加入特定代碼庫(kù)的數(shù)據(jù),并在指令微調(diào)階段加入關(guān)于該代碼庫(kù)的問題。我們從指令微調(diào)開始,建立一個(gè)關(guān)于代碼的常規(guī)指令微調(diào)數(shù)據(jù)集,繼而拋出更多關(guān)于該存儲(chǔ)庫(kù)中的代碼問題。

你可以獲取更多難以獲得的真實(shí)據(jù),或者可以使用合成數(shù)據(jù)來執(zhí)行一些操作,讓模型對(duì)代碼各種新構(gòu)成部分提出問題。因此,獲取代碼片段,并讓模型對(duì)此提出問題,再將其添加到指令中對(duì)數(shù)據(jù)點(diǎn)進(jìn)行微調(diào),從理論上講,這一過程可能會(huì)解鎖模型理解該代碼庫(kù)問題的能力。

▲播客現(xiàn)場(chǎng)(來源:YouTube)

十六、與OpenAI o1競(jìng)爭(zhēng)靠什么?

Lex:想問一些關(guān)于OpenAI o1的問題,您認(rèn)為測(cè)試計(jì)算系統(tǒng)在編程中的作用是什么?

Aman:我認(rèn)為測(cè)試時(shí)間計(jì)算非常有趣。因此,隨著數(shù)據(jù)量和模型大小的擴(kuò)張,預(yù)訓(xùn)練制度將使損失函數(shù)和下游任務(wù)中的表現(xiàn)越來越好。但是,我們正在面臨一些數(shù)據(jù)壁壘。這意味著,繼續(xù)擴(kuò)大數(shù)據(jù)規(guī)模變得更加困難。

因此,擴(kuò)大測(cè)試時(shí)間計(jì)算是一種有趣的方法,如果現(xiàn)在增加我們使用推理時(shí)間的flop計(jì)算數(shù)量,使用Infer Time時(shí),這些模型總是會(huì)有更多的flop,但現(xiàn)在,我們也許可以使用相同大小的模型并運(yùn)行更長(zhǎng)時(shí)間,并獲得與更大模型規(guī)模相當(dāng)?shù)幕貓?bào)。

某些查詢可能需要100萬億參數(shù)規(guī)模的模型才能處理,但這類查詢可能只占所有查詢的0.1%。在這種情況下,也許有些浪費(fèi)精力。而訓(xùn)練一個(gè)能夠處理99.9%查詢的模型,然后可以采用一種方法為那些真正想要更高智能查詢的人延長(zhǎng)推理時(shí)間。

Lex:如何判斷哪些問題需要更高水平的智能?是否能夠動(dòng)態(tài)地在GPT-4與o1使用之間進(jìn)行切換?

Aman:確實(shí)這是一個(gè)問題,也沒有人真正很好地解決它。團(tuán)隊(duì)在Cursor Tab功能中實(shí)現(xiàn)了簡(jiǎn)單的模型路由,但在GPT-4和o1之間的切換還比較困難。另外,需要什么級(jí)別的AI來確定對(duì)于司機(jī)模型是否太難,可能需要o1模型,但這很難說得清楚。

此外,還需要考慮如何判斷某個(gè)問題對(duì)GPT-4來說是否過難,這可能需要o1級(jí)別的模型才能判斷。

測(cè)試時(shí)間計(jì)算需要一個(gè)完整的訓(xùn)練策略才能正常執(zhí)行。此外,在大型實(shí)驗(yàn)室之外,可能只有OpenAI,但沒人知道它是如何工作的,有一些非常有趣的論文顯示了它們可能提供了怎樣的暗示。因此測(cè)試時(shí)計(jì)算可以歸類為后訓(xùn)練階段,但未來用于訓(xùn)練支持測(cè)試時(shí)計(jì)算的模型的算力可能會(huì)超過預(yù)訓(xùn)練階段。

Lex:如果要構(gòu)建一個(gè)與o1競(jìng)爭(zhēng)的模型,應(yīng)該怎么做?

Aman:也許我們可以訓(xùn)練一個(gè)流程獎(jiǎng)勵(lì)模型。其中有結(jié)果獎(jiǎng)勵(lì)模型和過程獎(jiǎng)勵(lì)模型的區(qū)分,結(jié)果獎(jiǎng)勵(lì)模型是人們接受語(yǔ)言建模訓(xùn)練的傳統(tǒng)獎(jiǎng)勵(lì)模型,它更重視最終結(jié)果。過程獎(jiǎng)勵(lì)模型則需要對(duì)思維鏈進(jìn)行層層劃分。OpenAI去年發(fā)表了一篇關(guān)于過程獎(jiǎng)勵(lì)模型的論文,他們使用人工標(biāo)注的數(shù)據(jù)集訓(xùn)練了一個(gè)過程獎(jiǎng)勵(lì)模型。

目前,過程獎(jiǎng)勵(lì)模型主要用于從多個(gè)模型輸出中選擇最佳答案,但還看不出什么特別優(yōu)秀的地方。眾多的學(xué)術(shù)成果中,人們要做的是從語(yǔ)言模型中抽取一些輸出數(shù)據(jù),然后使用過程獎(jiǎng)勵(lì)模型對(duì)這些進(jìn)行賦分,繼而選出最佳答案。未來,人們就是使用流程獎(jiǎng)勵(lì)模型及其樹狀結(jié)構(gòu),探索思維鏈的多個(gè)分支,繼而評(píng)估分支的質(zhì)量。

Lex:當(dāng)分支質(zhì)量與結(jié)果質(zhì)量密切相關(guān)時(shí),就能夠幫助模型選擇用哪個(gè)分支更好?

Aman:是的,我認(rèn)為也許人們討論開源模型訓(xùn)練流程獎(jiǎng)勵(lì)模型時(shí),采用的是更自動(dòng)化的方式。但目前我并未看到任何東西能夠創(chuàng)造性地使用流程獎(jiǎng)勵(lì)模型來進(jìn)行樹狀結(jié)構(gòu)搜索和編碼。

Lex:有一個(gè)AI安全問題,它更像是哲學(xué)問題。OpenAI曾說,他們向用戶隱藏了思維鏈,這是個(gè)艱難的決定,他們會(huì)在后臺(tái)對(duì)思維鏈進(jìn)行監(jiān)控,以此確保模型不會(huì)試圖對(duì)用戶產(chǎn)生干擾,這確實(shí)令人震撼。但你們對(duì)于隱藏思維鏈這件事有何看法呢?

Michael:我推測(cè),OpenAI可能是為了防止別人從他們的模型中竊取他們的技術(shù)。如果你能夠詳細(xì)看到思維鏈的每個(gè)步驟,那這個(gè)技術(shù)就更容易被獲齲

Lex:所以你也可以用這個(gè)來訓(xùn)練嗎?

Michael:可能大語(yǔ)言模型供應(yīng)商之間會(huì)存在這樣的情況,其中一切API曾經(jīng)提供了他們的所有記錄概率的訪問權(quán)限,但后來又取消了。其中的原因可能就在于,那些訪問了記錄概率的人,可以竊取到模型的技術(shù)信息。

同時(shí)我們也集成o1到Cursor之中,對(duì)于o1我們也有濃厚的興趣,并且我覺得很多程序員也都對(duì)此充滿期待。但無論如何,o1都不是Cursor默認(rèn)體驗(yàn)的一部分,目前我們還沒有找到將其集成到編輯器中的有效方式。所以我認(rèn)為,如何和使用這個(gè)模型(o1),還是個(gè)未知數(shù)。

Sualeh:我們有一些美好想法,但需要找在發(fā)布之前獲得一些適用的場(chǎng)景。

Aman:o1模型還存在很多限制,比如不支持流式輸出,這意味著用戶無法對(duì)輸出過程進(jìn)行監(jiān)督,只能等待文本的出現(xiàn)。另外,它技術(shù)發(fā)展還處于早期階段,有很多需要改進(jìn)的地方,未來會(huì)在增加預(yù)訓(xùn)練數(shù)據(jù)量,擴(kuò)大模型體量的同時(shí),讓搜索工作也變得越來越好。

Lex:GitHub Copilot似乎正在以某種方式集成o1模型,有人認(rèn)為這意味著Cursor要完了?

Michael:我認(rèn)為這個(gè)領(lǐng)域與2010年代的軟件領(lǐng)域有所不同,此處天花板真的非常非常高,所以我認(rèn)為,三到四年內(nèi)最好的產(chǎn)品很快就會(huì)比今天最好的產(chǎn)品更優(yōu)秀。我認(rèn)為即便擁有一個(gè)很好的品牌,但不去創(chuàng)新未來還是會(huì)失敗。接下來幾年我認(rèn)為,關(guān)鍵在于建構(gòu)最好的產(chǎn)品與系統(tǒng),這需要?dú)w結(jié)于建模引擎與編輯體驗(yàn)。

Aman:是的,我認(rèn)為Cursor的優(yōu)勢(shì)在于其不僅僅是快速集成新模型就像o1那樣,同時(shí)它也是深度定制的模型,并且很重視用戶體驗(yàn)。

十七、詳刨三類合成數(shù)據(jù)分類法

Lex:您能解釋一下,合成數(shù)據(jù)分類法是什么嗎?

Aman:合成數(shù)據(jù)是可以從AI中獲得的一些數(shù)據(jù),我認(rèn)為合成數(shù)據(jù)主要有三種。第一類是蒸餾,包括語(yǔ)言模型、輸出token或token的概率分布,可以用來訓(xùn)練能力較弱的模型。這種方法無法生成比原始模型更強(qiáng)大的模型,但可以將昂貴的高延遲模型的能力提取到較小或執(zhí)行特定任務(wù)的模型中。

第二類是合成數(shù)據(jù)利用了某些問題中一個(gè)方向比另一個(gè)方向更容易的特點(diǎn)。例如,在bug檢測(cè)問題中,引入bug比檢測(cè)bug更容易。我們需要做的是,在一個(gè)未經(jīng)充分訓(xùn)練的模型中引入一些bug,然后用這些合成數(shù)據(jù)訓(xùn)練一個(gè)擅長(zhǎng)檢測(cè)bug的模型。

最后一類,是使用語(yǔ)言模型生成可以輕松驗(yàn)證的文本。比如,想對(duì)系統(tǒng)進(jìn)行驗(yàn)證,檢測(cè)語(yǔ)言是否能夠達(dá)到莎士比亞的水平,你可以讓猴子或者打字機(jī)去打字,最終就能夠獲得充分的訓(xùn)練數(shù)據(jù)來培養(yǎng)一個(gè)莎士比亞級(jí)別的語(yǔ)言模型。

對(duì)于具體的引導(dǎo)代碼的代碼,可以通過測(cè)試結(jié)果來判斷這個(gè)測(cè)試代碼是否合格,我們也可以使用模型生成、通過測(cè)試的代碼來對(duì)模型進(jìn)行訓(xùn)練。但我認(rèn)為這種方法很難產(chǎn)生實(shí)際效用,在開放式任務(wù)或者復(fù)雜任務(wù)中,很難找到完美的驗(yàn)證器。

十八、人類反饋聯(lián)動(dòng)AI反饋,共同提升模型訓(xùn)練效果

Lex:人類反饋的強(qiáng)化學(xué)習(xí)(RLHF)和AI反饋的強(qiáng)化學(xué)習(xí)(RLAIF)相比而言如何?對(duì)AI模型性能提升都有什么作用?

Aman:RLHF是根據(jù)人類反饋信息來進(jìn)行訓(xùn)練的,我認(rèn)為,如果能夠?yàn)閷W⒌娜蝿?wù)提供充分的人類反饋那么效果會(huì)非常不錯(cuò)。

RLAIF則比較有趣,它根據(jù)約束條件執(zhí)行工作,比如使用語(yǔ)言模型來驗(yàn)證解決方案比生成一個(gè)解決方案要容易,它更容易奏效,因?yàn)镽LAIF可以實(shí)現(xiàn)一種遞歸循環(huán)。

我們可以將二者進(jìn)行結(jié)合,在兩者之間選擇一個(gè)平衡點(diǎn),比如在模型生成的正確代碼中,加入少量的人工反饋,大概50-100個(gè)示例,就能夠讓模型的先驗(yàn)內(nèi)容與我們的構(gòu)想實(shí)現(xiàn)一致。

這看起來與普通的RLHF不同,普通的RLHF通常需要大量的示例對(duì)獎(jiǎng)勵(lì)模型進(jìn)行訓(xùn)練。

十九、AI會(huì)在實(shí)現(xiàn)AGI前獲菲爾茨獎(jiǎng)?

Lex:根據(jù)你的直覺,生成與驗(yàn)證或者生成與排序哪個(gè)更容易呢?

Aman:根據(jù)直覺而言…可能是這樣的…既定情況下驗(yàn)證更容易,而非找到證明。

Sualeh:AI獲得菲爾茲獎(jiǎng)的可能性有多大?

Sualeh和Arvid:AI更容易獲得菲爾茨獎(jiǎng)。

Aman:雖然AI已經(jīng)解決了許多難題,但現(xiàn)在還不確定定理證明領(lǐng)域中AI效用如何。其次,對(duì)于我們距離解決這些非常非常難的開放性問題還有多遠(yuǎn),我的直覺也不那么準(zhǔn)確了。

Lex:你認(rèn)為AI會(huì)先獲得菲爾茲獎(jiǎng)嗎?而不是物理學(xué)或其他的什么。

Sualeh:我認(rèn)為百分之一百是會(huì)獲得菲爾茨獎(jiǎng)的。我覺得,一些奧數(shù)難題,比如伯奇和斯溫納頓-戴德(Birch and Swinnerton-Dyer conjecture)猜想對(duì)于AI而言還是非常難的,現(xiàn)在還并不知道如何去解決這些問題。

Aman:AI可能會(huì)在實(shí)現(xiàn)AGI之前就獲得菲爾茨獎(jiǎng)。

Sualeh:如果能獲得,我會(huì)非常開心的,我覺得,可能在2028或者2030年就會(huì)實(shí)現(xiàn)吧。

二十、談縮放規(guī)律的未來,“模型越大越好”觀念已失效

Lex:談到縮放規(guī)律(scaling laws)的話題,大家可以就此談一下自己看法,對(duì)于現(xiàn)狀以及未來的發(fā)展有何看法?

Aman:最初OpenAI關(guān)于縮放規(guī)律的論文存在一些錯(cuò)誤。他們提到了關(guān)于優(yōu)化學(xué)習(xí)效率的問題。后來,Chinchilla的論文提到了一個(gè)更準(zhǔn)確的版本。自那時(shí)起,人們開始不再專注于計(jì)算優(yōu)化,而是更加關(guān)注在有限的推理預(yù)算下獲得更優(yōu)異的效果。

Aman:我認(rèn)為,這些縮放規(guī)律曲線的維度遠(yuǎn)比我們最初僅用于計(jì)算參數(shù)數(shù)量和數(shù)據(jù)的維度要豐富得多。比如,推理計(jì)算就是一個(gè)顯而易見的維度。我認(rèn)為,上下文長(zhǎng)度是另一個(gè)明顯的維度。假設(shè)我們關(guān)注推理計(jì)算和上下文窗口這兩個(gè)方面,也許我們想要訓(xùn)練的是某種狀態(tài)空間模型(SSM)。

它們?cè)谔幚沓L(zhǎng)上下文時(shí),成本要低得多,速度也要快得多。即使訓(xùn)練時(shí)的擴(kuò)展屬性可能需要10倍的計(jì)算量,也就是說,需要花費(fèi)10倍的計(jì)算資源來訓(xùn)練模型,以達(dá)到相同的能力水平,但這也是值得的。因?yàn)槲覀冏铌P(guān)心的是超長(zhǎng)上下文窗口下的推理成本預(yù)算。因此,人們未來將會(huì)這些維度上進(jìn)行探索。

Lex:你覺得大家是否還在相信“越大越好”這一理念?

Aman:對(duì)于原始性能和原始AI來說,更大的模型肯定更好。我認(rèn)為,人們還是會(huì)更看好蒸餾技術(shù)。如果我們投入大量、大量的資金進(jìn)行訓(xùn)練,以獲得最具性價(jià)比的模型,那么我們可以調(diào)整多少個(gè)參數(shù)呢?

這一點(diǎn)確實(shí)值得關(guān)注。因?yàn)閮H僅在推理時(shí)間上盡可能多地投入計(jì)算,這種天真的做法,人們已經(jīng)在Llama模型上嘗試過了;蛘,僅僅是對(duì)7B(70億參數(shù))模型進(jìn)行過度訓(xùn)練,使用的token數(shù)量也遠(yuǎn)遠(yuǎn)超過了最優(yōu)需求。

但是,如果你真的在意這件事,也許我們可以像Gamma所做的那樣,不僅僅是在token上進(jìn)行訓(xùn)練,而是實(shí)實(shí)在在地通過最小化與Gemma 27B分布的KL散度來進(jìn)行訓(xùn)練,這就涉及到了知識(shí)蒸餾。實(shí)際上是在所有這些token上,花費(fèi)計(jì)算資源來訓(xùn)練這個(gè)擁有270億參數(shù)的模型,然后將其中的內(nèi)容蒸餾到一個(gè)更小的模型中。

Lex:蒸餾只給你一個(gè)更快的模型,越小意味著越快?

Aman:我認(rèn)為,蒸餾在理論上是從你正在訓(xùn)練的數(shù)據(jù)中提取更多的信號(hào)。這可能是另一種方法,不是完全克服數(shù)據(jù)墻,而是部分地幫助我們克服數(shù)據(jù)墻?梢杂(xùn)練的數(shù)據(jù)有限,讓我們用所有這些token來訓(xùn)練這個(gè)非常大的模型,然后我們將它蒸餾成這個(gè)較小的模型。相比于我們自己去訓(xùn)練模型,蒸餾能夠讓模型獲得更多的信號(hào)。

Lex:如果給你們10萬億美元的預(yù)算,你們會(huì)如何做?

Aman:我認(rèn)為有很多關(guān)于訓(xùn)練這些大型模型的秘密和細(xì)節(jié),只有大型實(shí)驗(yàn)室才知道。即使我努力去做,也會(huì)浪費(fèi)很多錢。

Lex:假設(shè)獲得所有信息,包括訓(xùn)練參數(shù)以及方式方法,未來五年中你會(huì)如何投資才能使你們所說的原始AI實(shí)現(xiàn)最大化?

Sualeh:我覺得,答案很簡(jiǎn)單。你只需盡可能地購(gòu)買足夠多的計(jì)算機(jī),此后每一天所要做的就是購(gòu)買GPU,研究人員就可以根據(jù)目標(biāo)來選擇去訓(xùn)練大模型還是小模型了。

Aman:這涉及到一個(gè)問題,我們是真的受到計(jì)算和金錢的限制,還是受到其他什么制約?

Sualeh:更多是受限于自身觀念吧,但也存在其他一些限制因素。

Lex:你們會(huì)選擇進(jìn)行大量的實(shí)驗(yàn)還是選擇使用這些計(jì)算資源來訓(xùn)練一個(gè)巨大的模型?

Arvid:可能會(huì)選擇通過實(shí)驗(yàn),我覺得現(xiàn)在我們?nèi)允芟抻谖覀兡壳八钟械挠^念。

Aman:我認(rèn)為是這樣的,因?yàn)榧幢銚碛辛耸澜缟纤械挠?jì)算能力和可收集的數(shù)據(jù),最終還是會(huì)受到限制,而且限制的不僅僅是想法,是受制于更卓越的工程技術(shù)。即便擁有世界上所有的資金,真正能在這里有所作為的人并不多。

研究工作中包含大量純粹的、極其艱難的工程技術(shù)工作。舉個(gè)例子來說,如果你看看原始的Transformer論文,將文獻(xiàn)中嵌入的許多非常有趣的概念融合在一起,而且還需要編碼,這些過程,都需要杰出的工程師來完成,就像GNOME Azure。

進(jìn)一步說,讓下一代模型進(jìn)行并行化工作,這需要龐大的工程量,我認(rèn)為要讓所有這些事情都奏效,需要投入大量的工程技術(shù)工作。比如,能夠?qū)⒐こ掏度氤杀窘档?0倍,讓那些擁有美好想法的人真地實(shí)現(xiàn)那些結(jié)構(gòu),提升40%到50%的GPU的利用率,那研究工作的效率可能會(huì)大幅提升。

Sualeh:如果能夠看到一個(gè)清晰的改進(jìn)路線,那么結(jié)果就會(huì)唾手可得。我認(rèn)為,可能OpenAI和其他一些實(shí)驗(yàn)室的做法是對(duì)的,它們抓住了這些成果。比如,GPT-4.25。現(xiàn)有方法是有效的,那就不需要考慮創(chuàng)新,只有當(dāng)現(xiàn)在遇到瓶頸時(shí),才需要?jiǎng)?chuàng)新。我認(rèn)為,如果擁有10萬億美元的預(yù)算,也許實(shí)際上會(huì)先去擴(kuò)大規(guī)模,然后再對(duì)自身的觀念進(jìn)行更新。

只要現(xiàn)有的方法有效,就沒有必要嘗試新的想法。只有當(dāng)現(xiàn)有方法遇到瓶頸時(shí),才需要新的想法。如果擁有10萬億美元的預(yù)算,那么可以先嘗試擴(kuò)大規(guī)模,然后重新評(píng)估想法。

Aman:我們都相信,去實(shí)現(xiàn)AGI需要全新的觀念。我們也相信,可以在更小的規(guī)模內(nèi)去測(cè)試一些新的觀念,而且我們有信心這會(huì)奏效。對(duì)于當(dāng)前的實(shí)驗(yàn)室而言,將有限的研究和開發(fā)人才投注到開發(fā)其他的新想法之中是十分困難的,畢竟現(xiàn)存方案在未來較長(zhǎng)時(shí)間都有效。

二十一、談編程未來,仍需程序員領(lǐng)航

Lex:你們現(xiàn)在處于編程世界的中心。你們認(rèn)為編程,編程的本質(zhì)在未來幾個(gè)月,在未來幾年,甚至十年會(huì)發(fā)生什么變化?

Michael:我認(rèn)為,我們對(duì)未來充滿期待,因?yàn)槌绦騿T在很長(zhǎng)一段時(shí)間內(nèi)都坐在“歷史的駕駛座”上。我們?cè)劦竭^這個(gè)問題,這需要程序員有著高效、代理能力與控制能力,他們可以修改任何你想修改的東西,并且對(duì)你構(gòu)建的內(nèi)容進(jìn)行快速迭代優(yōu)化。

此處,與“同計(jì)算機(jī)對(duì)話形的編程”有差別,與計(jì)算機(jī)對(duì)話,就好比你在Slack上與工程部門或工程師進(jìn)行交談一樣,輸入需求到一個(gè)獨(dú)立的文本框,AI就會(huì)自動(dòng)為你完成這些工作。但這也有些問題,首先會(huì)有延遲性,其次這也意味著放棄了一些控制力。

從根本上說,工程實(shí)際的執(zhí)行情況,是根據(jù)你構(gòu)建的細(xì)微決策來進(jìn)行的,其中人的關(guān)鍵作用是不能被AI取代的,要讓人類坐在“駕駛位”來掌舵。

而未來編程的情況,很可能是程序員可以控制代碼庫(kù)的抽象級(jí)別,可以通過觀察偽代碼的形式對(duì)代碼庫(kù)進(jìn)行編輯。而且程序員也可對(duì)編程軟件的邏輯進(jìn)行修改,保留其控制權(quán),這樣可以大幅度提升生產(chǎn)力。

但這只是一個(gè)模糊的想法,還需要很多細(xì)節(jié)需要解決,最終能否實(shí)現(xiàn)還有待觀察。但是人本身的控制力、效率以及以人為中心觀念是非常重要的。我們認(rèn)為,對(duì)于一些像Arvid之前提到一樣,某些編程,可以把它交給聊天機(jī)器人。但大多數(shù)編程任務(wù)仍需要人深度參與。

Lex:編程的基本技能是否會(huì)發(fā)生根本性的變化?

Michael:實(shí)際上,我認(rèn)為現(xiàn)在是開發(fā)軟件非常令人興奮的時(shí)刻。不管什么時(shí)候,很多代碼依然還是需要查閱很多難以理解的信息。但今天的編程比過去有趣多了,人們開始享受編程。現(xiàn)在的編程讓人具備快速構(gòu)建事物的能力,人們的控制力也被極大提升了。

對(duì)于那些編程人員來說,這也是個(gè)充滿意義的時(shí)期,人們的創(chuàng)意和趣味會(huì)被放大,如果你是程序員,那今天應(yīng)該更加注意這部分的特殊性。

Arvid:我也同意,最近我們正對(duì)代碼庫(kù)進(jìn)行一次比較大的遷移,將Node.js中的Async Local Storage替換為 Context對(duì)象。即使可以借助AI,這個(gè)工作也依然需要我與另一個(gè)工程師耗費(fèi)大概五天的時(shí)間。不過未來,我們可能只需要給AI展示幾個(gè)例子,然后這個(gè)遷移任務(wù),就可以在10分鐘內(nèi)完成。程序員可以借助AI更快的工作,而不需要在事先就考慮太多,而且任何事情,其實(shí)都可以先去嘗試新方法,嘗試的成本并不高。

Aman:我覺得在編程中有兩種方式,其一是努力思考,仔細(xì)尋找解決問題的最佳方法然后用有限時(shí)間來驗(yàn)證。其二是直接執(zhí)行代碼,看是如何執(zhí)行的并就此進(jìn)行更新。我也更認(rèn)同后一個(gè)方案。

Lex:那對(duì)于現(xiàn)在想要學(xué)習(xí)編程的人而言,你們有什么建議呢?應(yīng)該學(xué)習(xí)什么?比如Java亦或者PHP?

Aman:我認(rèn)為,每個(gè)人都有學(xué)習(xí)編程的自身原因。但我覺得,實(shí)際上那些真的熱愛編程的人,會(huì)是最好的程序員。在我們團(tuán)隊(duì)內(nèi)部,很多人在工作后依然會(huì)用Cursor編寫自己的編程,有的人甚至?xí)镜搅璩咳c(diǎn)去做這件事。當(dāng)他們難過的時(shí)候,還會(huì)說“我需要寫點(diǎn)代碼。”來寬慰自己。

這種對(duì)編碼的熱愛,驅(qū)使他們成為了最好的程序員,我也認(rèn)為這些人將會(huì)認(rèn)真投入到那些他們研究的事物之中。我認(rèn)為,未來的編程者們需要會(huì)更多地關(guān)注“你想要?jiǎng)?chuàng)造什么”。

Sualeh:程序員可以通過更豐富的方式表達(dá)自己的意圖。

結(jié)語(yǔ):共建人機(jī)協(xié)同體系,改善程序員生活

Lex最后運(yùn)用Cursor團(tuán)隊(duì)的宣言為本次談話做出總結(jié),在《工程天才》中他們說“我們是一個(gè)應(yīng)用研究實(shí)驗(yàn)室,構(gòu)建不可思議的生產(chǎn)性人機(jī)協(xié)同系統(tǒng)。”

宣言中寫道:“首先,我們正在培養(yǎng)未來的工程師,即人類AI程序員這比任何一個(gè)工程師的效率都高出一個(gè)數(shù)量級(jí)。這種混合型工程師可以輕松地控制代碼庫(kù),并且無需進(jìn)行低熵鍵盤操作。即使在最復(fù)雜的系統(tǒng)中,他們也會(huì)以判斷的速度迭代。通過結(jié)合AI和人類智慧,他們將比最好的純AI系統(tǒng)更聰明、更工程化。我們是一群研究人員和工程師。我們構(gòu)建軟件和模型,在有效性和可能性基礎(chǔ)上進(jìn)行發(fā)明。我們的工作已經(jīng)改善了成千上萬程序員的生活。”

Lex稱,在這個(gè)談話中,至少讓編程更有趣了。

來源:YouTube

贊助本站

相關(guān)內(nèi)容
AiLab云推薦
推薦內(nèi)容
展開

熱門欄目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能實(shí)驗(yàn)室 版權(quán)所有    關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 公司動(dòng)態(tài) | 免責(zé)聲明 | 隱私條款 | 工作機(jī)會(huì) | 展會(huì)港