原文連結: Andrej Karpathy:軟體正在(再次)改變

有請 Tesla 前 AI 主管 Andrej Karpathy

哇,這裡好多人,大家好,嗯,好的,是的,我很高興今天能來到這裡,和大家談談 AI 時代的軟體,我聽說你們很多是學生,像是學士、碩士、博士等等,即將進入業界。我認為現在進入業界確實是一個極其獨特且非常有趣的時機,我認為根本原因在於,軟體正在改變,再一次改變。我說「再一次」是因為我其實已經做過這個演講了,但問題是軟體不斷在改變,所以我其實有很多材料可以創造新的演講內容,而且我認為它正在發生相當根本性的變化。我認為大致上來說,軟體在過去 70 年間並沒有在如此根本的層面上發生太多變化,然後在過去幾年裡,我認為它已經迅速改變了大約兩次。因此,有大量的工作要做,有大量的軟體需要編寫和重寫。

軟體版圖的演進

讓我們來看看軟體的範疇。如果我們把這個看作是軟體的版圖,這是一個非常酷的工具,叫做 map of GitHub,這基本上就是所有已編寫的軟體,這些是在數位空間中執行任務的電腦指令。如果你放大這裡,這些都是不同種類的儲存庫,這是所有已經編寫的程式碼。幾年前,我觀察到軟體正在發生變化,出現了一種新型態的軟體,我當時稱之為 Software 2.0。這裡的想法是,Software 1.0 是你為電腦編寫的程式碼,Software 2.0 基本上是神經網路,特別是神經網路的權重。你不是直接編寫這些程式碼,你更像是在調整資料集,然後運行一個優化器來創建這個神經網路的參數。我認為當時神經網路被視為只是一種不同的分類器,像是決策樹之類的。所以我認為這個框架更為恰當。

而現在,我們實際上擁有的是在 Software 2.0 領域中與 GitHub 等價的東西。我認為 Hugging Face 基本上等同於 Software 2.0 中的 GitHub,還有 Model Atlas,你可以視覺化所有在那裡編寫的程式碼。順便一提,如果你好奇的話,中間那個巨大的圓圈點,是 Flux(圖像生成器)的參數。所以每當有人在 Flux 模型之上進行調整時,你基本上就是在這個空間中創建了一個 git commit,並且創建了一種不同類型的圖像生成器。

軟體的三個世代:1.0、2.0 與 3.0

所以基本上我們有 Software 1.0,它是編程電腦的電腦程式碼;Software 2.0 是編程神經網路的權重。這裡有一個 AlexNet 圖像識別神經網路的例子。到目前為止,我們直到最近才熟悉的所有神經網路,都像是固定功能的電腦,例如將圖像分類等等。我認為已經發生的改變,而且我認為這是一個相當根本的改變,是神經網路透過大型語言模型 (LLM) 變得可程式化了。所以我認為這非常新穎獨特,它是一種新型態的電腦。因此,在我看來,它值得被賦予一個新的稱號:Software 3.0。基本上,你的提示 (prompts) 現在是編程 LLM 的程式,而且值得注意的是,這些提示是用英文寫的,所以這是一種非常有趣的程式語言。

或許總結一下差異,例如,如果你在做情感分類,你可以想像編寫一些 Python 程式碼來做情感分類,或者你可以訓練一個神경網路,或者你可以提示一個大型語言模型。這裡是一個 few-shot prompt 的例子,你可以想像改變它,並以稍微不同的方式編程電腦。所以基本上我們有 Software 1.0、Software 2.0,而且我認為我們正在看到,也許你已經看到很多 GitHub 程式碼不再只是程式碼了,其中夾雜了許多英文。所以我認為一種新型態的程式碼正在成長。它不僅是一種新的程式設計典範,令我驚訝的是它還是用我們的母語英文寫成的。幾年前,當這點讓我大開眼界時,我發了這則推文,我想它吸引了很多人的注意,這是我目前置頂的推文:值得注意的是,我們現在正用英文編程電腦。

軟體堆疊的演變:Tesla Autopilot 的案例

當我在 Tesla 工作時,我們正在開發 Autopilot,試圖讓汽車能夠自動駕駛。我當時展示了這張投影片,你可以想像汽車的輸入在底部,它們通過一個軟體堆疊來產生轉向和加速的指令。我當時觀察到,Autopilot 中有大量的 C++ 程式碼,也就是 Software 1.0 的程式碼,然後裡面有一些神經網路在進行圖像識別。我觀察到,隨著時間推移,當我們讓 Autopilot 變得更好時,神經網路的能力和規模基本上都在增長,此外,所有的 C++ 程式碼都被刪除了,很多最初用 Software 1.0 編寫的功能和能力都被遷移到了 Software 2.0。舉例來說,將來自不同攝影機的圖像以及跨時間的資訊拼接起來,很多是由神經網路完成的,我們因此能夠刪除大量程式碼。所以 Software 2.0 的堆疊確實吞噬了 Autopilot 的軟體堆疊。我當時認為這非常了不起。

