我想對在座的各位學生說,現在是進入科技產業的絕佳時機。我們正處在一個極其獨特且有趣的時代,因為軟體正在經歷根本性的變革。我說again是因為我已經講過類似的演講,但問題是軟體一直在變化,所以我有很多新材料可以分享。
這次的變化相當根本。軟體在70年來基本架構沒有重大改變,但在過去幾年中發生了大約兩次快速而深刻的變革。這意味著有大量的工作要做,有大量的軟體需要編寫和重寫。
如果我們把GitHub想像成軟體世界的地圖,這裡包含了所有已寫的程式碼,這些都是指導電腦在數位空間執行任務的指令。當你放大觀察,你會看到各種不同的儲存庫,這就是所有已寫的程式碼。
軟體1.0是我們為電腦寫的程式碼。這代表了傳統的程式設計方式,程式設計師直接撰寫指令來控制電腦的行為。
軟體2.0基本上是神經網路,特別是神經網路的權重。你不是直接寫這些程式碼,而是調整資料集,然後運行優化器來創建神經網路的參數。當時神經網路被視為只是一種不同的分類器,像決策樹一樣,但我認為將其視為新型軟體的框架更為恰當。
現在我們有了軟體2.0領域的GitHub等價物,那就是Hugging Face。你可以在那裡可視化所有寫的程式碼。順便說一下,中間那個巨大的圓圈是Flux圖像生成器的參數。每當有人在Flux模型上調整LoRA時,基本上就在這個空間中創建了一個Git commit,產生了不同類型的圖像生成器。
最革命性的是軟體3.0的出現。過去所有神經網路都是固定功能的電腦,用於分類等任務。但現在發生了根本性改變:神經網路通過大型語言模型變得可程式化。
這是一種全新的電腦,值得給它軟體3.0的稱謂。你的提示現在是程式化LLM的程式,而且這些提示是用英文寫的,這是一種非常有趣的程式語言。
舉例來說,如果要做情感分類,你可以寫一些Python程式碼,或者訓練神經網路,或者提示大型語言模型。現在GitHub上的程式碼不再只是程式碼,而是大量英文與程式碼的混合體。
當我在Tesla工作時,我們正在開發自動駕駛系統。我觀察到一個重要趨勢:自駕系統中有大量的C++程式碼(軟體1.0),還有一些神經網路做圖像識別(軟體2.0)。
隨著時間推移,當我們讓自動駕駛變得更好時,神經網路在能力和大小上都在增長。同時,所有的C++程式碼都被刪除了,許多原本用軟體1.0寫的功能都遷移到了軟體2.0。例如,跨不同攝像頭和時間維度拼接資訊的工作都由神經網路完成,我們能夠刪除大量程式碼。
軟體2.0確實吞噬了自動駕駛的軟體堆疊。現在我們看到同樣的情況再次發生,軟體3.0正在吞噬整個軟體堆疊。
Andrew Ng多年前說過:AI是新電力。這個類比很好地捕捉了LLM的公用事業特性。LLM實驗室如OpenAI、Gemini、Anthropic等,花費資本支出訓練LLM,這等同於建設AI電網。然後有營運支出通過API為所有人提供智能服務,採用按量計費模式。
我們對這個API有很多公用事業式的需求:低延遲、高可用性、一致品質等。在電力系統中,你會有轉換開關來在電網、太陽能或電池間切換。在LLM領域,我們有Open Router可以輕鬆在不同LLM間切換。
我們最近幾天看到很多LLM都宕機了,人們被困住無法工作。這很有趣,當最先進的LLM宕機時,實際上就像世界上的智能褐變,就像電網電壓不穩定時,整個星球就變得更愚蠢。
LLM也有晶圓廠的特性。建設LLM所需的資本支出相當大,不只是建設發電站那麼簡單。你要投資大量金錢,技術樹發展迅速,研發機密集中在LLM實驗室內部。
你可以將4奈米製程節點想像為具有特定最大FLOPS的叢集。當你使用雲端GPU只做軟體而不做硬體時,這有點像無晶圓廠模式。但如果你像Google那樣建造自己的硬體並在TPU上訓練,這就像Intel模式,你擁有自己的晶圓廠。
最有意義的類比是LLM與作業系統的相似性。這不是像電力或水那樣的簡單商品,而是日益複雜的軟體生態系統。
生態系統的形成方式非常相似:有一些封閉源碼供應商如Windows或macOS,然後有開源替代方案如Linux。對於LLM也是如此,我們有一些競爭的封閉源碼供應商,而LLAMA生態系統可能發展成類似Linux的東西。
LLM是一種新型電腦,設置上有點像CPU。情境窗口有點像記憶體。LLM正在協調記憶體和計算來解決問題。
如果你想下載VS Code,可以在Windows、Linux或Mac上運行。同樣地,你可以拿一個LLM應用程式如Cursor,在GPT、Claude或Gemini上運行,就是一個下拉選單的問題。
我們現在有點像處在1960年代的計算時代,LLM計算對這種新型電腦來說仍然非常昂貴,這迫使LLM集中在雲端,我們都只是通過網路與其互動的終端客戶端。
我們都沒有充分利用這些電腦,因此使用時間共享是有意義的。個人計算革命還沒有發生,因為在經濟上不可行,但有些人在嘗試。Mac mini對某些LLM來說是很好的選擇,因為如果你在做批次推理,這完全是記憶體受限的,這實際上有效。
每當我直接與ChatGPT或某個LLM對話時,我感覺就像通過終端與作業系統對話。這是文字,是對作業系統的直接存取。GUI還沒有真正被發明,至少不是在一般意義上。
LLM有一個獨特之處:它們翻轉了技術擴散的通常方向。對於電力、密碼學、計算、飛行、網路、GPS等新變革性技術,通常是政府和企業首先使用,因為新技術昂貴,後來才擴散到消費者。
但LLM是反過來的。早期電腦主要用於彈道學和軍事用途,但LLM主要幫助我們煮雞蛋之類的日常事務。這真的很迷人,我們有一台新的神奇電腦,它在幫助我煮雞蛋,而不是幫助政府做軍事彈道學或特殊技術。企業和政府在採用這些技術方面實際上落後於我們所有人。
我喜歡這樣思考LLM:它們有點像人類精神,是人的隨機模擬。模擬器恰好是一個自回歸變換器,在代幣層面進行chunk、chunk、chunk的處理,每個chunk都有幾乎相等的計算量。
這個模擬器基本上有一些權重,我們將其擬合到網路上的所有文本。因為它是在人類數據上訓練的,所以具有類似人類的突現心理學。
LLM有百科全書式的知識和記憶,能記住比任何單個人類多得多的東西,因為它們讀了很多內容。這讓我想起電影《雨人》,達斯汀霍夫曼飾演的自閉症學者擁有幾乎完美的記憶,可以讀電話簿並記住所有姓名和電話號碼。LLM非常相似,能夠非常容易地記住雜湊值和各種不同的東西。
但LLM也有認知缺陷。它們會產生幻覺,編造不存在的東西,沒有很好的自我認知內部模型。它們表現出參差不齊的智能,在某些問題解決領域是超人的,但會犯人類不會犯的錯誤。例如,它們會堅持說9.11大於9.9,或者草莓中有兩個R。
它們也患有前行性失憶症。如果你有一個加入組織的同事,這個同事會隨時間學習你的組織,理解並獲得大量組織背景,回家睡覺鞏固知識,隨時間發展專業技能。LLM本質上不會這樣做,這在LLM研發中還沒有真正解決。
情境窗口真的有點像工作記憶,你必須直接程式化工作記憶,因為它們不會默認變得更聰明。這讓我想起電影《記憶拼圖》和《初戀50次》,在這兩部電影中,主角的權重是固定的,情境窗口每天早上都被清空,這對工作或建立關係來說真的很有問題,而這種情況一直發生在LLM身上。
LLM還有安全相關的限制。例如,LLM相當容易受騙,容易受到提示注入攻擊,可能會洩露你的資料等等。還有許多其他安全相關的考慮。
你當然可以直接去ChatGPT複製貼上程式碼和錯誤報告,但為什麼要直接去作業系統呢?有專門用於此的應用程式更有意義。
我認為你們很多人使用Cursor,我也是。Cursor是你想要的東西,而不是直接去ChatGPT。Cursor是早期LLM應用程式的很好例子,具有我認為在所有LLM應用程式中都有用的屬性。
你會注意到我們有傳統界面,允許人類像以前一樣手動完成所有工作。但除此之外,我們現在有LLM整合,允許我們以更大的塊進行工作。
成功的LLM應用程式有幾個共同特徵:
上下文管理: LLM基本上做大量的上下文管理。
多模型協調: 它們協調對LLM的多次調用。在Cursor的情況下,幕後有嵌入模型用於所有文件、實際的聊天模型、將差異應用於程式碼的模型,這些都為你協調。
應用程式特定的GUI: 這一點非常重要但也許沒有得到充分重視。因為你不想直接在文字中與作業系統對話。文字很難閱讀、解釋、理解,你也不想在文字中執行這些操作。看到差異作為紅色和綠色的變化要好得多,你可以看到正在添加或減去什麼。按Command Y接受或Command拒絕要容易得多。GUI允許審核這些易錯系統的工作並加快速度。
自主性滑桿: 例如在Cursor中,你可以只做標籤完成(你主要負責),你可以選擇一塊程式碼並Command K只更改那塊程式碼,你可以Command L更改整個文件,或者你可以Command I(隨心所欲,在整個儲存庫中做任何事)。你負責自主性滑桿,根據任務複雜性調整你願意放棄的自主性量。
Perplexity也有非常相似的功能。它打包大量資訊,協調多個LLM,有GUI允許你審核其工作(例如引用來源,你可以檢查它們),它有自主性滑桿(你可以做快速搜索、研究或深度研究並在10分鐘後回來)。
我們現在與AI合作。通常它們在做生成,我們作為人類在做驗證。讓這個循環盡可能快地進行符合我們的利益,這樣我們就能完成很多工作。
有兩種主要方法可以做到這一點:
加速驗證: GUI對此極其重要,因為GUI利用了我們頭部的電腦視覺GPU。閱讀文字是費力的、不有趣的,但看東西是有趣的,這就像通往你大腦的高速公路。所以GUI對於審核系統和視覺表示非常有用。
保持AI在可控範圍: 我認為很多人對AI Agent過於興奮,對我來說獲得1000行程式碼的差異對我的儲存庫沒有用。即使這1000行程式碼立即出來,我仍然是最終負責人,必須確保這個東西不會引入錯誤,正在做正確的事情,沒有安全問題等。
我對部分自主並不陌生,我在Tesla工作了五年。自動駕駛也是部分自主產品,具有很多相同特徵。例如,儀表板上有自動駕駛的GUI,顯示神經網路看到的內容。我們有自主性滑桿,在我任職期間,我們為用戶做了越來越多的自主任務。
我想講一個故事。我第一次駕駛自動駕駛車輛是在2013年,我有一個在Waymo工作的朋友,他提供帶我在帕洛阿爾托兜風。我們進行了大約30分鐘的駕駛,經過高速公路、街道等,這次駕駛是完美的,零干預。
但這是12年前的事了,我們仍在研究自動駕駛。即使現在,我們也沒有完全解決問題。你可能看到Waymo到處行駛,看起來無人駕駛,但仍有大量遠程操作和人類參與駕駛。我們甚至還沒有宣布成功,但我認為最終會成功,只是需要很長時間。
所以當我看到"2025年是Agent年"這樣的話時,我很擔心。我覺得這是Agent的十年,這將需要相當長的時間。我們需要人類在循環中,需要小心地做這件事。
我總是喜歡鋼鐵人,我認為它在技術和發展方面非常正確。我喜歡鋼鐵人戰衣的是,它既是增強工具(Tony Stark可以駕駛它),也是Agent(在一些電影中,鋼鐵人戰衣相當自主,可以飛來飛去找到Tony)。
這就是自主性滑桿:我們可以建造增強工具或Agent,我們希望兩者兼而有之。但在這個階段,使用易錯的LLM等,我會說你想建造的是鋼鐵人戰衣而不是鋼鐵人機器人。
減少建造自主Agent的華麗演示,更多建造部分自主產品。這些產品有自定義GUI和UI/UX,這樣做是為了讓人類的生成驗證循環非常快。但我們沒有忽視原則上可以自動化這項工作的事實。在你的產品中應該有自主性滑桿,你應該思考如何滑動那個滑桿,讓你的產品隨時間變得更加自主。
這不僅是一種新的編程範式,對我來說也很顯著的是,它是我們的母語英語。幾年前這讓我震驚,我發推特說,顯著地,我們現在用英語編程電腦。這是我目前的置頂推特。
突然間每個人都是程式設計師,因為每個人都說自然語言如英語。這對我來說極其看好和非常有趣,也是完全前所未有的。過去你需要花五到十年學習某些東西才能在軟體中做某些事情。現在不再是這樣了。
我不知道是否有人聽說過氛圍編程。這個推特介紹了這個概念,但我被告知這現在是一個主要迷因。有趣的是,我在推特上已經15年了,我仍然不知道哪個推特會變成病毒,哪個會失敗。我以為這個推特會是後者,但它給每個人都在感受但無法用言語表達的東西命名了。現在甚至有維基百科頁面。
Tom Wolf從Hugging Face分享了一個我真的很喜歡的美麗視頻,是孩子們在氛圍編程。我發現這是一個非常健康的視頻。我喜歡這個視頻。你怎麼能看這個視頻並對未來感到糟糕?未來是美好的。我認為這最終會成為軟體開發的入門藥物。我對這一代的未來不悲觀。
我也嘗試了氛圍編程,因為它太有趣了。氛圍編程在你想建造一些超級定制的、看起來不存在的東西時非常棒,你只想即興發揮。
我建造了一個iOS應用程式,我實際上不能用Swift編程,但我真的很震驚能夠建造一個超級基本的應用程式。這只是一天的工作,那天晚些時候就在我的手機上運行了。我想,哇,這太棒了。我不必讀Swift五天之類的才能開始。
我也氛圍編程了MenuGen應用程式。我基本上有這個問題:我出現在餐廳,讀菜單,不知道任何東西是什麼,我需要圖片。所以這不存在,我想我要氛圍編程它。你去menugen.com,拍菜單照片,然後menu gen生成圖像。每個人註冊時都會獲得5美元免費積分,這是我生活中的主要成本中心,對我來說現在是負收入應用程式。
MenuGen令人迷人的是,氛圍編程部分的程式碼實際上是簡單部分。大部分困難是當我試圖讓它變得真實,這樣你可以有身份驗證、付款、域名和多功能部署。這真的很難,所有這些都不是程式碼,都是DevOps東西,是我在瀏覽器中點擊東西。
例如,如果你試圖將Google登錄添加到你的網頁,這個clerk庫告訴我如何整合的大量指令。這太瘋狂了。它告訴我去這個URL,點擊這個下拉菜單,選擇這個,去那個並點擊那個。電腦在告訴我應該採取的行動。像,你做它,我為什麼要做這個?
我認為有一個新的數位資訊消費者和操作者類別。過去只有人類通過GUI或電腦通過API。現在我們有完全新的東西。Agent是電腦,但它們是類人的。它們是網路上的人類精神,需要與軟體基礎設施互動。我們能為它們建造嗎?
例如,你可以在你的域上有robots.txt,你可以指導網路爬蟲如何在你的網站上行為。同樣,你可以有llms.txt文件,這只是簡單的markdown,告訴LLM這個域是關於什麼的。這對LLM非常可讀。如果它必須獲得你網頁的HTML並試圖解析它,這非常容易出錯和困難,會搞砸,不會工作。所以我們可以直接對LLM說話,這是值得的。
大量文檔目前是為人寫的。你會看到列表、粗體和圖片。這對LLM不是直接可存取的。所以我看到一些服務現在正在將大量文檔轉換為專門為LLM設計的。
Vercel和Stripe是早期推動者,它們以Markdown提供文檔。Markdown對LLM超級容易理解。
也許一個來自我經驗的簡單例子。也許你們一些人知道3Blue1Brown,他在YouTube上製作美麗的動畫視頻。我喜歡他寫的Manim庫。我想製作我自己的。有關於如何使用Manim的詳盡文檔。我不想實際閱讀它,所以我將整個東西複製貼上到LLM。我描述了我想要的,它就開箱即用。LLM只是為我氛圍編程了我想要的動畫。
如果我們可以讓文檔對LLM可讀,它將解鎖大量使用。
你不幸地必須...這不僅僅是讓你的文檔出現在markdown中。我們實際上必須改變文檔,因為每當你的文檔說點擊時,這是不好的。LLM現在無法本地執行此操作。
Vercel正在用你的LLM Agent可以代表你執行的等效curl命令替換每次出現的點擊。
還有來自Anthropic的模型情境協定,這是直接與Agent對話的協定,作為這個新的數位資訊消費者和操作者。
我真的很喜歡一些小工具,幫助以對LLM非常友好的格式攝取資料。例如,當我去GitHub儲存庫,比如我的nanGPT儲存庫,我不能將此提供給LLM並詢問相關問題,因為這是GitHub上的人類界面。
當你只是將URL從github改為gitingest時,這實際上會將所有文件連接成一個巨大的文字,創建目錄結構等,這準備好複製貼上到你最喜歡的LLM中。
更戲劇性的例子是DeepWiki,它不僅僅是這些文件的原始內容。他們讓Devon基本上對GitHub儲存庫進行分析,Devon基本上為你的儲存庫建立整個文檔頁面,你可以想像這對複製基於你的LLM更有幫助。
我喜歡所有這些小工具,基本上你只是改變URL,它就讓某些東西對LLM可存取。
雖然LLM將來絕對可能四處走動並點擊東西,但我仍然認為與LLM半路相遇,讓它們更容易存取所有這些資訊是非常值得的,因為這仍然相當昂貴,而且困難得多。
這是進入產業的絕佳時機。我們需要重寫大量程式碼。大量程式碼將由專業人員和編程人員編寫。這些LLM有點像公用事業,有點像晶圓廠,但它們特別像作業系統。但這還很早期,就像1960年代的作業系統一樣。
這些LLM是易錯的人類精神,我們必須學會與它們合作。為了正確地做到這一點,我們需要調整我們的基礎設施。
我們有三種完全不同的編程範式。如果你進入產業,熟練掌握所有這些是非常好的想法,因為它們都有輕微的優缺點,你可能想在1.0或2.0或3.0中編程一些功能。你要訓練神經網路嗎?你要只是提示LLM嗎?這應該是明確的程式碼片段嗎?我們都必須做出這些決定,實際上可能在這些範式之間流暢地轉換。
回到鋼鐵人戰衣的類比,我認為我們在下一個十年大致會看到的是我們將把滑桿從左滑到右。看到那是什麼樣子將非常有趣。我等不及要和你們所有人一起建造它。
這是一個絕佳的時機進入產業並程式化這些電腦。這太瘋狂了,現在是我們的時代。