LLM:新興的運算典範

我認為我們現在又看到了同樣的情況,基本上我們有了一種新型態的軟體,它正在吞噬整個堆疊。我們有三個完全不同的程式設計典範,我認為如果你要進入這個行業,精通所有這些典範是一個非常好的主意,因為它們各有優缺點,你可能會想用 Software 1.0、2.0 或 3.0 來編程某些功能。你是要訓練神經網路,還是只要提示 LLM?這應該是一段明確的程式碼嗎?等等。所以我們都必須做出這些決定,並且可能需要在這些典範之間流暢地轉換。

我現在想談談的是,首先,我想在第一部分談談 LLM,以及如何看待這個新的典範和生態系統,它看起來是什麼樣子,這個新的電腦是什麼樣子,生態系統又是什麼樣子。我被 Andrew Ng 多年前的一句話所震撼,我想 Andrew 等一下會在我的演講之後發言,但他當時說:「AI 是新的電力。」我確實認為這句話捕捉到了一些非常有趣的點,LLM 現在確實感覺具有公用事業的特性。

LLM 的多重面貌:公用事業、晶圓廠與作業系統

像是 OpenAI、Gemini、Anthropic 等 LLM 實驗室,他們投入資本支出 (capex) 來訓練 LLM,這有點像建立電網。然後有營運支出 (opex) 來透過 API 將這些智能提供給我們所有人,這是透過計量付費的方式完成的,我們按百萬 token 或類似方式付費。我們對這個 API 有很多類似公用事業的需求,我們要求低延遲、高正常運行時間、一致的品質等等。在電力系統中,你會有轉換開關,這樣你就可以在電網、太陽能、電池或發電機之間切換電力來源。在 LLM 中,我們可能有 OpenRouter,可以輕鬆地在現有的不同類型 LLM 之間切換。因為 LLM 是軟體,它們不爭奪實體空間,所以基本上可以有六個電力供應商,你可以在它們之間切換,因為它們不是以如此直接的方式競爭。

而且我認為有點令人著迷的是,我們在過去幾天也看到了,很多 LLM 都宕機了,人們因此卡住無法工作。我認為這點讓我著迷,當最先進的 LLM 宕機時,實際上就像是世界範圍內的「智能限電」,就像電網電壓不穩定一樣,地球就變得更笨了,我們對這些模型的依賴程度已經非常巨大,而且我認為會持續增長。

但 LLM 不僅具有公用事業的特性,我認為公平地說,它們也具有一些晶圓廠 (fabs) 的特性。原因在於,建造 LLM 所需的資本支出其實相當龐大,不僅僅是建造一些發電站之類的。你投入了巨額資金,而且我認為技術樹和技術發展非常迅速。我們正處於一個擁有深厚技術樹、研發秘密集中在 LLM 實驗室內的世界。但我認為這個類比也有點模糊,因為正如我提到的,這是軟體,而軟體的可防禦性較差,因為它非常具有可塑性。所以我認為這是一個值得思考的有趣之處。或許你可以做出很多類比,像是 4 奈米製程節點,可能類似於具有特定最大浮點運算能力的叢集。你可以思考,當你使用 Nvidia GPU 並且只做軟體而不做硬體時,那有點像無廠模式 (fabless model)。但如果你實際上也在建造自己的硬體,並且在 TPU 上訓練,如果你是 Google,那就有點像 Intel 的模式,你擁有自己的晶圓廠。所以我認為這裡有些類比是有道理的。

LLM 如同作業系統

但實際上,我認為最有意義的類比或許是,在我看來,LLM 與作業系統有非常強烈的相似之處。這不僅僅是電力或水,不是那種從水龍頭流出來的商品。這些現在是日益複雜的軟體生態系統,對吧?所以它們不像電力那樣是簡單的商品。令我感到有趣的是,這個生態系統正以非常相似的方式形成,你有少數幾個閉源供應商,如 Windows 或 macOS,然後你有一個開源替代品,如 Linux。我認為對於神經網路,對於 LLM 也是如此,我們有少數幾個相互競爭的閉源供應商,然後或許 Llama 生態系統目前可能比較接近某種可能發展成類似 Linux 的東西。我再次認為現在還為時過早,因為這些只是簡單的 LLM,但我們開始看到它們將變得更加複雜。這不僅僅關乎 LLM 本身,還關乎所有的工具使用、多模態以及所有這些如何運作。

所以當我不久前意識到這點時,我試著把它畫出來,在我看來,LLM 有點像一個新的作業系統。LLM 是一種新型態的電腦,它就像 CPU 一樣,上下文視窗 (context windows) 有點像記憶體,然後 LLM 正在協調記憶體和運算來解決問題,利用所有這些能力。所以如果你這樣看,它確實非常像一個作業系統。

再舉幾個例子,例如,如果你想下載一個應用程式,假設我去 VS Code 下載,你可以下載 VS Code 並在 Windows、Linux 或 Mac 上運行它。同樣地,你可以拿一個 LLM 應用程式,比如 Cursor,然後在 GPT、Claude 或 Gemini 系列上運行它,它只是一個下拉選單。所以在這方面也很相似。

LLM 運算的現狀:重返 1960 年代

更多讓我覺得相似的類比是,我們現在有點像處於 1960 年代的時期,LLM 運算對於這種新型態的電腦來說仍然非常昂貴,這迫使 LLM 集中在雲端,而我們都只是透過網路與之互動的終端客戶 (thin clients),我們沒有人能充分利用這些電腦,因此採用分時共享 (time-sharing) 是合理的,當他們在雲端運行電腦時,我們都只是批次處理中的一個維度。這非常像當時電腦的樣子,作業系統在雲端,所有東西都透過串流傳輸,並且有批次處理。所以個人電腦革命還沒有發生,因為它根本不經濟,沒有意義。但我認為有些人正在嘗試,事實證明,例如 Mac mini 非常適合某些 LLM,因為如果你進行批次大小為 1 的推論,這完全是記憶體受限的,所以這實際上是可行的。我認為這些可能是個人電腦的一些早期跡象,但這還沒有真正發生,目前還不清楚這會是什麼樣子,也許你們中的一些人會發明這是什麼,或者它如何運作,或者這應該是什麼。

也許我還想提一個類比,每當我直接用文字與 ChatGPT 或某些 LLM 交談時,我都感覺像是在透過終端機與作業系統交談,它就是文字,是直接存取作業系統的方式。我認為一個圖形化使用者介面 (GUI) 還沒有以一種通用的方式真正被發明出來,比如 ChatGPT 是否應該有一個不同於僅僅是文字氣泡的 GUI?當然,我們稍後會談到的一些應用程式有 GUI,但如果我的意思是,並沒有一個跨所有任務的 GUI。

LLM 的獨特性:顛覆傳統的技術擴散模式

LLM 在某些相當獨特的方面與作業系統以及早期運算有所不同。我曾寫過關於一個讓我印象特別深刻的特性,這次的情況非常不同:LLM 顛覆了技術擴散的方向,這通常是技術發展中存在的。例如,電力、密碼學、運算、飛行、網際網路、GPS,許多過去不曾存在的新興轉型技術,通常是政府和企業首先使用,因為它們新穎、昂貴等等,然後才逐漸擴散到消費者。但我感覺 LLM 的情況正好相反。也許早期的電腦都是關於彈道學和軍事用途,但 LLM 卻是關於如何煮雞蛋之類的,這確實是我很多時候的用途。所以我真的覺得很神奇,我們有了一個新的神奇電腦,它在幫我煮雞蛋,而不是幫助政府做一些非常瘋狂的事情,比如某些軍事彈道學或某些特殊技術。事實上,企業和政府在採用所有這些技術方面都落後於我們所有人。所以情況正好相反,我認為這或許能為我們如何使用這項技術,或者最初的應用程式在哪裡等方面提供一些啟示。

總結一下到目前為止,LLM 實驗室、LLM,我認為使用這些詞彙是準確的,但 LLM 是複雜的作業系統,它們大約相當於 1960 年代的運算水平,我們正在重新進行運算。它們目前透過分時共享提供,並像公用事業一樣分佈。前所未有的是,它們並非掌握在少數政府和企業手中,而是掌握在我們所有人手中,因為我們每個人都有一台電腦,而且這一切都只是軟體。ChatGPT 就像在一夜之間瞬間傳送到數十億人的電腦上,這太瘋狂了。我真的覺得這太瘋狂了。現在是我們進入這個行業並編程這些電腦的時候了,這太瘋狂了。所以我認為這非常了不起。

理解 LLM 的「心智」:超能力與認知缺陷

在我們編程 LLM 之前,我們必須花一些時間思考這些東西是什麼。我特別喜歡談論它們的「心理學」。我喜歡把 LLM 看作是某種「人的靈魂」(people spirits),它們是對人的隨機模擬。而這個模擬器恰好是一個自回歸的 Transformer。Transformer 是一種神經網路,它以 token 為單位運作,一個接一個地處理,每個 token 的運算量幾乎相等。這個模擬器當然涉及到一些權重,我們用網際網路上所有的文本等資料來擬合它,最終得到了這樣一個模擬器。因為它是在人類數據上訓練的,所以它具有類似人類的突現心理學特徵。

你會注意到的第一件事當然是 LLM 擁有百科全書般的知識和記憶力,它們能記住很多東西,遠超過任何單個人類,因為它們閱讀了太多東西。這其實讓我想起電影《雨人》(Rainman),我非常推薦大家看這部電影,非常棒,我愛這部電影。Dustin Hoffman 在片中飾演一位自閉症學者,他擁有近乎完美的記憶力,他可以讀一本電話簿並記住所有的名字和電話號碼。我覺得 LLM 非常相似,它們可以輕易記住 SHA hash 值和許多不同種類的東西。所以在某些方面,它們確實擁有超能力。

但它們也有一些我稱之為認知缺陷的地方。它們經常產生幻覺,會編造一些東西,並且沒有一個非常好的,至少是不夠充分的自我認知內部模型。雖然這方面有所改善,但並不完美。它們表現出「鋸齒狀智能」(jagged intelligence),在某些解決問題的領域它們是超人類的,然後它們會犯一些基本上沒有人類會犯的錯誤,比如它們會堅持認為 9.11 大於 9.9,或者草莓 (strawberry) 中有兩個 R,這些都是一些著名的例子。但基本上,你可能會踩到一些粗糙的邊緣。所以我認為這也相當獨特。

它們也患有某種順行性遺忘症 (anterograde amnesia)。我想我指的是,如果你有一個新同事加入你的組織,這位同事會隨著時間的推移了解你的組織,他們會理解並獲得大量關於組織的背景知識,他們回家睡覺,鞏固知識,並隨著時間的推移發展專業知識。LLM 本身不會這樣做,這在 LLM 的研發中還沒有真正解決。所以上下文視窗 (context windows) 實際上更像是工作記憶,你必須非常直接地編程工作記憶,因為它們不會預設就變得更聰明。我認為很多人在這方面被類比誤導了。在流行文化中,我推薦大家看這兩部電影:《記憶拼圖》(Memento) 和《我的失憶女友》(51st Dates)。在這兩部電影中,主角的「權重」是固定的,他們的「上下文視窗」每天早上都會被清除,這在工作或維持人際關係時會產生非常大的問題,而 LLM 也一直面臨這種情況。

我想還有一點要指出的是與 LLM 使用相關的安全性限制。例如,LLM 相當容易受騙,它們容易受到提示注入 (prompt injection) 風險的影響,可能會洩露你的數據等等。還有許多其他與安全相關的考量。所以,長話短說,你必須同時思考這個擁有超能力但又有一堆認知缺陷和問題的東西,我們如何編程它們,如何繞過它們的缺陷並享受它們的超能力,同時它們又非常有用。

LLM 帶來的機遇:部分自主應用程式

我現在想轉而談談我們如何使用這些模型的機會,以及一些最大的機會是什麼。這不是一個詳盡的列表,只是我認為對於這次演講來說比較有趣的一些事情。我首先感到興奮的是我稱之為「部分自主應用程式」(partial autonomy apps)。例如,讓我們以編碼為例,你當然可以直接去 ChatGPT,然後開始複製貼上程式碼、錯誤報告等等,獲取程式碼,然後再複製貼上所有東西。你為什麼要這樣做?你為什麼要直接去作業系統?擁有一個專門的應用程式來做這件事要合理得多。所以我認為你們很多人都在使用 Cursor,我也是。Cursor 就是你想要的那種東西,你不想直接去 ChatGPT。我認為 Cursor 是一個非常好的早期 LLM 應用程式的例子,它具有一些我認為在所有 LLM 應用程式中都有用的特性。

特別是,你會注意到我們有一個傳統的介面,允許人類像以前一樣手動完成所有工作。但除此之外,我們現在有了這個 LLM 整合,允許我們以更大的區塊進行操作。所以我認為 LLM 應用程式的一些共享且有用的特性包括:第一,LLM 基本上完成了大量的上下文管理。第二,它們協調對 LLM 的多次呼叫。所以在 Cursor 的情況下,底層有針對你所有文件的嵌入模型、實際的聊天模型、將差異應用於程式碼的模型,而這一切都是為你協調好的。一個非常重要的,我認為可能也沒有得到充分重視的是,特定應用的 GUI 及其重要性。因為你不想只是直接用文字與作業系統交談,文字很難閱讀、解釋、理解,而且你也不想用文字來執行某些操作。所以直接看到一個差異,像是紅色和綠色的變化,看到增加了什麼、減少了什麼,要容易得多。按下 command Y 接受或 command N 拒絕也要容易得多,我不應該需要用文字輸入,對吧?所以 GUI 允許人類審核這些易出錯系統的工作,並加快速度。我稍後會再回到這一點。

最後一個我想指出的特性是,我稱之為「自主性滑桿」(autonomy slider)。例如,在 Cursor 中,你可以只使用 tab 補全,你主要負責。你可以選擇一段程式碼,然後按 command K 來更改那段程式碼。你可以按 command L 來更改整個文件,或者你可以按 command I,讓它放手去做,在整個儲存庫中做任何它想做的事情,這就是完全自主的代理 (agentic) 版本。所以你掌控著自主性滑桿,根據手頭任務的複雜性,你可以調整你願意為該任務放棄的自主程度。

也許再舉一個相當成功的 LLM 應用程式的例子,Perplexity。它也具有許多與我剛才在 Cursor 中指出的非常相似的特性。它打包了大量資訊,協調多個 LLM,它有一個 GUI,允許你審核它的一些工作,例如它會引用來源,你可以想像去檢查它們。它也有一個自主性滑桿,你可以只做一個快速搜索,或者你可以做研究,或者你可以做深度研究然後 10 分鐘後再回來看。所以這些都只是你賦予工具不同程度的自主性。

所以我的問題是,我覺得很多軟體都會變得部分自主。我正在思考這會是什麼樣子,對於你們中許多維護產品和服務的人來說,你們將如何使你們的產品和服務部分自主?LLM 能看到人類能看到的一切嗎?LLM 能以人類能做的所有方式行動嗎?人類能監督並參與這個活動的迴圈嗎?因為再次強調,這些是尚未完善的易出錯系統。Photoshop 中的差異 (diff) 看起來是什麼樣子?等等。而且,很多傳統軟體現在有所有這些開關和各種東西,都是為人類設計的,所有這些都必須改變,變得對 LLM 可用。

與 AI 協作:加速生成與驗證循環

我想強調一點,對於許多這些 LLM 應用程式,我不確定是否得到了應有的重視,那就是我們現在正在與 AI 合作,通常它們負責生成,而我們人類負責驗證。讓這個循環盡可能快地運轉符合我們的利益,這樣我們才能完成大量工作。我認為有兩種主要方法可以做到這一點。第一,你可以大幅加快驗證速度。我認為 GUI 例如在這方面非常重要,因為 GUI 利用了我們所有人頭腦中的電腦視覺 GPU。閱讀文字是費力的,而且不好玩,但看東西很有趣,它就像一條通往你大腦的高速公路。所以我認為 GUI 對於審核系統和視覺化呈現總體而言非常有用。第二,我認為我們必須把 AI 拴緊 (keep the AI on the leash)。我認為很多人對 AI 代理人過於興奮了,給我一個包含 10,000 行程式碼的差異提交到我的儲存庫對我來說沒有用,我仍然是瓶頸,對吧?儘管那 10,000 行程式碼瞬間就出來了,我必須確保這東西沒有引入錯誤,它在做正確的事情,而且沒有安全問題等等。

所以,基本上,讓這兩者的流動非常非常快符合我們的利益,我們必須以某種方式把 AI 拴緊,因為它太容易反應過度了。這就是我在進行 AI 輔助編碼時的感受,如果我只是逐字節編碼,一切都很好很棒,但如果我真的想完成工作,有一個反應過度的代理人在做所有這些事情並不是那麼好。這張投影片不太好,抱歉,但我想我和你們中的許多人一樣,正在嘗試開發一些在我的編碼工作流程中利用這些代理人的方法,並進行 AI 輔助編碼。在我自己的工作中,我總是害怕得到太大的差異,我總是分小步驟、漸進地進行,我想確保一切都好,我想讓這個循環非常快地運轉,我致力於處理單一具體事物的小部分。所以我認為你們中的許多人可能正在開發類似的與 LLM 合作的方式。

我還看到一些部落格文章試圖開發這些與 LLM 合作的最佳實踐。這是我最近讀到的一篇,我覺得相當不錯,它討論了一些技巧,其中一些與如何把 AI 拴緊有關。例如,如果你的提示很模糊,那麼 AI 可能不會完全按照你的意願去做,在這種情況下,驗證將會失敗,你會要求其他東西,如果驗證失敗,你就會開始原地打轉。所以花多一點時間讓你的提示更具體,這樣可以增加成功驗證的機率,你才能繼續前進,這更有意義。所以我認為我們很多人最終都會找到類似這樣的技巧。

在我自己的工作中,我目前也對 AI 和 LLM 出現後教育會是什麼樣子感興趣。對我來說,很大一部分思考是如何把 AI 拴緊。我不認為直接去聊天然後說「嘿,教我物理」是行得通的。我不認為這行得通,因為 AI 會在樹林裡迷路。所以對我來說,這實際上是兩個獨立的應用程式,例如,有一個供教師創建課程的應用程式,然後有一個接收課程並將其提供給學生的應用程式。在這兩種情況下,我們現在都有了一個中間產物——課程,它是可以審核的,我們可以確保它是好的,確保它是一致的,並且 AI 被限制在某個教學大綱、某個專案進展等範圍內。這是把 AI 拴緊的一種方法,我認為這樣做的成功機率要高得多,AI 也不會迷失方向。

我還想順便提一個類比,我對部分自主並不陌生,我想我在 Tesla 為此工作了五年,這也是一個部分自主產品,並且具有許多相同的特性,例如,儀表板上就是 Autopilot 的 GUI,它向我展示神經網路看到了什麼等等。我們有自主性滑桿,在我任職期間,我們為使用者做了越來越多的自主任務。

也許我想簡短地講一個故事,實際上我第一次駕駛自動駕駛汽車是在 2013 年,我有一個在 Waymo 工作的朋友,他提議載我在 Palo Alto 兜一圈。我當時用 Google Glass 拍了這張照片,你們很多人可能太年輕了,甚至不知道那是什麼,但當時這可是風靡一時。我們上了這輛車,在 Palo Alto 的高速公路、街道等地開了大約 30 分鐘。這次駕駛非常完美,沒有任何人工干預,那是 2013 年,距今已經 12 年了。這讓我印象深刻,因為當時我有了這次完美的駕駛、完美的演示,我覺得哇,自動駕駛指日可待了,因為這太不可思議了。但 12 年後的今天,我們仍在致力於自主性,我們仍在開發駕駛代理人,即使是現在,我們實際上也還沒有真正解決問題。你可能會看到 Waymo 在路上行駛,看起來像是無人駕駛,但你知道,很多駕駛仍然有大量的遠程操作和人工介入。所以我們甚至還沒有宣布成功,但我認為它肯定會在這個時候成功,只是花了很長時間。

所以我認為,就像駕駛很棘手一樣,軟體也非常棘手。所以當我看到諸如「2025 年是代理人之年」之類的事情時,我會非常擔心,我有點覺得,這是代理人的十年,這將會是相當長的一段時間。我們需要人工介入,我們需要謹慎地做這件事,這是軟體,讓我們嚴肅對待。

鋼鐵人戰衣的啟示:增強賦能而非完全取代

我總是思考的一個類比是鋼鐵人 (Iron Man) 的戰衣。我認為這,我一直很喜歡鋼鐵人,我覺得它在很多方面對於科技以及它將如何發展的描述都非常正確。我喜歡鋼鐵人戰衣的地方在於,它既是一種增強 (augmentation),Tony Stark 可以駕駛它,它同時也是一個代理人 (agent)。在一些電影中,鋼鐵人戰衣相當自主,可以飛來飛去找到 Tony 等等。所以這就是自主性滑桿,我們可以建構增強功能,或者我們可以建構代理人,我們有點想兩者都做。但在現階段,我想說,在處理易出錯的 LLM 等等時,我想說,你更應該建造的是鋼鐵人戰衣,而不是鋼鐵人機器人。更多的是建造部分自主的產品,而不是建造自主代理人的華麗演示。這些產品有客製化的 GUI 和 UIUX,我們正在努力,這樣做是為了讓人們的生成-驗證循環非常快,但我們沒有忽略這樣一個事實:原則上,這項工作是可以自動化的,你的產品中應該有一個自主性滑桿,你應該思考如何滑動那個自主性滑桿,讓你的產品隨著時間的推移變得更加自主。但這大概就是我認為在這些類型的產品中存在大量機會的方式。

Vibe Coding:自然語言程式設計的興起

我現在想稍微轉換一下話題,談談另一個我認為非常獨特的面向。不僅出現了一種允許軟體自主性的新型程式語言,而且正如我提到的,它是用英文編程的,這是一種自然的介面,突然之間每個人都成了程式設計師,因為每個人都會說像英文這樣的自然語言。這對我來說極其樂觀且非常有趣,而且我認為是前所未有的。過去的情況是,你需要花五到十年學習某些東西才能在軟體領域做點什麼,現在不再是這樣了。

我不知道是否有人聽說過「vibe coding」,這就是引出這個詞的推文,但我聽說這現在已經成了一個主要的迷因 (meme)。關於這件事有個有趣的故事,我用 Twitter 大概有 15 年左右了,到現在我還是不知道哪條推文會爆紅,哪條推文會銷聲匿跡,沒人關心。我當時以為這條推文會是後者,我不知道,那只是一些突發奇想,但它卻成了一個徹頭徹尾的迷因,我真的搞不懂。但我想它觸動了人們的心弦,並為每個人都感覺到但無法用言語表達的東西賦予了名稱。所以現在有了一個 Wikipedia 頁面和所有的一切,這就像是 [掌聲] 是的,這現在像是一個重大的貢獻之類的。

HuggingFace 的 Tom Wolf 分享了這個我非常喜歡的美麗影片,這些是孩子們在 vibe coding。我覺得這是一個非常溫馨的影片,我愛這個影片。你怎麼能看著這個影片還對未來感到糟糕呢?未來是美好的。我認為這最終會成為進入軟體開發的入門磚。我對這一代人的未來並不悲觀,是的,我愛這個影片。

我也嘗試了一下 vibe coding,因為它太有趣了。當你想建造一些超級超級客製化、似乎不存在的東西,而你只是想即興發揮一下,因為那天是星期六之類的,vibe coding 就非常棒。所以我做了一個 iOS 應用程式,我其實不會用 Swift 編程,但我真的非常驚訝我竟然能做出一個超級基本的應用程式。我不打算解釋它,它真的很蠢,但我大概只花了一天時間,那天稍晚它就在我的手機上運行了,我當時想:「哇,太神奇了。」我不必花五天左右的時間去讀 Swift 的資料才能開始。

我還 vibe code 了一個叫做 Menu.app 的應用程式,它現在是上線的,你可以在 menu.app 試用。我基本上有這個問題,我去餐廳,看完菜單,完全不知道那些東西是什麼,我需要圖片。這個東西不存在,所以我想:「嘿,我要 vibe code 一下。」所以它看起來是這樣的,你去 menu.app,拍一張菜單的照片,然後 Menu 會生成圖片。每個人註冊時都可以免費獲得 5 美元的額度,因此這是我生活中的一個主要成本中心。所以這對我來說現在是一個負收益的應用程式,我在 Menu 上虧了一大筆錢。

但是 Menu.app 對我來說最有趣的地方在於,vibe coding 部分的程式碼其實是 vibe coding Menu 中最簡單的部分,大部分工作其實是在我試圖讓它真正運作起來的時候,這樣你才能真正擁有身份驗證、支付、域名和 Vercel 部署。這真的非常困難,所有這些都不是程式碼,所有這些 DevOps 的東西都是我在瀏覽器裡點擊完成的,這非常緩慢,又花了一個星期。所以非常有趣的是,我幾個小時內就在我的筆記型電腦上完成了 Menu.app 的演示版本,然後又花了一個星期,因為我試圖讓它真正可用。原因在於這真的非常煩人。例如,如果你嘗試將 Google 登入添加到你的網頁,我知道這很小,但這家 Clerk 函式庫告訴我如何整合它的說明簡直是海量。這太瘋狂了,它告訴我去這個 URL,點擊這個下拉選單,選擇這個,然後去那個地方點擊那個。它就像在告訴我該怎麼做,一台電腦在告訴我應該採取的行動,你去做啊,為什麼是我在做?搞什麼鬼?我必須遵循所有這些說明,這太瘋狂了。

為代理人而建:打造 LLM 友善的數位基礎設施

所以我演講的最後一部分因此著重於:我們能不能就為代理人 (agents) 而建?我不想做這些工作,代理人能做這些嗎?謝謝。

好的,所以大致上來說,我認為出現了一種新的數位資訊消費者和操縱者。過去只有透過 GUI 的人類,或透過 API 的電腦。現在我們有了一個全新的東西,代理人,它們是電腦,但它們有點像人類,對吧?它們是網際網路上的「人的靈魂」,它們需要與我們的軟體基礎設施互動。我們能為它們而建嗎?這是一個新事物。

例如,你可以在你的網域上放一個 robots.txt 檔案,你可以指示,或者說建議,網路爬蟲如何在你的網站上行為。同樣地,你或許可以有一個 lm.txt 檔案,它只是一個簡單的 Markdown 文件,告訴 LLM 這個網域是關於什麼的。這對 LLM 來說非常易讀。如果它必須獲取你網頁的 HTML 並嘗試解析它,這非常容易出錯且困難,而且會搞砸,行不通。所以我們可以就直接與 LLM 對話,這是值得的。

目前有大量的文檔是為人編寫的,所以你會看到像是列表、粗體、圖片這些東西,LLM 無法直接取用。所以我看到一些服務現在正在將它們的許多文檔轉換為專門為 LLM 設計的格式。例如,Vercel 和 Stripe 是這方面的早期行動者,但我已經看到了更多。它們以 Markdown 格式提供文檔,Markdown 對 LLM 來說非常容易理解,這很棒。

也許一個來自我的經驗的簡單例子,你們中可能有人知道 3Blue1Brown,他在 YouTube 上製作了非常漂亮的動畫影片 [掌聲] 是的,我喜歡他寫的那個函式庫 Manim。我想製作我自己的動畫,關於如何使用 Manim 有大量的文檔。我其實不想讀完它,所以我把整個文檔複製貼上到一個 LLM,然後描述了我想要的,它馬上就成功了。LLM 就像是為我 vibe code 了一個我想要的動畫,我當時想:「哇,太神奇了。」所以如果我們能讓文檔對 LLM 易讀,將會釋放大量的用途,我認為這非常棒,應該更多地發生。

另一件我想指出的事情是,不幸的是,這不僅僅是把你的文檔改成 Markdown 格式那麼簡單,那只是簡單的部分。我們實際上必須更改文檔內容,因為任何時候你的文檔說「點擊這個」,這都很糟糕,LLM 目前無法原生執行這個操作。例如,Vercel 正在將所有出現「點擊」的地方替換為你的 LLM 代理人可以代表你執行的等效 curl 指令。所以我認為這非常有趣。然後當然還有 Anthropic 的模型上下文協定 (Model Context Protocol),這也是另一種方式,一種直接與代理人這個新的數位資訊消費者和操縱者對話的協定。所以我非常看好這些想法。

我還非常喜歡一些零散的小工具,它們有助於以非常 LLM 友善的格式擷取資料。例如,當我去一個 GitHub 儲存庫,像是我的 nanoGPT 儲存庫,我無法將它提供給 LLM 並詢問相關問題,因為這是 GitHub 上的人類介面。所以當你只是將 URL 從 GitHub 改為 git-ingest 時,它實際上會將所有文件串接成一個巨大的文本,並創建一個目錄結構等等,這就可以直接複製貼上到你喜歡的 LLM 中進行操作了。也許一個更戲劇性的例子是 DeepWiki(來自 Devon),它不僅僅是這些文件的原始內容,Devon 基本上會對 GitHub 儲存庫進行分析,Devon 基本上會為你的儲存庫建立一整套文檔頁面,你可以想像這對複製貼上到你的 LLM 更有幫助。所以我喜歡所有那些你只要更改 URL 就能讓某些東西對 LLM 可用的小工具。

這一切都很好,我認為應該有更多這樣的東西。我想再補充一點,未來 LLM 絕對有可能,這甚至不是未來,而是今天,它們將能夠四處點擊等等。但我仍然認為,基本上與 LLM 各退一步,讓它們更容易存取所有這些資訊是非常值得的,因為目前使用起來仍然相當昂貴,而且困難得多。所以我確實認為,很多軟體將會有一個長尾效應,它們不會適應應用程式,因為這些不像是有活力的儲存庫或數位基礎設施,我們將需要這些工具。但我認為對於其他人來說,我認為在某個中間點相遇是非常值得的。所以我對兩者都看好,如果這說得通的話。

總結:一個充滿機遇的時代

總而言之,現在進入這個行業真是個絕佳的時機。我們需要重寫大量的程式碼,大量的程式碼將由專業人士和程式設計師編寫。這些 LLM 有點像公用事業,有點像晶圓廠,但它們尤其像作業系統,但現在還處於非常早期的階段,就像 1960 年代的作業系統一樣。我認為很多類比都適用。這些 LLM 有點像這些易出錯的「人的靈魂」,我們必須學會與它們合作。為了正確地做到這一點,我們需要調整我們的基礎設施來適應它們。當你建構這些 LLM 應用程式時,我描述了一些有效使用這些 LLM 的方法,以及一些使之成為可能的工具,以及你如何非常快速地運轉這個循環,並基本上創建部分隧道產品。然後,是的,很多程式碼也必須更直接地為代理人編寫。

但無論如何,回到鋼鐵人戰衣的類比,我認為我們在未來十年左右會看到的是,我們將把滑桿從左向右移動。我非常感興趣,看看那會是什麼樣子將會非常有趣,我迫不及待地想和大家一起建造它。謝謝。