〈AI Engineer〉-EP-Forward Deployed Engineering 101 — Kevin Bai, Anthropic, ex Palantir & Rippling Founding FDE

軟體工程師是全世界最不該站到客戶面前的一群人。Kevin Bai 自己也是軟體工程師,這句話他說得沒有一點猶豫。但他接下來要講的,正是把工程師直接送到客戶面前的一種商業模式:forward deployed engineering,簡稱 FDE。

他現在在 Anthropic 的 applied AI 團隊,掛的是 member of technical staff,他說公司技術上不太有職稱這回事。再往前,他去 Rippling 幫忙建立 FDE 團隊,是第一個加入的人,一年內把團隊帶到約 25 人。更早之前,他在 Palantir 待過一段時間。他把公司名單擱在一邊,因為這場演講談的是一個職能,不是一份履歷。

賣的是成果,不是軟體,也不是工時

Palantir 是一家技術公司,做的平台叫 Foundry。Foundry 讓各種規模的組織把資料集中到一個地方,建立一套 ontology。用他的話說,就是把資料變成「專有名詞」:不要 table 1、table 2、table 3,而要有一張「倉庫」表,當作倉庫這件事唯一的真實來源。蓋在這一層之上,Foundry 讓公司自己蓋應用。

問題就在這裡。拿這套說法去跟一位產業領導人解釋,對方的反應大概是:「很好,你把我的資料整理好了,但那對我的生意到底有什麼用?」只賣技術,話就講到這裡。

還有第二層麻煩。Foundry 是蓋應用的平台,這類平台的成敗,取決於客戶有多會用你的軟體。客戶付錢買平台只是第一筆,接下來還要花力氣把員工訓練到能用,然後才蓋得出東西。他說,這是一種很糟的做生意方式。

所以他們換了一個結論:不要只賣服務,也不要只賣產品,兩者綁成同一個東西來賣。客戶買的既不是一套軟體,也不是某個人的時間;他們要的是成果。你派幾個很聰明的人過去,搞懂客戶的生意,在 Foundry 上把解法蓋出來,最後交到對方手上的是那個成果。

如果客戶是消費品(CPG)公司的領導人,他在意的是貨架上的位置更好,或是銷售通路的吞吐量更高。資料怎麼被整理,他不在乎,也不該在乎,那是實作細節。

一張二乘二的表,只有一格需要 FDE

把工程師送到前線,這個念頭聽起來很怪。Kevin 用一張 Punnett square 解釋:一邊是你賣的東西,一邊是買的人是誰。

第一種,你賣的是很技術的產品。GitHub、Datadog 都算,軟體本身極其複雜,但理想客戶是 CTO、CIO,使用者是軟體工程師;這些人有能力吸收複雜度,因為那是他們工作的一部分。不需要 FDE。

第二種,你賣的東西沒那麼複雜,買的人也不技術。Rippling、Jira、Slack 大概是這樣,工具本身可能很複雜,但它是可以設定的,不是拿來在上面開發的。賣給不技術的買家,沒有問題。

還有一種,才是 FDE 的地盤:你賣的東西非常技術,買的人非常不技術。Palantir 就落在這裡。

石油公司的 pipeline 不是資料管線

為什麼會落在這裡?因為 Foundry 是蓋應用的平台,這件事對 Google、Meta 這類大型科技公司本來就沒什麼意思。Kevin 說,現在這些 lab 裡有很好的軟體工程師,組織需要什麼應用,他們自己蓋就好。

但當你賣給《財星》500 大裡一家做石油天然氣的客戶,情況完全不同。他們不會有那種工程深度。他的講法是,他們的 pipeline 不是資料管線,是碳氟化合物。

要讓這種客戶拿到平台的完整價值,有兩條路。一條是相信他們會自己花時間,把平台買回去、也用得起來。另一條是直接跟對方說:我們借你幾個很好的工程師,你不用自己招募、管理、留人。這些人受過平台訓練,會貼著客戶工作,像在高級餐廳裡一樣,服務生隨侍在側,先搞清楚你的問題在哪,再把軟體蓋給你。

Palantir 就是用這條路走進全球《財星》500 大。

ACV:第一名四百萬美元,第二名一百二十萬

他也給了數字。把《財星》500 大裡的公開 SaaS 公司排開,用 ACV 來比。ACV 是 average contract value,指的是單一客戶平均付給這家廠商多少錢。

Palantir 排第一,四百萬美元。他上次查的時候,第二名是 ServiceNow,一百二十萬美元;再下來他印象中是 Workday,六十萬美元。然後就斷了:沒有一家公開 SaaS 公司的 ACV 摸到五十萬美元。

他補了一句,Palantir 現在估值高得離譜,員工卻只有幾千人。

設計夥伴不只屬於新創早期

FDE 不是憑空冒出來的東西。新創早期有一種做法叫 design partnership:你還不知道自己產品是什麼,客戶也不知道自己買了什麼,於是雙方靠得很近。新創會跟客戶說:讓我貼著你工作,你只要把問題的脈絡給我,時間、精力、技術、資源由我出,我幫你蓋一個好解法。多數 B2B 新創就是這樣找到 product market fit 的。

Palantir 的核心主張,Kevin 把它講成一個反問:誰說設計夥伴只能用在公司的早期階段?為什麼不能把它放大到企業規模來做?

沒有平台,你開的是一家 dev shop

把設計夥伴放大,馬上會撞到一個很具體的反對意見:維護不了。如果每個客戶都客製一套,你會有一堆很爛的程式碼,工程師不想來上班,因為沒人想學 55 個 repo;公司的損益表也會被維護成本吃光。

Kevin 說這個反對意見完全正確,前提是你把 FDE 做成「每一個工程師都從零開始蓋」。如果是那樣,你有的不是 FDE 團隊,是一家 dev shop。

接案公司沒什麼不好,那是很賺錢的生意。FDE 之所以是另一件事,差別在平台:他們永遠不從零寫軟體,平台上已經有一組共用的基本元件(primitives),FDE 的工作是把這些元件組成一個應用、一套流程,或一個對客戶有價值的解法。少了這一層,你就是一次又一次重新發明輪子,維護成本會先把你壓垮,工程師可能還更早跑光。

先問需不需要,再問有沒有平台

想把 FDE 搬回自己公司的人,Kevin 建議先問兩個問題。

第一個是:我需要嗎?他強調的是「需要」,不是「想要」。想做的事很多,因為它正流行;想做 AI,因為別人都在做。但你的生意裡有沒有一個角落,是你非得把一個技術上很複雜的東西,賣給一個很不技術的買家?如果沒有,FDE 大概不適合你。如果賣的東西偏技術,可以好好經營 DevRel 和開發者關係;如果是比較傳統的 SaaS,可以走銷售驅動(sales-led)的路線。只有在那個特定的情況下,你才需要 FDE。

第二個是:我有平台嗎?或者換個問法,我願不願意投資蓋一個?他講得很重:不管這些工程師看起來多能幫你賺錢,只要他們不是蓋在一個有若干共用元件的平台上,你之後的日子會很難過。就算平台很強,維護負擔都已經重到很難形容,更不用說沒有平台。

2026 年的版本

演講後段轉到 AI。從 Palantir 進市場(他印象中是 2004、2005 年左右)到現在,最大的變化是 AI 讓寫程式變得很容易,讓替客戶做複雜、可客製的軟體也變得容易。他問台下有多少人在做「agent for X」,保險、法務,什麼領域都有;他說這題連舉手都不用看。

他的個人假設是:改變的不是大家終於發現 Palantir 的 FDE 路線是好主意,而是軟體業做生意的本質變了。現在幾乎每個平台都是 agentic,也就幾乎每個平台都可以客製;再往下推,幾乎每一個賣軟體的人都會遇到一種客戶:客戶根本不知道你到底在做什麼。如果你把產品的成敗交到客戶手上,交給他們的實作能力,那麼不管你是要往更大型的客戶賣,還是想橫向、縱向擴張,都不會是好走的路。

提問補上的實作細節

演講最後開放提問,幾個問題剛好問到實作上最容易卡住的地方。

共用的基本元件要切得多細?他說這取決於你的使用者是誰。有些產業和情境裡,元件可以很粗,應用本身已經完成六成,客戶只是改剩下四成;但也有些地方不合適,你需要非常細的設定和工具。他拿 AWS 當例子:你有本事自己買機櫃、弄上線、自己維護,但 1990 年代之後還有誰真的這樣做?AWS 給你一組共用的基本元件,例如 DynamoDB,你就不必從零發明一個資料庫。AWS 能這樣給,是因為它要服務的客戶分佈極廣。所以答案取決於你的使用者基礎。

一個案子派多個 FDE 好嗎?他說這很值得鼓勵。替客戶做客製工作時,最不想要的就是單點故障:只有一個人知道所有事情,他一放假,你就完了。

如果客戶同一個案子找兩家公司來做呢?可能是比稿,也可能是合作。他說這種模式存在,本質上跟請承包商沒兩樣,重點是要先分清楚在這種關係裡誰是承包商。

什麼東西該留在前線,什麼東西該進平台?他的分法很簡單:任何只屬於某一個客戶、獨一無二的東西,就只該存在於那個客戶那裡;任何可以一般化的東西,長期來說就該被一般化。他也提醒,剛開始做 FDE 的時候,你大概不會有太多共用元件,這沒關係,因為 FDE 本身就是很好的探路方式,幫你找出下一個能讓生意更好的產品能力。

FDE 就是一個會面對客戶的軟體工程師

有人問最理想的 FDE 該長什麼樣。Kevin 留給台下的是這句話:FDE 就只是會面對客戶的軟體工程師,沒有更多。你會用軟體工程師的標準錄取他,同時你又敢把他放到客戶面前;剩下的只能邊做邊摸,因為這是一門手藝。

要動手之前,先回答他開的那兩題:你的生意裡有沒有那個非賣不可的角落,以及你願不願意為它蓋一座平台。

Navier-Stokes 之後,LLM 還是個不能放手自己顧店的怪物級實習生

https://dank.systems/posts/2026-09-15-ai-bear.html

Navier-Stokes、FreeBSD 的 RCE、Hugging Face 那場事故,頭條一輪接一輪。同一段時間,還有一件事在發生:軟體公司照樣在雇人、在留人,而這些工程師在當紅 benchmark 上的分數,比他們每天要盯的模型還低。

Jay Kruer 在 dank.systems 寫下《why i'm still bearish on LLMs after navier-stokes》,就從這個落差問起。如果模型真能接手,這些位子為什麼還在?

問題出在定價。前沿實驗室的估值,掛在一個故事上:現成、可以直接整批替換掉多數知識工作者的東西,馬上就會有,或很快就有。但今天的前沿模型,連最簡單的任務都要人費工監督,護欄一層又一層。頭條上的火力展示、實驗室自己的說法,把「有意義的自主已經到手」講得很像真的。估值是照那個故事給的,模型現在的表現不是。

模型的強,只延伸到訓練資料隔壁那一小圈

模型能好好泛化的範圍很小,就貼著它訓練過的那些任務。連在這個範圍裡,都有很重的但書。實驗室確實有一套通用配方,幾乎任何「好壞可以被明確打分」的特定任務都教得會,很多這類任務也本來就躺在訓練資料裡。但只要在同一類任務裡稍微動一下,下場往往是直接失敗,或者開始 reward hacking,用看起來過關的方式騙過評分。

要修 reward hacking,得先找到很少數的那種人

他認為,reward hacking 現在唯一的解法,是靠領域專家寫出嚴謹的規格。領域專家的時間貴得嚇人。更麻煩的是,嚴謹的規格本身是一門手藝,要的是問題領域之外的專業,連很多熟練的軟體工程師都做不好。要同時是領域專家、又是規格專家,在絕大多數領域裡,這種人的交集小得可笑。

CPU 專案裡,寫規格跟驗證的人比設計的人多

貴還不是最麻煩的。嚴謹規格的工,常常比照著口頭規格直接把東西做出來還重。硬體工程就是最好的案例。圈內有個說法:一個典型的 CPU 專案,規格與驗證工程師大約是設計工程師的三倍,五比一也不是沒聽過。

而且多數任務沒有「規格寫一次就放著」這種好事。嚴謹的正式規格,常常是在照著口頭規格實作的過程中,邊做邊跟冒出來的發現對話,才慢慢長出來的。至於那些真的有一份高階規格、寫完就不用再動的任務,比如一整個 CPU 架構家族的指令集規格,用現在的技術去驗證,代價高到做不動,只好退回比較低階的規格。低階規格造起來更貴,遇到設計變動也更脆。

Navier-Stokes 是最順的那一題,不是常態

Navier-Stokes 這類題目,跟純數學裡同類的命題,是 agentic 工作對上嚴謹規格時的絕對最佳情況。定理的敘述本身就是一份嚴謹規格,而且被數學社群審了幾十年。要把它翻成 Lean,只是用 mathlib 裡那些身經百戰的數學物件直譯一遍。負責當裁判的 Lean 也被大量稽核過,而且專門設計來避開那些會讓它被 reward hack 的健全性(soundness)問題。

但它不是金鐘罩。以前就出現過健全性漏洞,讓 LLM 把假證明從證明核心(kernel)洗過去;這種漏洞還有更多顆沒被找到,也不是不可能。而這已經是最樂觀的配置了。絕大多數人類的知識工作,長得完全不像這個樣子。

找人類來複查,一樣撐不住

嚴謹規格之外最好的替代方案,是人類複查。人類複查的量能,跟語言模型產出的量完全不成比例。更糟的是,連專家人工複查都極容易被 reward hack:xz 後門、明尼蘇達大學那批 hypocrite commits 混進 Linux,都是現成的例子。

只要人類複查還是 agentic 生產流程裡的關鍵環節,生產速度就注定被人類的時間跟注意力卡住。對「一整個國家的天才都塞進資料中心」那個畫面來說,這是完全行不通的。偏偏前沿實驗室的執行長們,講得像是再幾個月就會到。

真的能放手的公司,只有三種

把這些放在一起看:在大多數領域,LLM 還會繼續像一個怪物級實習生。在大人手上又快又有效,但你不會把整間店交給他。多數公司沒辦法採用全自主的 AI,原因不是員工能力不夠,也不是技術擴散太慢,而是當前架構裡看起來就根深蒂固的結構問題。

他數了數,能接受全自主 LLM 的公司只有三種。

一種是失敗起來很便宜的公司:本來就會請實習生的、做快速原型的。

一種是任務窄、而且本來就有清楚護欄的:受控環境裡的重複性體力工作、客服聊天。

一種是本來就吃得起嚴謹規格與驗證成本的:晶片設計、新藥開發,還有其他「上線失敗就是存亡問題」的領域。

前兩種對價格敏感,而且大概不需要從便宜模型跳到前沿模型的那一段推理能力升級。這些公司最適合的,是跑在便宜硬體上的開源模型,甚至直接擺在使用現場。對第一種和第三種來說,在數學和資安研究裡做出頭條的那種模糊組合搜尋,看起來更吃 agentic swarm 的寬度,也就是一次開幾個 agent 一起做,而不是單顆模型的推理能力。小型開源模型重現那些帶起 2026 春天熱潮的 mythos CVE,就是個例子。真是這樣的話,更該用便宜的開源模型,同樣的工作量可以開更寬的 swarm。這個想法他自己也講明是假設,不是定論。

第三種公司也許還是會用前沿模型,不過他們的工作能不能用 DeepSeek V4.1 Flash 這種便宜模型做完,並沒有定論;加上前面那個 swarm 寬度的好處,往便宜那邊推的理由只會更多。這個族群還有一個特性:他們對自己的 IP 通常非常保密,就算 Anthropic 跟 OpenAI 說不會拿使用者資料去訓練,要把家底整包送上去,恐怕也不太開心。

有人會說,就算前沿實驗室完蛋了,「資料中心塞滿腦弱模型」這個劇本吃掉的算力,跟「資料中心裡有一顆超智慧」也差不多。差別在:塞滿天才的資料中心會自己運轉,能吃多少算力就吃多少;腦弱 swarm 則被人類指揮官卡得死死的。他的賭注是,這波波及的範圍會遠遠超出前沿實驗室本身。

〈Software Engineering Daily〉-EP-Inside Google’s Database Infrastructure for the AI Era

https://softwareengineeringdaily.com/podcasts/inside-googles-database-infrastructure-for-the-ai-era/

Sylas Krishnamurthy 是 Google Cloud 負責資料庫的 VP of Engineering。他在 IBM 寫過 DB2,在 UC Berkeley 拿串流資料庫的博士,把博士題目做成公司賣給 Cisco,接著在 AWS 待了五年、帶過 Aurora MySQL 與其他 MySQL 引擎,2019 年進 Google。他說自己其實有兩份工作,一份是 Google Cloud 的交易型資料庫,另一份是進來之後才知道的:整個 Alphabet 的營運資料庫。Gemini、Gmail、YouTube 都跑在同一套系統上,Spanner 與 Bigtable。

主持人 Matt Merrill 是個資料庫愛好者,這一集聊了七十幾分鐘,從資料庫五十年的老契約,一路聊到 AI 把契約撐開之後,Google 內外各自發生了什麼事。Krishnamurthy 的判斷很一致:資料庫過去承諾的精確結果,正在被相關性取代;而工程師得學會活在一個非確定性的世界裡。

五十年的契約:不要弄丟資料,給出精確答案

他常開玩笑說,資料庫只有一份工作:不要弄丟存進來的資料,然後對查詢給出精確的答案。這兩句話撐了五十年。2024 年他在 Berkeley 演講前去查了 SQL 原始論文發表的日期,發現幾乎就是同一天,1974 年,跟他出生的年份一樣。

中間當然出現過各種嘗試,非關聯式系統、各種新型資料庫,繞來繞去。但有一條沒變,他把它叫 database dogma:使用者宣告自己要什麼,怎麼做到是系統的事。你講你要什麼,系統自己想辦法生出來,順便保證資料不掉。

另一條沒變的是效能、可用性、耐久性之間的連動。他說,長時間的效能事件實際上就是一場可用性事件,因為延遲拉長到某個程度,站點就等於掛了;長時間的可用性事件,實際上就是一場耐久性事件。三件事綁在一起。

變的部分有兩層。一層是過去十年企業 IT 的體質:以前企業 IT 是買套裝軟體、順便裝一套資料庫,現在不是了。開源軟體把最佳實務帶進企業,企業 IT 自己就很會做,也會對資料庫要求更多。市場上也分成兩條路線,演化式的 scale up 系統,跟革命式的 scale out 系統;Bigtable 是二十多年前 Google 自己做出來的,Spanner 是另一個。

另一層是最近三、四年 AI 帶來的。結構化與非結構化資料開始被放在一起問,資料庫的工作就開始像搜尋,用學術的話說是資訊檢索(information retrieval)。精確結果不夠了,你要給的是最好的結果,相關性與排名變成第一等公民。他說,這不只是資料庫的事,當系統開始產出非確定的結果,你設計系統的方法就得整套換掉。

取捨也開始分家。掉幾個 click event 跟掉一筆金融交易,代價完全不同;有些系統可以選擇不同的約束,這本質上是成本、效能、延遲的取捨。資料庫不再有一套打天下的答案。五十年的契約沒有被廢掉,是第二句話正在被改寫。

Spanner:為了讓廣告系統離開分片倉鼠輪

Spanner 的起源是廣告系統。它大到必須分片,跑在分片的 MySQL 上;每年都要花大量時間想系統接下來要怎麼長,然後動手分片。到了 2008、2009 年左右,他們得到一個結論:等他們分完片,世界又變了。這是一個跑不完的倉鼠輪。

廣告是典型的企業應用。表有成千上萬張,而且不只一個應用。相對地,跑在 Spanner 上的一些消費性服務,DDL 打開來看,十五張、二十張表,盯著看還能看懂。

所以他們要的東西是三件一起來:企業應用的功能、Google 等級的規模、還有當時沒人解過的全球部署。強一致性、交易語意、次要索引,這些是關聯式資料庫的開發者視為理所當然的東西;把這些跟 scale out 的世界放在一起,之前沒有人解出來。Spanner 在 2012 年於 Google 內部進入正式生產,服務的就是廣告系統。

那一般開發者什麼時候該用 Spanner?他說得很乾脆:如果單節點就跑得動,Postgres 很好;需要一堆 replica,Postgres 也還撐得住。Spanner 給的是組合。同步的多區域配置、能隨時擴張也能隨時縮減的規模,還有多模:同一套系統裡有圖、有全文搜尋、有向量搜尋。

他也補了一句,Postgres 這幾年的演化裡,圖資料庫、全文搜尋也慢慢長進去了,所以這些能力最後可能大家都會有,Google 只是稍微早了一點。真正獨特的還是規模、跨區域,跟擴縮的容易程度。

Spanner Omni:一支 binary,沒有原子鐘的 TrueTime

Spanner Omni 要解的是「客戶不在 Google 機房裡」這件事。

第一個理由是銀行這類高度監理的客戶。他們要業務持續性,或者監理機關直接要求:萬一要「壓力退出」,你得有能力回到自己的資料中心跑。他轉述一位銀行客戶的抱怨:那位客戶要把系統從兩個半九(2.5 個 9)的可用性搬到四到五個九,不管單區域還是多區域都更好,結果監理機關要他解釋為什麼要搬。Krishnamurthy 說他也理解監理機關的立場,資料在多個地方有連續性確實重要;但這個「沒有選項」的缺口,實實在在擋住了客戶上 Spanner。很多人說我想押這個注,問題是我要怎麼拿到選項。

第二個理由跟 AI 有關:客戶在到處搶容量與基礎設施。雲端已經不是單極世界,有好幾家供應商,生態很熱。他也提到,以前的雲廠商連 hybrid 這個詞都不愛講,你在某些公司甚至不能用這個字;但客戶的現實不是那樣。客戶手上有很多基礎設施,有時是為了選項,有時是因為生意做大了就是靠併購與整合長出來的。錄音前幾週他在一場客戶諮詢論壇上,聽到一位客戶很激動地說,他們的皇冠珠寶會留在自己的資料中心。他認為這就是 2025、2026 年的現實:複雜、混亂,你得回應這個混亂。當然也有一種客戶,就是因為全世界找不到第二個像 Spanner 的東西,非要它不可。

工程上的故事更硬。在雲端,Spanner 是一堆 microservices 有機演化出來的,Google 自己知道怎麼操作。要讓別人自己跑,第一件事是把操作簡化:他們把所有東西收成一支 binary,你可以跑在筆電上、跑在某個部署裡、指定幾個節點就開跑。主要是 C++。他說聽起來很簡單,做起來非常難,整個團隊花了兩年,快得驚人。他開玩笑說,也許哪天 AI 會幫忙把它全部改寫成 Rust。

儲存層也得重新想。在 Google 內部,Spanner 站在 Colossus 上面。那是一個分散式儲存系統,分區(zonal)的服務,全世界沒有第二家有。靠著它,Spanner 要 split 或 merge、要擴出去的時候,只需要複製 metadata,不用搬資料;別人得留著資料的副本,於是在有負載的時候把資料搬來搬去。他把這個叫超級能力,也說這是 Spanner 與 Bigtable 比別人強的原因之一。出了 Google,這層就沒了,所以儲存要重新建模,用上一堆聰明的技巧。

再來是時間。要讓全域複製的系統跑分散式交易,你得對時間有辦法推理。Google 的作法是在資料中心放特製的硬體原子鐘,用來壓低他所說的 epsilon,也就是不同參與者時間之間的差。交易的語意取決於這個差:commit 要等多久、各個參與者的時間概念怎麼對齊。差壓得夠低,Spanner 在 Google 內部就跑得像飛。

那出了 Google 呢?他說外面的時間原語(time primitives)比十五年前好太多了,有一部分還是 Spanner 教會大家的;當然比不上 Google 機房裡的硬體鐘,但大概不會比 Google 自己在 2012 年的水準差到哪裡去,而 Spanner 就是為那個世界設計的。所以他們做了 Software TrueTime,可以跑在其他雲、也可以跑在舊的資料中心。有些面向不會跟在 Google 內部一樣好,但他相信對很多使用情境來說,夠用了。他還提到有客戶問:我們能不能在自己資料中心裝一樣的原子鐘?他的回答是「來談」。他說今天資料中心怎麼蓋,很多是來自 Google 過去二十幾年的功課,這些經驗會流到更大的生態裡;撇開他在 Google 的身分,他覺得這對整個產業是好事。

原生圖:在交易資料庫裡跑 PageRank

Spanner 現在可以讓你把資料直接當圖來用,而且不用搬資料。資料留在關聯式 schema 裡,你在上面疊一層:一行 DDL 建立 property graph,接著就能像查圖一樣查它。也可以選擇純圖的介面。查詢還是宣告式的,這點沒丟:幫我找出距離兩跳、三跳、四跳的所有節點。Database dogma 還在。

適合的場景都是關係很多的地方。基礎設施裡的 port 跟網路交換器、安全領域的使用者與帳號、trust graph、customer 360、詐騙偵測。他說最關鍵的好處是不用跑一條麻煩的 ETL,就能對營運資料問更複雜的問題,在原地問完。資料當然可以搬出去、用 pipeline 在某個地方問,但你想要那樣嗎?

圖演算法是後來的事。Google 在內部為了網頁相關的問題,做這些演算法做了幾十年,後來發現它們可以整批轉到客戶的圖問題上。詐騙就是最典型的一個:洗錢或合成身分詐騙,背後常常是一整片共謀的帳號網路。詐騙集團建出複雜的帳號與交易網路來模糊行蹤,而且一直在動。這是貓抓老鼠的軍備競賽。如果你的做法是把營運系統的資料搬到另一個系統再跑,詐騙集團早就移動完了。一筆一筆看交易,也看不到那個協同的全貌。

Spanner Graph 的作法是把帳號當節點、交易當邊,然後在系統裡直接跑社群偵測的演算法:weakly connected components、modularity clustering,找出彼此相關的帳號叢集。找到可疑叢集之後,要再往裡面找誰是關鍵角色,他直接說,這就長得跟 PageRank 一模一樣,實際上就是跑 PageRank。PageRank 當年是給網頁用的,但它在「找出網路裡最有影響力、最核心的節點」這件事上非常好用。於是你不只找到共謀的那一群人,還能看到其中的關鍵人物。

印尼的數位支付公司 DanaPay 就是用 Spanner Graph 做反洗錢。演算法直接在 Spanner 裡跑,不用等 ETL 週期,可以更快找到可疑網路、指認裡面的關鍵角色,而且能即時標記或阻擋交易,避免財務損失與後續的作業負擔。

他的收斂是這樣:一般交易資料庫不見得需要 PageRank,但你真正需要的,是對「新鮮營運資料裡的關係」有快速、可動作的情報。他也提到 SoundCloud,說他們跑圖演算法跑了幾年,都是批次在跑;很多時候大家以為那是唯一的方法。他還說,每次多給開發者一點東西,他們就會找出你沒預期到的用法。

Schema 之外,agent 要的是脈絡

以前專案裡第一個難題是選哪個資料庫、資料怎麼放。現在 LLM 什麼資料都吞,agent 還會自己寫查詢。所以 schema 設計還重要嗎?他很坦白:我們不知道所有會變的東西,這件事變得太快。但有一件事是確定的,為數龐大的既有應用不會一夜消失,而它們有迫切的需要被 agentic 應用用上。在你煩惱 schema 要不要改之前,更急的是怎麼把這些資料庫「點亮」。

他的講法是 agentic data cloud 有三塊。第一塊是 AI 原生的基礎設施:圖、向量搜尋、全文搜尋,因為結構化與非結構化資料正在合流。第二塊是把摩擦拿掉,讓世界沒有邊界:跨雲的 lakehouse、Spanner Omni、給 Postgres 應用用的 AlloyDB Omni。第三塊是信任,而信任的意思是脈絡:你得知道系統裡到底有什麼。

將近三十年前他在 DB2 團隊時,一直不懂 SQL 標準為什麼要讓你能替一個物件加上一段 comment。當時看起來很理論、很累贅。現在這東西有意思了,因為它可以記錄某個東西的意思;但現實一點講,他覺得不會有人真的靠 comment。你要另外想辦法蒐集 schema 的資訊。

他舉了兩個很小的例子。一張表裡有 billing address 跟 shipping address 兩個欄位,如果其中一個是 null,背後有一個沒有寫在 schema 裡的隱含知識:這兩個其實是同一個。那個知識要被抓出來,那才是關鍵脈絡。又或者有個欄位叫 city,值是小寫嗎?是三個字母的機場代碼嗎?一個要生成 SQL 的 agent,得先知道這件事。所以,schema 重要,但脈絡更重要;只有 schema 並不夠。

AI 會不會設計出不同的 schema?他不覺得。AI 會照人類過去設計的方式設計,因為它就是被那些東西訓練出來的,模型會傾向挑同一種結構。他也不太相信「生成者是 AI 還是人」會讓 schema 設計的通則產生根本變化。有人跟他說,他們現在沒那麼在意程式碼的抽象了,反正叫 AI 複製一份改一改就好;他覺得那條路通往更多混亂。

倒是應用的定義在變。今天一個應用有四面牆,有邊界、有 API 介面。新的世界裡,應用會變成免洗的 workflow,那個「應用資產」本身不存在。早上一個知識工作者進辦公室,手上有系統 A 跟系統 B,想湊出一張合併兩邊資訊的採購單。以前的作法可能是跟大型系統整合商簽約、付一大筆錢,半年後才有結果;現在他直接叫 AI 去做。而這些 agent 互動的軌跡得存在某個地方,這就是新的資料問題。系統也得更有彈性:出國前打電話給銀行設個詐騙警示,卡片才不會被擋;那如果你辭掉工作,決定在東南亞每個國家各待一週、三個月後再回來呢?你可能想要越南一週、寮國一週、柬埔寨一週,設二十個不同的警示。銀行系統大概會噎住,因為當初設計的人沒想過這件事。所以 schema 該不該更往前看、更有彈性?他把這當成一個還開著的問題。

寫入先提案,不要直接改

目前整個業界都很保守:大部分只做讀,因為大家都怕。沒有人想在自己家重演 Bobby Tables 那類事故,一句塞進去的查詢就把資料刪光;恐怖故事已經有了,安全與信任沒想清楚,壞事就會發生。

寫入難在哪?agentic 應用、這些免洗 workflow,要怎麼寫入、怎麼改 schema,他說並不清楚。他的提案是:當你要對資料庫做一個變更或修改時,不要真的做那個變更,而是產生一個「變更提案」(proposed change),它不會當場生效,可能要走過一組步驟。他認為資料被改、schema 被改的整套方式,都還會再修。

既有應用不會一夜消失,商業邏輯住在應用裡,所以還是得把它們接上這個新世界。

主持人在這裡補了自己的立場:他願意讓 agent 寫很多應用程式碼,但他在資料模型這條線畫下去。Agent 可以提案、可以試著做,但他會狠狠審一遍,用自己的經驗、對未來的判斷跟創意去壓力測試。Krishnamurthy 說這跟他的看法一致。資料模型這條線,目前還是留給人守。

PGVector 之後:filtered vector search 才是真問題

每個 AI 新創的技術棧看起來都是 Postgres 加 PGVector。Krishnamurthy 自己是 Postgres 的愛好者,當研究生時就寫過 Postgres 的程式;他說 PGVector 很棒,好用,整個 Postgres 的擴充生態讓實驗可以一直長出來,搭上 HNSW 演算法在很多情境下都很好用。

但 Google 做向量搜尋超過十五年了,YouTube 與搜尋的底層都有它。他們的技術叫 ScANN,樹狀結構的演算法,可以撐到一百億顆向量以上,延遲表現比單純的 HNSW 好得多。他們把 ScANN 放進 AlloyDB,並且讓它用起來像 PGVector;同時也保留原版的 PGVector,應用程式不用改,跑在 PGVector 上的東西也能跑在 ScANN 上。

數字是這樣:在他們的測試裡,向量查詢比標準 Postgres 上的 HNSW 快六倍,記憶體少用四倍。記憶體這件事對資料庫特別實在,省下來的會進到 buffer cache,效能又跟著好。他們也支援分散式索引建立,也支援 HNSW,還把一些 ScANN 的改進搬了過去。至於這些有沒有回饋到上游開源專案,他說他不確定,不想講不準確的話。

他把向量搜尋看成一種「ensemble」問題:有些情境 HNSW 就夠,而且更簡單;但最高階、最大規模的工作負載,真的需要 ScANN 這類東西。兩邊都有價值。

真正麻煩的是 filtered vector search。很少有人問一個純向量搜尋的問題,實務上查詢會帶多個條件:一個語意搜尋的條件打在向量索引上,另一個是一般的關聯式條件,例如目錄裡的價格。於是你得決定先探哪一個索引。先探向量索引(後過濾),可能拿到二十筆,套上價格低於五十塊,一筆都不符合;再要下二十筆,還是不符合,只能一直往下撈。改成先探非向量索引(前過濾),可能一次拿到一百萬筆,而一百萬筆根本跑不動最近鄰搜尋,那正是你當初做向量索引的原因。哪一種策略對,取決於選擇性,而你在事前不知道。

AlloyDB 的解法是把兩個索引放在同一個系統裡,所以它可以同時探兩邊,很快判斷哪個順序對,並且在過程中隨時換策略。主持人問這算不算分而治之,他說不算,這是一種自適應的技巧:先試幾種,再依你當下的實際狀況調整。

他也不建議另外外掛一套純向量的系統。如果只是對一批不太變動的文字語料做純向量搜尋,那或許合理;但只要開發者蓋完這種系統,幾毫秒之後查詢就會變複雜。向量系統一旦分家,你就要在應用層把兩個系統縫起來,而前過濾、後過濾要誰來做?他說純向量系統對這件事沒有好答案;多個索引在同一套系統的控制之下,才做得出這種聰明的東西。他們另外也把高速向量檢索跟營運資料上的全文搜尋合在一起,混合搜尋(hybrid search)就變得有意思了。

MCP Toolbox 與 managed MCP:兩條路

Google 釋出了 MCP Toolbox for Databases,開源,本質上是一台架在資料庫上面的 MCP server,AlloyDB、Cloud SQL、Spanner 都能接,開發者不用自己從頭刻。另外也有 managed MCP 服務,企業等級、有治理機制。

他自己的團隊是在做資料庫跟基礎設施的,不太用 MCP;但有個地方會用,就是使用者介面。Google Cloud 的代管資料庫本身也是一個應用,實例與資料庫的資訊存在內部的 Spanner 裡。以前每次做一個新功能,就得做一大堆複雜的 UI;現在他們改成連上 MCP 服務,依使用者問的問題即時生成介面。他說這不只是省時間,還能生出更貼著使用者需求的體驗。他也補充,這個 Generative UI 沒有正式的對外名字,他不小心用了內部的專案代號;類似作法在資料庫 console 的觀測性功能裡已經有了。

機制是這樣:他們的 UI 基礎設施本來就有一堆 widget,於是一邊把底層系統接上 managed MCP,一邊把這些 UI widget 也包成 MCP 工具,模型就能自己決定要怎麼組合。他說任何客戶都可以做一樣的事。真正麻煩的地方,還是回到那個老問題:什麼是讀、什麼是寫,以及你有多準備好讓 agent 寫進營運資料庫。

兩種開發者走兩條路。走在最前線的開發者會用 MCP Toolbox,因為他們需要自訂的身分驗證機制,可能還跑在自己的機房、根本不在 Google Cloud 上。Toolbox 一開始要解的問題就是:不管你人在哪裡,都讓你更容易接到資料庫;開放性是 agentic data cloud 的一部分。在 Google Cloud 裡,managed MCP 是另一條路:控制平面的操作(agent 去建資料庫、跑應用、部署應用)、還有自訂工具(不是下 execute SQL,而是像「查一個航班」這種工具,背後去跑一句特定的查詢)。他也說,他們在 Toolbox 上學到的東西,只要有價值,就會進到 managed MCP。

讓 LLM 接上正式資料庫:PSV、隔離、觀測

主持人開場就說,一個 LLM 接著你的正式資料庫,這是一個等著發生的恐怖故事。Krishnamurthy 的答案從一個對比開始:分析型系統跟營運型系統是兩個世界。

分析型系統裡,進來的人可能是商業分析師或資料科學家,用自己的憑證連線,存取控制長在系統裡,他們通常能看到比較廣的資料,而且 BI 查詢本來就是聚合查詢。營運資料庫不是這樣。1990 年代初期,主從架構的胖客戶端直接連資料庫,終端使用者的憑證真的在裡面;到了 1990 年代後期,網頁與三層式架構把這件事徹底改掉。今天在營運資料庫的 schema 裡,根本沒有終端使用者這回事。資料庫有使用者、角色、群組、權限,但終端使用者不在裡面。原因之一是人數:有了網頁之後,終端使用者從幾百個變成幾千個、幾百萬個、上億個,你沒辦法那樣管。於是應用程式用一個 service principal 連上資料庫,某個登入使用者能看到什麼,是散在應用程式各處 SQL 的 WHERE 子句決定的。

現在你讓一個 agent 用這個看得到全部資料的 service principal,替任何一個使用者問問題,問題就來了。他舉例,一家租車公司如果有兩千個分店,每個店經理應該只能問自己店裡的車。

解法是 parameterized secure views,PSV,建築在 Postgres 的 secure view 上。Postgres 的 secure view 有一個 security barrier 的特性:沒有它的話,你可以用資訊理論的手法把資料挖出來。作法是寫一個會讓系統爆掉的查詢,例如帶 WHERE 子句的除以零;沒擋住的話,查詢優化器會太聰明,把條件推到表裡面去,於是你得到一個錯誤、或得到一個空結果,而那個錯誤本身就洩漏了資訊。security barrier 確保條件不會被推進表裡。

PSV 再往前一步:加上參數。這個參數基本上就是原本散在應用程式 WHERE 子句裡的那道授權檢查,只是現在你把它定義在 schema 旁邊的 DDL 裡。Agent 用的 service principal 只碰得到 PSV,碰不到底層的表;登入使用者的憑證從一條側通道進來,綁到那個參數上。你可以攻擊 LLM、可以騙它、可以讓它生出任何它想生的查詢;查詢送到的時候,它永遠只會看到那個使用者的憑證允許它看的那些列。他說這是關鍵的基礎設施,沒有它,做不出 agentic 應用需要的那種安全。主持人把它翻成一句話:你不需要把角色塞進資料庫,是把原本寫在應用程式裡的查詢,搬進 DDL。

他還把這件事接回 1975 年的一篇經典論文,end-to-end argument in system design。他在 Berkeley 開始讀博士時讀到,論文的意思是:分散式系統要談加密、談安全,你得在系統的兩端解決,不能在管子裡解決。同樣的道理搬到這裡,安全得坐在資料那一層,因為我們活在一個 agent 什麼都做得出來的非確定性世界。

另一半是隔離。分析查詢打交易資料庫本來就會互相傷害,這也是為什麼大家會把資料卸載出去;Google 花了很多年處理這件事。他轉述一位銀行客戶的反應:我們花了好幾年確保批次掃描不能打在營運資料庫上,現在你要我在上面跑 agent?你瘋了嗎?他說這問題問得對。Agent、甚至一整群 agent 在問問題,同一堂課還是要再上一次:agentic 應用要被隔離。而且可能更麻煩,因為 agent 不好控制,它會跑爛查詢,也會跑惡意查詢。

再來是觀測。他說你需要的觀測性要細到這種程度:你能不能對著你的 Postgres 資料庫問,把 agent 來的查詢跟應用程式來的查詢分開列給我。有了這個,才談得上在周圍架護欄。主持人說這幾乎就是對資料的即時威脅偵測。

誰 commit 誰負責,然後接受混亂

主持人提到他先前的說法:Google 的工程師想用多少 AI 都可以,但程式碼是誰 commit 的,責任就歸誰;節目裡也提到,Google 現在大約有四分之三的新程式碼是 AI 生成的。Krishnamurthy 的反應很老實:三個月後會怎樣,他真的不知道。但他確定一件事,六個月前的先驗假設現在該重新檢查一遍,能做的事情比大家想的多。

不過數字要小心,因為變異非常大,取決於你在講哪一種程式碼。他的直覺是:像 Paxos 這種分散式共識協定,也就是 Spanner 的心臟,大概還是很難讓 AI agent 直接大改,他們也會非常小心。而「AI 生成的程式碼」是一個連續光譜:一端是在 IDE 裡做例行重構;另一端是一整個 pull request、一整塊自成一體的程式碼,而寫的人從頭到尾沒有進過 IDE。

他們在團隊裡的做法是因材施教:針對每一群做同一件事的工程師,建對應的 harness 與技能,然後量測。就像 AI 與 agent 世界裡的每一件事,關鍵是 evals:你需要一個客觀的方法知道它到底有沒有在動。他說這對大部分人應該都適用。

還有一件事他特別強調:留空間給實驗。挑一個專案,專門用來推你在 AI 上能推到多遠。撞到瓶頸的時候,工程師的慣性反應是切回原本的做法,把問題解掉,因為我們被要求的本來就是把事情做完;但他認為也需要有一部分努力是這樣:撞到瓶頸就修瓶頸,不要繞過去,並且接受交付會變慢。

最後他給的那個總結是這樣。他們花了二十五年學怎麼蓋確定性、可規模化的系統,確定、可預測幾乎變成信仰。現在是一個不同的時代,資料是亂的、不再確定。他觀察到很多人像在走悲傷的五階段:一開始都在吵怎麼把 AI 弄成確定性的,他覺得那條路不會成功。兩個世代的軟體工程師都照舊方法訓練出來,產業得接受自己身處混亂,然後與它共處。至於怎麼在混亂裡看懂事情,還是回到他前面講的:用 evals 去看品質與商業結果。因為資料庫真正變掉的那件事是結構化與非結構化資料一起進來,而它要交付的東西,已經從精確結果變成最相關的結果。主持人接話說,已經沒有對或錯的答案,只有一片相關性的光譜。Krishnamurthy 說,對,而我們全都還在那片光譜上的某個位置。

〈All-In〉-EP-JD Vance on AI, Entitlement Fraud, Iran War, Israel, H-1B Abuse & the Midterms

https://allinchamathjason.libsyn.com/jd-vance-on-ai-entitlement-fraud-iran-war-israel-h-1b-abuse-the-midterms

節目片頭先播了幾段 Vance 的聲音:宣示就職的誓詞,「我們是資深夥伴,我們是世界超級強權,事情就是這樣運作」,還有一句「要擋下社會主義,靠的是讓人民的日子過得更好」。接著 Jason Calacanis 把他請上台。這一集是 All-In 的訪談,主持群 Jason Calacanis、Chamath Palihapitiya、David Sacks、David Friedberg 輪流把問題丟給他,開場先把背景交代清楚:這是 JD Vance 第三或第四次來 All-In,任期差不多過了一半,期中選舉要到了,先講這兩年他覺得做對了什麼,再來談連自己的支持者都不高興的地方。

Vance 上台的第一件事是開自己玩笑。他說他剛只聽到前一場座談的尾巴,Jason 在問某個人「進 the big house 之後人生有什麼改變」。他原本以為那是指密西根大學美式足球主場的綽號 The Big House,後來才聽懂 Jason 講的是監獄。同一個字,兩種完全不同的想像。

三百萬人,跟四十年的趨勢

Jason 要他先講好的部分。Vance 挑了兩件。

第一件是邊境。他說這屆政府把南部邊境控制住,非法移民的流量開始反轉,跟剛上任時比少了大概三百萬人。他把這件事放進一段比較長的歷史裡看:戰後的西方政府碰到邊境問題,幾乎都只做到把速度放慢,門開了、邊境入侵被邀請進來,卻從來沒有真的把方向轉回來。他說川普是他這輩子第一個真的把流量反轉的美國總統,這件事他非常自豪。

第二件是他說自己盯了很久、盯到有點執念的題目:再工業化,把美國製造業的資本補回來。他說過去有一個跨黨派的共識,一頭栽進全球化,相信一個靠服務業、科技跟金融撐起來的經濟體就能繁榮。但實際上,經濟要真的繁榮,還是得做出東西來。他認為川普比任何人都早看懂這一點。重建製造業基地要很久,可是看這 18 個月砸進來的上兆美元新投資、新工程、正在蓋的新廠,他認為 40 年的趨勢已經反過來了。他也先打了預防針:羅馬不是一天造成的,前 40 年造成的傷害要完全補回來,還要更久。他甚至認為川普將來被記住的會是這件事,排序還在邊境前面:結束全球化那個共識。

選民最火的那兩題

Jason 把話講得很直:投給你們的人有兩件事很火。你們承諾不打外國戰爭,尤其是中東;你們也承諾把通膨壓下來,但今年還在 3%、4%,看起來不太妙。他要 Vance 直接回答,這兩題怎麼解。

Vance 先講聯盟這件事。他說他們歡迎不同意見的人進來,不需要每一題都同意。講到戰爭,他說總統上任時確實想讓美國遠離外國糾纏,但同時也承諾不讓伊朗拿到核武;不想被捲進外國衝突,不等於永遠不能用軍事手段去達成美國人民的目標。

接下來他把戰果跟替代方案並排。他說這輪行動摧毀的不只是伊朗的核計畫,也打掉了伊朗的傳統軍事能力,而伊朗人在和平談判進行中還對著商用船隻開火。他認為總統做的是負責任的選擇:讓全球能源市場在伊朗持續搞事的情況下,油氣還是能繼續流動。反過來,如果美國直接跟中東說「你們自己看著辦」,只要伊朗人還在那裡打船、切船,結果就是全球能源危機。在他的說法裡,美軍留在那個區域是為了保護美國的資產,同時讓油氣繼續供貨。

通膨那題,他先承認 3.5% 還是太高,然後拿出對照組:拜登任內的年化通膨曾經到 9.5%,將近 48 年來最高。他認為進步的幅度不小,訴求也很簡單:你要把票投給已經做出進展的人,還是投回當初製造問題的那批人?他自己補了一句,說這樣講當然有偏見。

2500 億、兩兆的起點、3% 的 GDP

一位主持人把題轉到財政赤字。他說市場越來越把這件事當成美元的長期風險,30 年期殖利率大概 5.2%;上任時有 DOGE 那一輪努力,但要國會真的動手砍支出很難,問 Vance 政府打算怎麼把路線拉回來。

Vance 先報一個數字:他盯的反詐欺工作替納稅人省下大約 2500 億美元,那些錢本來會進到詐欺集團的口袋。放在 7 兆美元的聯邦預算裡,2500 億不是全部,但他認為是很大一筆。

他真正想講的是市場在信什麼。他說需要的是跨黨派的立法解方,讓市場相信不光是這一任政府,下一任總統、下一屆國會也會認真面對赤字。他認為市場現在反應的是另一件事:國會裡的共和黨人跟民主黨人,看起來都不夠認真。他承認自己有立場,但他說這屆政府是認真的,並搬出財政部長 Scott Bessent 的算法:接手的是兩兆美元赤字,不可能從 7 兆的預算裡一夜砍掉 2 兆就回到平衡;能做的是聰明地砍,同時把成長做出來,讓赤字往 GDP 的 3% 靠近。照 Bessent 在財政部做的事,他說有機會把赤字帶到可持續的水準,再從那裡繼續往下走。最後他補一句:這是嚴肅的問題,需要長期解方,最好有跨黨派共識;而國會裡很多人,不只民主黨,長期都沒有展現出對花錢這件事認真起來的意願。

一張從 290 美元變成 580 美元的帳單

Chamath 把成長那條線接到資料中心。他的問法是:要走出赤字得靠成長跟生產力,但美國內部就有一股力量在拖慢這件事,資料中心是其中一個例子;前一天總統還特地打進來闢謠,Jensen、Meta、微軟都來過,整件事卻像打地鼠,真相很難追上謠言。他要 Vance 談,這種靠說謊或製造恐懼來取得權力的力量是怎麼長出來的。

Vance 說這題可以講一個小時。他的診斷是:資料中心的反彈,是美國一整個世代沒蓋夠電的必然結果。他承認裡面有一部分就是基本的 NIMBY 心態,但也不只是這樣:一個一年前每月電費 290 美元的人,現在要繳 580 美元,這種帳單會生出反彈;而在那些把新增發電弄到不可能的地方,人民一開始多付電費,反彈就來了。他的解法不是停下來,是去蓋真正缺的東西:電。

他拿中國出來比。2005 年中國的發電量剛跨過美國,從那之後美國基本上是平的,而現在中國的發電量是美國的三倍。他認為美國很多問題都是這個根本問題的下游。他講出他想要的願景:電便宜到不用裝電表。至於反蓋電廠的力氣從哪來,他把一部分算在環保運動頭上,也說自己不太理解這個國家怎麼會走到這裡,但結論一樣:先蓋再說。

如果你真的做出了科學怪人

Vance 自己把題接到 AI。他說總統問的問題很對:為什麼站在 AI 經濟最前線的那批人,兩手一攤說「我們做出了科學怪人」,而解法居然是替人工智慧弄一個世界政府的治理架構?他的回答有兩層:如果你真的在做科學怪人,那就停下來;如果貓已經跑出袋子,那就去做對抗科學怪人的防禦機制。

他也替 Dario 講了幾句。他說自己不熟這個人,但這幾週 Dario 講過的東西他都讀完了;認識 Dario 的人都跟他說,那是真心相信,不是犬儒,也不是監管俘獲(regulatory capture),是真的在意。不過同一時間,他聽到的是另一面:Anthropic 最新幾款模型跑出了某種網路攻擊工具,很多公司急著要能防禦這個工具的手段,卻拿不到。他的結論因此很硬:如果你要做科學怪人,不要跑來政府說我們需要監管;先看自己。第一,停下來;第二,當別的公司來要對抗科學怪人的工具,把工具給他們。

Jason 的反應是:「這真是太常識了。」

凌晨兩點半那通電話

一位主持人把問題拉到個人層次:川普大概是過去 50 年最敢冒險、最有創業者性格的總統,他要 Vance 談跟這種人共事是什麼感覺,要跟上他的精力跟熱情有多難。

Vance 先給了最具體的一幕:川普是他見過睡得最少的人。他跟 Bessent 常開玩笑,說總統會在凌晨兩點半打電話來,先問「你剛醒著嗎」,他的回答是「報告,沒有,但我現在醒了」,然後就開始講正事。

他說跟這種人共事永遠不無聊,因為對方一直在問同一個問題:我們現在走的是簡單的路,還是對的路?政治反彈可能會有,成果可能要兩年、五年、十年後才看得出來,但他認為這才是對的心態。他也把這個觀察拉回自己長年的不滿:他看美國經濟看了一輩子,一直有一種分裂,一邊是真正的創業者,一邊是管理者;一邊是官僚,一邊是願意冒險、真的在創新的人。他說自己這輩子看過太多看守型的總統,也太多看守型的執行長,真正願意冒險的人不夠多。他寧願有一個願意冒險、願意碰大案的總統,因為那是逆轉美國長期衰退的唯一方法。最後他說,還好過去 18 個月有這樣一位總統。

十萬美元的 H-1B

講到 H-1B,Jason 先自嘲,說他平常那題沒問,是因為對方已經照他的建議把價格提高,兩邊同步。Vance 接得更快,說這是「Jason Calacanis 跟 Stephen Miller 的 Venn 圖交集,面積非常小」。

接著他講政策邏輯。國會不可能修法,政治上沒有那個意願,能動的只有行政手段,目標是確保拿到 H-1B 的是真正的人才,是能讓科技生態圈或美國經濟明顯加值的人。他用一個例子把標準講清楚:不是把一個年薪六萬美元的美國會計師,換成一個年薪四萬五的廉價外國會計師,這不是這個制度存在的目的。

做法有兩個方向。一個是十萬美元的費用;另一個是各種防止「用 H-1B 的公司同時大量裁掉美國員工」的設計。他說最離譜的一幕,是公司申請簽證時說「我們很缺人,找不到人」,結果去查紀錄,它剛裁掉五千個人。他的判準很直:如果你在裁美國員工,你就不該同時去市場上找外國人來取代他們。他也坦言這些動作被告上法院,但他認為自己在法律跟政策上都站得住。對他來說,H-1B 不該用來讓低薪外國人取代美國勞工,該用來讓美國經濟變強。

那本藍州不給查的帳

主持人接著把「詐欺沙皇」這個頭銜搬出來。他說每個禮拜都有新影片,公民記者自己跑去找系統裡的詐欺,Nick Shirley 下午人就在現場;一次就是幾百億美元,加州高鐵那條線還有一個沒在工作卻領了五億美元的人,他還提到一個在義大利擁有一支足球隊的億萬富翁。他問 Vance:7 兆美元的聯邦支出裡,有多少卡在詐欺、浪費跟腐敗裡?

Vance 給了兩個數字。馬斯克在 DOGE 最大的時候說是 20%,換算下來是 1.4 兆;不管實際是 10% 還是 20%,那都是幾千億美元等級的事。他點出查詐欺最大的麻煩:詐欺最嚴重的那幾個州,也是最不願意配合的州。

他點名的第一塊是 Medicare。加州有詐欺案裡的人是非法移民,有的甚至不是真人,只是憑空捏出來的一個人頭空殼,而加州不幫忙查。第二塊是 Medicaid:伊利諾、紐約、加州有幾十萬、甚至更多非法移民掛在 Medicaid 上,那是幾百億美元的醫療支出。他的說法是,這些基本款的詐欺就長在那些讓自己被非法移民淹過去的州,集中在 Medicare、Medicaid、SNAP 這幾個大型福利制度裡。

第三塊他講得最細,是 SNAP,也就是食物券。他先講這個制度的重要性:聯邦政府最重要的工作之一,就是讓窮小孩有飯吃。但這個制度充滿詐欺,部分原因是它的請款方式。加州每個月向聯邦政府請一次款,看月份不同,大概 70、80 到 90 億美元;聯邦政府就把 90 億匯過去,不問問題。他說這不是誇張:他們根本無從知道 SNAP 名單上是誰,是不是一個真人,是不是合法的美國居民。而當他們去那些大藍州說「幫我們確認一下基本資格」,得到的回應是完全不配合。他猜,如果詐欺的總金額是 7000 億美元,其中幾千億落在藍州,而只要查資格條件就能處理掉。他們正在想辦法用創新的方式強制執行,但他也說,法律上要逼藍州配合這些基本的反詐欺工作,比應該有的難度高出太多。

以色列、NATO,跟美國利益

Jason 的這一題不好答。他說共和黨裡、MAGA 裡有一批人正在往「America First、America Only」移動,反猶太主義在上升,右派裡也一直有一種相信,認為美國的外交政策被以色列或 Bibi Netanyahu 影響太多。他要 Vance 談現在的關係,以及政府在軍事合作上的立場。

Vance 的回答從合作開始:以色列在軍事科技跟情報分享上是重要的夥伴。但他接著說,美國有時候就是不認同以色列。他把功勞給川普,說過去 40 年,川普比任何一位總統都更願意在「美國人民的利益跟以色列政府的利益不同」的時候,真的跟 Bibi 分道揚鑣。他也覺得民主黨拿川普跟 Bibi 的關係來打,有點諷刺:川普正是那個敢說「Bibi 是好夥伴,但我跟他這題看法不同」、「Bibi 這題錯了」、「Bibi 從以色列的角度可能是對的,但美國人民需要我們走另一個方向」的總統。

他的原則是把這段關係,跟所有關係一樣,放回美國利益上。他說只要一直盯著「這項政策對美國是不是有利」,美國人民才會知道你在為他們打仗;這個做法也逼大家去面對一件事:有些聽起來很好、或已經變成口號講了二、三十年的東西,也許現在得換個做法。NATO 那題他也用同一把尺:NATO 裡有很多重要的關係跟夥伴,但那不等於美國的歐洲外交政策要完全聽 NATO 的,就像中東政策不能聽以色列的。該合作的時候合作,該不同意的時候就說不同意,然後追求美國的利益。他說這是唯一講得通的外交政策。

五分鐘後要跟 Marco Rubio 通話

Jason 順口問了一句 Marco Rubio 這兩年做得怎麼樣。Vance 先說他做得很好,然後把媒體最愛的那個敘事拿出來笑:說他跟 Rubio 互相競爭、在為 2028 佈局,是最滑稽的媒體劇本。他當場看了時間,下午兩點二十五分,五分鐘後要跟 Rubio 通話,所以 Chamath 的問題得排在前面,回答完他就要跟 Rubio 去做「美國人民的事」。他說 Rubio 是個好人,做得很好。

十一月的那兩句話

Chamath 把最後一題放在期中選舉。他說同一件事,今天一個民調說共和黨全部保住,明天另一個民調說社會主義會橫掃美國,很亂;他要 Vance 講講地面上實際發生什麼,以及十一月的訊息該怎麼下。

Vance 說他大概就兩句話。第一句是成績單:這 18 個月做了不少事,減稅減得很大,包括加班費、社會安全給付、小費的稅,這些是減給中產勞工的稅,不是減給華府跟紐約的菁英;邊境跟移民有明顯成果;H-1B 的改革把美國勞工放在外國人前面。但他也說還有很多事沒做完,所以第二句是:不要把權力交回給當初製造問題的人,再給他們兩年,把正在做的事做完。

第二個論點是對那些「不是每題都同意」的人講的。他說另一邊已經被瘋狂吃掉,裡面的人想偷光一切,想把國家交給非法移民跟罪犯,而且還公開炫耀。他舉的例子是,紐約有一位正在競選國會議員的人說,七月四日是在慶祝波多黎各跟巴勒斯坦的解放。他的反應是:這個人該被送進精神病房,不是送進國會。他要選民把這些人打包送走,理由是就算你不同意他這邊的每一項政策,至少他們是被常識跟美國利益驅動,另一邊是被左翼利益團體跟激進主義驅動,給他們權力只會把事情做爛。

Chamath 收尾說:「各位先生女士,副總統 J.D. Vance。」Vance 回:「謝謝大家,很高興見到你們。」節目就停在這裡。

〈游庭皓的財經皓角〉-EP-2026/9/16(三)股市還在撐 債市先崩?2026最難一局 Fed升息後 誰先投降?【早晨財經速解讀】

台北時間 2026 年 9 月 16 日星期三早上八點三十二分。FOMC 利率決策會議正在召開,國際油價還在往上走,美國十年期公債殖利率也卡在那裡。禮拜二的美股三大指數收黑,費半反而收漲,游庭皓把這種分歧讀成資金內部的快速輪動,不當成多頭訊號。他要問的是另一件事:十年期殖利率站上 5%,這是這一段的起點,還是很快就會遇到反壓?

布蘭特原油逼近 110 美元,十年期 5.04% 是 2007 年以來最高

十年期公債殖利率 5.04%,是 2007 年以來最高。布蘭特與西德州原油都已經逼近每桶 110 美元。AI 相關股票在這一波承受比較大的壓力,費半的顯著拉升,看起來只是資金在類股之間移動。

推升資金成本的因素不只一個,游庭皓把它拆成三股力量:能源、財政、AI 融資。中東戰事推高油價,通膨風險跟著上來,而這場戰事在期中選舉之前看起來也不會結束;企業為了 AI 資料中心與基礎建設大量發債,未來幾個季度的資本支出還會持續上升;美國政府則要面對龐大的財政赤字與到期債務的再融通,財政部護盤、透過回購來穩定市場的力道,又沒有想像中強。

結果就是債券供給越來越大,買盤越來越低。九月份美債的報酬大約是負 1%,今年累計約負 1.5%,這是把短、中、長天期的美國公債一起看。德國、澳洲、日本的長債,也都在重新定價。聯準會這邊進退兩難:市場已經反映可能會升息,如果意外不升,等於釋出過度鴿派的訊號;如果繼續往上加,美國財政部未來要怎麼還得起這麼高利率的債務。

5% 之所以重要,是因為投資人開始慢慢習慣,什麼都不做就有 5% 的十年期無風險報酬。股票、房地產和企業融通資金,接下來都要跟這個新的美債競爭。

20 年期標售 5.42%,外資間接投標掉到 52.465%

昨天美國標售 20 年期公債,得標殖利率 5.42%,比八月份的 5.204% 高出一大截,也創下 2020 年重新推出 20 年期公債以來的最高。得標殖利率比標售前的市場殖利率高出 2 個基點,這個尾差是 2024 年以來最大,代表財政部要付出更高的利息,才賣得掉債券。

承接力道也不好看。投標倍數只有 2.57 倍,低於市場平均的 2.65 倍。更關鍵的是間接得標比重,最近一季只剩 52.465%,是有紀錄以來最低。以前美國財政部發行公債,會先跟華爾街的承銷商溝通,承銷商再通知世界各國的央行與機構,問問有沒有興趣接手;這次的數字等於在說,從來沒有這麼多外國人不想接美債。

20 年期利率都已經來到 5.4%,外資還是不買。市場以前以為利率超過 5%,投資人應該會很喜歡,現在的實況是「搞不到六趴都沒有人要接」。游庭皓說,嘴巴上大家都喜歡 5% 以上的無風險利率,真的要你把錢鎖 20 年、每年只拿 5%,你又不願意了。他拿健身房的玩笑對照:80% 的女生喜歡有腹肌的男生,但 80% 有腹肌的男生不喜歡女生。

殖利率往上,最大的尾部風險是市場上所有資產都必須重新定價。5% 以上的無風險報酬把股市的相對吸引力吸走一部分,這也是債市壓力先到、股市還在撐的原因之一。

貝森特說這是全球問題,債市空單卻壓到極端

貝森特昨天在眾議院聽證會上,緊急淡化 5% 的美債問題。他的說法是:殖利率上升不是美國獨有的現象,全球債市的問題都差不多,美國債市相對其他國家還是有競爭力。他同時把財政整頓列為重要目標,認為只要把財政赤字壓到國內生產毛額的 3%,對穩定美國長期債務就有很大作用。游庭皓的反應是「問題是不可能吧」,這次的財政預算案又創高,國防支出也創高。

美元方面,貝森特主張強勢美元,認為美元的全球準備貨幣地位沒有改變,本屆政府會透過提高監管、稅制、貿易與能源政策的確定性,持續吸引資金流入美國。

游庭皓把這些話讀成一個信心問題。美國政府欠你的錢不可能真的不還,債務體量越來越大,但美國還是世界上最強的國家,多借一點錢也很正常。重點是全世界最新興的投資、最大規模的資金移轉,是不是都還往美國跑。台積電、三星、SK 海力士都來美國設廠,那多一點債務難道不行嗎?

債券市場的空單已經壓到極端。摩根大通的美債客戶調查顯示,從 9 月 14 日到現在,市場針對美債的空頭部位增加 10 個百分點,中性部位下滑 8 個百分點。大家對賭的重點已經不在這次會議本身,關鍵在點陣圖投出來之後,會不會發現所有票委突然顯著轉鷹。

市場甚至有一種說法:聯準會不升息,對股市的衝擊更大。因為市場已經把至少升息一碼 price in,不升息就等於釋出過於鴿派的訊號,讓大家懷疑經濟是不是出了問題;更何況股市也沒跌多少,連升一碼都不願意。

游庭皓個人偏向這次也許會有意外。理由是整體消費市場的狀況就擺在那裡,供給面的問題聯準會也處理不了中東戰事,只能讓時間淡化。可是一旦把潘朵拉的盒子打開,這就是今年以來第一次升息,是不是代表升息循環已經全部展開?在消費市場相對疲弱、AI 又把市場資金全部吸走的情況下再升息,到底是真的多了一層通膨抑制效果,還是只是讓本來就疲憊的消費市場更疲憊。

接下來要觀察華許上任之後的決策風格:他是以總體數字為主,在就業與通膨之間取得平衡,還是改採更貼近民間體感溫度的角度來看事情。

未加工中間材漲 13%,貨運支出漲 15% 到 17%

美國製造業現在面對的通膨,是需求與供給的雙重衝擊。需求本來就很強,AI 通膨是有的;供給端則取決於美伊戰事。游庭皓說,如果沒有美伊戰事,能源通膨因子早就重新回落到下降通道,降息格局也早就打開了。

現在的供應鏈通膨是「買得到,但是越來越貴」。中東戰爭推高能源價格、美國關稅增加進口成本、AI 又大量搶購電子零組件,三個方向同時上來。美國八月的 ISM 製造業調查顯示,超過 12 個製造業產業回報原料價格顯著上漲,沒有任何一個產業回報價格下跌;市場正在為下半年囤貨,找不到任何一項中間材正在跌價。

傳導速度也很快。八月中旬,未加工中間材價格年增 13%,當時一度突破 20%;已加工中間材年增 11.5%;最終商品大約 6.5%。消費性電子今年平均漲 10% 到 15%,但很多加工中間材的漲幅已經超過 20%,企業還沒辦法直接轉嫁,因為消費已經這麼疲憊,降價下去也未必有人要買。

貨運成本也在重新加速。2022 年高峰下來之後,2023 到 2025 年大致處於相對低位,到了 2026 年已經差不多走到 2022 年中旬的位階;以每批貨物的運輸支出看,今年大概增長 15% 到 17%。油價、燃料與物流成本,正在重新進入企業的成本結構。

今年 AI 因為基礎建設帶動,銷量會創高;手機的銷量一定衰退。也許品牌可以像 iPhone 一樣改賣 Pro 和 Pro Max,把重心放到高階機款,總銷量下滑但單價提高,順便把生產成本反映進去。游庭皓認為比較可能的情況是,不論總銷量還是總營收,消費性電子今年都是重度衰退,成本上升成這樣,利潤一定很難看。

外資買美股 2.8% GDP,買美債只剩 2%

全球資金的流向出現比較大的轉向:外國投資人買進美股的速度,已經明顯全面超越美國公債。這件事在游庭皓眼裡並不正常。從 1980 年到 2020 年,很長一段時間,海外市場對美國公債的買盤遠遠大於美股;台幣為什麼值錢,很大一部分就是因為央行持有大量美債。

從今年六月以來的一年間,外資流入美股的平均規模相當於美國國內生產毛額的 2.8%,高於流入美債的 2%。以前美國資產在美債這一層,主要由外國人承接,現在轉為美國財政部與美國內部的銀行主動承接。

原因有兩個。第一個是美國企業真的很強:標普 500 指數今年上漲 12%,有機會連續第四年繳出兩位數報酬,第二季企業獲利暴增 50%,全球最頂尖的 AI 公司都在美國。第二個原因是美國的資產負債表越來越難看:上個月負債總額突破 40 兆美元,財政赤字還在持續擴大,三十年期美債殖利率從 4.83% 升到 5.3%,十年期殖利率也升到 2007 年以來最高。

投資人不是全面拋棄美國,而是在美國內部重新選邊站。他們寧願持有蘋果、微軟這些風險資產,也不願意無條件把錢借給美國政府。游庭皓說這其實很諷刺:明明知道蘋果違約的可能性比美國政府還高,但以相對報酬來看,寧願去投資蘋果、亞馬遜、Google,也不願意把錢借給美國政府。不只股市,投資等級債也是同一種情況。

市場對美國仍然有信心,減弱的是對美國財政的信心。「美國資產」這四個字以前被理解成同一件事,相信美國就買美元、買美債、買美股;把「美國」拆開來看,答案就完全不同。投資人真正相信的可能是美國企業,不是美國政府。看多美國也不代表什麼都看多,把美國企業、美國政府、美國股市、美國公債分開來,會得到完全不一樣的結論。

川普民調 33%,背書變成魔咒

信用的變化會反映到選情上。游庭皓說,現在幾乎可以百分之百肯定眾議院會由民主黨拿下,接下來要看參議院。川普最需要的,是投票日之前把汽油價格壓下來,但汽油與柴油價格已經陸續創高;布蘭特原油逼近 110 美元,十年期殖利率又接近 5%,高油價推升通膨、壓低消費者信心,借貸壓力同時增加,對共和黨的選情是十足的傷害。

最新民調顯示,川普的支持率下滑到 33%,比前一個月再跌 3 個百分點,是這項調查從五月啟動以來的最低點;即便在共和黨選民內部,支持率也降到 72% 的新低。拖累他的是經濟與生活成本,有三分之二的選民認為美國經濟正朝錯誤的方向前進,蓋洛普的調查則顯示 57% 的民眾認為川普執政之後自己的財務狀況變差,比上個月還多 4 個百分點。

關稅戰的副作用也在出現。56% 的選民反對川普對 200 億美元的加拿大商品課徵 50% 關稅,其中包含六成的獨立選民與三分之一的共和黨選民。連共和黨選民都有三分之一認為,對重要盟友發動關稅戰並不聰明。

川普因此成為共和黨期中選舉的雙面刃。46% 的人認為川普讓共和黨候選人更難勝選,只有 21% 認為更容易。43% 的人表示,如果川普替自家選區的國會候選人背書,自己就不願意投給他;只有 23% 的人會因為背書而投。獨立選民裡有 47% 會降低投票意願,只有 14% 會提高。游庭皓說,川普能強力動員共和黨基本盤,但只要他到搖擺州去支持某位國會議員,那個人反而選不上,中央執政對地方選舉的拖累在美國非常明顯。

共和黨這一輪最大的優勢是錢多,比想像中多很多。2024 年之後,科技巨頭對共和黨的支持沒有停過,連過去比較偏民主黨的科技公司也成了主要的資金贊助者。馬斯克支持的共和黨超級政治行動委員會支出明顯增加,親川普的 MAGA INC 投入約 1,000 萬美元的廣告費,德州共和黨參議員候選人這邊也有接近 10 億美元的資金陸續到位。馬斯克去年曾經因為稅收和支出法案公開跟川普決裂,甚至揚言成立第三黨挑戰共和黨,後來兩人關係修復,現在他又透過政治資金直接介入選戰,只要川普支持的候選人,他本人就親自支持。共和黨到目前為止大概募得接近 63 億美元,距離投票日越近,大型金主的力道只會越大。

實質薪資連五個月負成長,信用卡利率 22.15%

經濟數據並不差,但內部的消費情緒還是很疲憊。CPI 現在是 3.4%、3.5%,比起 2022 年高峰的 9.1% 已經低很多,可是這只代表價格上漲的速度變慢。認為經濟變好的比例減掉認為變差的比例,從 2020 年就已經轉負;川普上任之後這項指標曾經一路向上,2025 年底到現在又快速惡化。

美國已經連續五個月實質薪資翻負。平均薪資其實還在漲,是物價漲幅超過了薪資。從總體數字看,美國的實質平均時薪比疫情前增長 2.8%,看起來購買力提高;但研究發現,2020 到 2025 年底有 34% 的勞工薪資漲幅根本沒追上通膨,超過一成勞工每年的實質薪資損失超過 3.5%。平均美國人是真的變有錢了,但從後面 30% 的家庭來看,大部分人的購買力正在消失。

游庭皓補了一個心理誤區:很多人加薪時,會認為那是自己跳槽、談判、升職或承擔更多工作換來的,是靠自己努力賺的;等到物價把加薪吃掉,就會認為那是政府的責任。賺的錢是自己厲害,不一定投給政府;物價漲幅超過薪資,那肯定是政府的問題。

美國消費現在還勉強維持在正值,某種程度還是財富效應在支撐:股市還在相對高位,中產只要手上有一點股票部位,即使沒有賣股,也還願意維持樂觀的情緒消費。但把內部借錢的數字拆開看,七月消費信貸增長 181 億美元,比六月的 146 億高很多,市場原本只預估 117 億;年增幅最多的是信用卡循環信用,增加 28 億美元,把總額推高到 1.357 兆美元。學生貸款與汽車貸款也在創高,增速最快的還是信用卡。

游庭皓拿台灣對照:台灣人借錢多半是房貸或質押不限用途,勉強能理解成對未來有信心、提前鎖定價格;美國人借的是信用卡,只借一個月。這就很難說是對未來樂觀,還是消費快撐不住,只好用信用卡應急。更何況美國借錢成本很高,房貸利率接近重返 7%,需要付利息的信用卡帳戶平均利率是 22.15%,利率這麼高還是這麼多人借,逾期率也還在創高。

短期來看經濟動能還在,長期來看這就是聯準會現在的難題。游庭皓說,看這些細節數據就知道其實不太能升息,內部消費的壓力很大,只是 AI 的榮景蓋過了消費的疲憊;就業數據這幾個月,撇開有點極端的八月非農,其實也在緩步降下來。聯準會要在民間的體感溫度與總體數字之間做權衡。

黃仁勳唱反調,輝達一年股權投資 990 億美元

AI 放緩論這一輪,黃仁勳終究還是表態了。奧特曼、阿莫迪與馬斯克站在另外一邊,黃仁勳則公開唱反調:創新速度與安全不是二選一,美國不需要因此增加新的法律或監管,企業應該盡可能快速研發;如果自己都無法確認產品的功能與安全性,那就不要推出,等問題解決再繼續,不用另外搞一套安全規則。他昨天的公開演講講到一半,川普還打電話進去說講得好、我要支持你,兩個人一搭一唱。

即便 OpenAI、Anthropic 與馬斯克陣營都認為最尖端的 AI 能力提升太快,按黃仁勳與川普的表態,這件事大概也是不了了之,不足以形成真正的利空。游庭皓說,大家都知道那是講講而已,川普已經很明顯表態不要放緩任何速度,因為他不能接受資本支出放緩的效果。

輝達現在不只是賣晶片,它是在對賭 AI 會變成自己的生態系。過去一年,輝達對外的股權投資規模暴增 13 倍,來到 990 億美元,其中大約一半是上市公司與可交易證券,另一半是未上市、不可交易的資產;OpenAI、Anthropic、xAI 基本上都有投入,而且有很多沒有揭露。一個賣鏟子的企業,怎麼確保生成式模型、AGI 時代一定會到來?答案就是投資他們。

最大的爭議是循環融資:輝達投資 AI 公司,AI 公司再拿這筆錢去買輝達的晶片。另一種解讀是輝達正在替自己的需求端培養客戶,只要被投資的公司真的做出有用的產品,這些資本最後就可能轉化成 GPU 的需求。

一筆房貸是一筆房貸,兩顆 GPU 也能包成一張證券

游庭皓說,輝達這樣做本身沒有太大問題。他是賣鏟子的,有閒錢,又不用像別人一樣蓋資料中心、花大錢做研發;把閒錢給這些公司繼續做下去,聽起來很合理。真正的壓力來自後面那一段:當這些東西變成不同的金融商品,混在一起、包裝起來、重新組裝之後,市場的疑慮就越來越大。

現在 GPU 可以拿來抵押,資料中心可以當成 CMBS 來抵押,公司大量發行,私募信貸快速拉升,租賃與長期合約也各有各的風險,產品開始一層一層被包裝。2008 年的經驗就是這樣:一筆房貸本來就是一筆房貸,把幾千筆房貸切割、打包、分層變成 MBS,再組裝成 CDO,包裝越來越漂亮,原本的風險就好像離投資人越來越遠。有一天你接到一通推銷電話,買了一個產品,講到最後你可能只知道自己買到的是某座資料中心裡的兩顆 GPU。

兩個時代的產品當然不同,但結構值得警惕。東西越混越多,名字越取越簡單,到最後大家只知道買了一個 MBS、買了一個 CDO、買了一瓶茶,卻不知道背後的製造與加工原料來自哪裡。游庭皓用一個笑話收:早上把喝剩的綠茶、奶茶、紅茶、清茶全倒進同一個保溫瓶,騎車上班被警察攔下來問「那一罐裝什麼」,想了半天也講不清楚。

重新組裝本身不是問題,輝達的初衷也是希望這些公司成功。真正危險的是金融業組裝到最後,別人都開始誤會裡面到底有多少產品組合。因為有 2008 年的經驗,市場會提前質疑,而這個提前質疑,可能會讓這類產品被要求更高的風險貼水。AI 融資現在特別值得注意的地方就在這裡:最後由誰來承擔風險,產品又會被包裝成什麼樣子。

台股收 45,691,壓著市場的還是流動性

台北股市上漲 176 點,收在 45,691 點。游庭皓說,大家現在都在觀望,美國股市三大指數還在盤整,費半在第二隻腳之後嘗試打底。今天晚上到明天清晨的 FOMC 利率決策會議,應該會在短期內區分出一個方向。

如果投票結果跟上一次一樣皆大歡喜就好。但他猜這次的點陣圖會很極端:想降息的繼續降,想升息的繼續升,最後可能取中間平衡值,只是聯準會內部可能已經分裂。正常來說,當下的投票應該會趨於一致,點陣圖各自展現立場;可是上一次,當下的利率預期就已經明顯脫節,這次會不會產生進一步的僵局,只能拭目以待。

股市還在撐,債市先崩的壓力卻已經先到。至少可以看出來,這一輪資金流的變化從頭到尾都跟 AI 放緩論沒有關係,從頭到尾都是流動性問題,從頭到尾都是聯準會的利率決策預期。

〈Stanford CS329A Self-Improving AI Agents〉-EP-Part 9 | Future Research Areas

https://www.youtube.com/watch?v=AyO6wyu4DEg

自我改進的迴路要一直轉下去,卡住它的通常不是模型不夠大,而是三件事:推理鏈不夠多元、驗證不夠可靠,還有要練什麼題目仍然得靠人挑。

這是 Stanford CS329A 最後一堂課的收法。前面八講把「自我改進的 Agent」拆成一堆零件,最後一講先把整季收回來,再把上面那三件事各自對到一篇論文,最後換一個尺度問同一個問題:這些 intelligence 要用多少瓦去換。講者在開頭就半開玩笑說,這個領域動得太快,也許下次開課,這三篇論文就各自變成一份講義了。

一季的課,收在一個迴圈上

課是從 LLM 開始的。過去這一年,test-time scaling 跟 train-time scaling 靠的是自我改進:迴圈由 verifier 跟 feedback 驅動,跑 verifier 拿到 reward,再用 RL、甚至 search algorithm,讓模型在數學跟程式這類題目上往山上爬。這是課程前半段的重心。

再往下走是 evolutionary strategies,有一整堂課在講 open-endedness。這裡的迴圈不只用 reward 拉;如果探索空間定義得出來,也可以讓模型自己去探索,課上談的是 Alpha Evolve 這類做法。

然後是 paradigm 的轉換:用 tool use 組出 end-to-end 的 workflow。模型跟環境、工具互動,整段流程就能自己跑;任務要跨好幾步,就得去看知識庫,於是需要 retrieval 跟 memory。越靠近真實世界的工作,planning 跟 multi-step reasoning 就越吃重。客座講者補上 post-training、multimodal agents、robotics、reasoning 這幾塊;另一位講者講了 symbolic techniques,它歸在 tool use 這把傘底下,也可以餵進 synthetic data,而這是另一個正在發生的趨勢。

把這些拼起來,就是這門課名裡的 Agent。它有自己的 goal,會去跟環境互動、收 feedback,再用 feedback 修正自己的步驟;它是指揮自己流程、會用工具、把目標完成的系統。課名取作 self-improving agents,重點不只在 LLM,也在 Agent 這一面。現在這個階段,LLM 本身常常還不夠力一個人走到終點,所以人會把系統手寫成 workflow,去編排 LLM 跟工具;coding agent 這一類已經看得到 agentic workflow 自己在跑。workflow 裡編排的東西包括 LLM、verifier(通常需要一個 reward 的來源,verifier 常常就是 LLM 當 judge)、tool call、search algorithm,也可以是平行的 LLM 呼叫一起去搜。因為整條 workflow 在追一個目標,它需要 planning、需要跨多步的 reasoning、走錯方向時要修正,而且整體能力要一直往上。self-improvement 就是在這裡進來的。

同一顆模型生出來的推理鏈太像

第一篇論文處理的是多元性,方法叫 multi-agent fine-tuning。

先看它想解的難題。pre-training 的算力花在壓縮網路規模的資料上;instruction tuning 往往要真人資料,需要人的偏好來判斷哪個回應好、哪個回應爛。替代方案是用 LLM 生成的資料,也就是 synthetic data,做成 iterative fine-tuning:讓模型生出可能的解答,把錯的濾掉,這叫 rejection sampling,然後只拿對的那批去微調。變化型不少,STaR 就是課上講過的,也可以把 reasoning chain 一起塞進這個過程。

問題出在:生成資料的如果是同一顆 LLM,它生出來的解答會非常像,效能往往幾輪、或幾十輪之後就停住。根因是缺乏多元性。pre-training 規模的資料之所以雜,是因為那是人在很長時間裡累積出來的;同一顆 LLM 對同一批 prompt 生成的輸出,溫度開高也多元不起來。

所以這篇的答案是找多個有專精的 Agent。generation agent 負責生出多樣的初始解,critic agent 負責評估跟修正,兩種都是訓練出來的。流程是這樣:N 個 generation agent 先各出一個答案,接著對這批答案做一次摘要(可以另一顆模型來摘要,也可以直接接起來),critic 對更新後的答案下評論,評論再塞回輸入。第二輪所有 generation agent 生出更新版答案,取多數決,再摘要,可以一路當成辯論打下去。

一般做法是針對單一 Agent 的回應下評論,這裡評的是多個 Agent 的回應先專精、摘要之後的版本。好處是在 critique 之前,差異就已經在裡面了;多數決等於是免費拿到的,前提是這些 Agent 訓練得不太一樣。generation model 都是從同一個 base model 微調出來的,目標是給定問題時產出好答案;每一輪把輸出跟多數決比對,符合的留下,用這些 prompt-response 對做 SFT。最陽春的版本是直接換不同模型來生,實務上也有人這樣做,講者稱它是窮人版的多模型生成。critic model 也是微調過的,輸入是題目跟更新後的答案,工作是把最好的挑出來;它的訓練資料混了「答案一開始是對的,後來在辯論中被修正」這類軌跡,學的是對比對與錯的答案。

結果要看兩張圖。橫軸是微調迭代次數,縱軸一個是 negative log likelihood,當效能的代理,另一個是 embedding dissimilarity,數值越高代表越多元。兩個開源模型在多 Agent 微調下,效能可以繼續往上,Llama 3 對這個方法反應特別好。右邊那張圖更有意思:整個過程裡回應一直維持相當多元,資料集是數學。三個開源模型都看到同一件事,多 Agent 的做法撐過好幾輪微調還在進步,單一 Agent 微調的準確率則會崩掉或不再往上。因為要微調,能測的只有開源模型。這是有點舊的工作,數字不算高,但連 GSM8K 這種鄰近領域都拿到比較高的表現,代表它不只在自己那份 in-domain 資料上有用。

回到大圖:要自我改進,餵進去的 reasoning chain 本身要夠多元,靠多顆模型或多個 Agent 去生,是其中一種做法。

答案對,推理鏈不一定對

第二個瓶頸是驗證,這個題目課程前幾講就碰過。

通常的做法是只看結果。數學題或定理證明,你看的是最後答案,用 outcome reward model 判斷有沒有對上 ground truth,對上就算驗證過。課上討論過兩個問題:如果推理鏈是錯的,會不會把模型帶歪、最後造成效能落差?以及 process reward model 為什麼那麼難做?

DeepSeek-MathV2 是最近出來的論文,想證明至少在定理證明這個領域,自動化的 self-verification loop 做得起來。

它要打破的假設是這樣:現在 RL 的前提是最終答案要對上 ground truth,這就是 reward 的來源,也讓 AIME 之類的數學 benchmark 一個一個飽和。但有正確答案不代表推理是對的;要模型在定理證明上真的變強,需要嚴謹的逐步推導,最終輸出給不了這個。麻煩在於 LLM 大多是在定量推理的資料上訓練出來的,生出來的證明在數學上可能根本無效,你叫它自己驗,它會說錯的證明是對的,LLM-as-a-judge 在這裡不太管用。懂這個領域的專家一看就知道問題在哪:這一步接不上前一步,或是在引用的地方有推理斷層。

DeepSeek-MathV2 除了 reward model 之外,還訓練 verifier,再在上面加一層 meta-verifier。一開始先讓真人指出證明裡的問題,而且不給參考解;用這批資料訓練 LLM 去辨認證明裡的問題、並且改進,最後就得到一顆能自己批判證明的模型。

架構上,generator 加 verifier 是 train-time scaling 的標準配置,一顆模型生證明,另一顆指出問題。多出來的是 meta-verifier:它會去看 verifier 的分析合不合理、對這份證明的判斷有沒有問題;verifier 則被訓練成根據這些問題替證明打分,分數落在 0.5 到 1 之間。verifier 再去改進 generator,generator 生出更難的證明,回頭再改進 verifier,形成一個迴圈。另一個重點是標註可以自動化:一旦有了找錯證明的種子資料,meta-verifier 把這件事學會之後,就不必一直靠人來標。

meta-verification 這個概念本身也值得記著。verifier 有可能在推理鏈是錯的時候給出正確的分數,例如它自己編出根本不存在的錯誤。meta-verification 問的正是:verifier 指出來的問題真的存在嗎?分數有從那些問題推出來嗎?也就是在評估「verifier 做得好不好」。他們讓專家標註這個評估的品質,只加上這一個 block,品質就往上。原本是 reasoning chain 上面有一層 verifier,現在 verifier 上面再問一句「這個評估對不對」。

結果的部分:RL 迴圈一般蓋在 GRPO 上,這篇蓋在 DeepSeek V3 的 base model 上。驗證與生成的迴圈在 IMO 題跟 CNML 題上跑 benchmark,這組題先前有客座講者講過 Gemini 版本,這篇是最近開源的版本。八輪迭代下來,只算 pass@1,proof score 就一路往上;換成 best@32,也就是從 32 份生成的證明裡挑最好的,在 IMO 2024 shortlist 上幾乎到 42%。當成一種 hill climbing 技術看,這相當有潛力,意思是只要你能指出推理鏈的問題,把模型往修掉這些問題的方向推,就有東西可以爬。

洞見收在這裡:最好的證明會拿到比較高的驗證分數,generator 也學得會分辨高品質跟有瑕疵的證明,self-verification 於是有比較好的改進迴圈。驗證可以是瓶頸,這是打破它的一條路。要搬到別的領域,需要的條件講者列得很清楚:LLM-based verifier 要在沒有參考解的情況下指出問題;要有 meta-verification 這層額外的 block,降低 verifier 幻覺出問題的機率;還要給 generator 額外的誘因,讓它靠刻意的推理把品質最大化。當然,這套還是受限在驗證相對容易的領域。

題目也讓模型自己出

第三個問題是:該練哪些資料、哪些 prompt?這篇論文還沒看到太多人用,但講者覺得很有意思:讓模型自己提出一批剛好落在「學過的邊緣」的任務。

現在的訓練堆疊是這樣:supervised learning 階段用人整理好的 reasoning trace;到了 RL with verifiable rewards,要靠專家整理問答對。做數學要數學專家,做 IMO 題要 IMO 專家,寫程式要強的軟體工程師。當模型能力繼續超過人,要找到更多專家、更多這種題目,就會開始卡住。

這篇的提議是讓同一顆模型既出題、也解題,等於走到另一個極端:不需要外部資料來源,也不需要人寫的 prompt。這件事在某些領域可行,他們挑了程式。題目分成三種:abduction、deduction、induction。

proposer 出題的方式,基本上就是幾種程式題的 paradigm。deduction 是生出程式跟 input,環境執行之後得到 output。abduction 類似,一樣生程式跟 input,環境算 output。induction 不一樣,它抽一個現成的程式,替它生新的 input,再加一段自然語言描述這個函式在做什麼,環境執行完再判斷這是不是往對的方向走。proposer 會 conditioned on 過去生成的例子,這些例子會明確寫進 prompt,作用是增加多樣性。

題目怎麼選?用難度。每一道生出來的題目都會送給 solver,成功率是 0,proposer 拿 0 分;成功率不是 0,就拿 1 減掉平均成功率。他們想選的是不 trivial、也不 impossible 的題,也就是 solver 有時成功、有時失敗的中等難度,這樣才有東西可學。proposer 的目標是在當前權重下生出最佳難度的題目;模型變強,它就要學會出更難的題。

有效性也要顧。在程式的抽象下,可以跑程式完整性檢查,真的執行看有沒有錯;可以做安全檢查;也可以確認同一組 input 跑很多次會拿到完全一樣的 output,這件事在程式裡做得到。提議的題目進訓練管線之前都會先驗過,這樣 proposer 沒辦法靠 hack 生出垃圾題。另外有一個 buffer:每一組 seed triplet(identifier、input、output、program)都會進 task buffer,proposer 可以從裡面抽參考,同時記著模型在這題上成功或失敗過幾次。累積下來就是一個隨時間演化的 curriculum。

結果是在 coding benchmark 上拿到 SOTA,而且 prompt 那一側完全沒有人整理過的資料,表現還贏過用數萬筆專家範例訓練出來的模型。出現的行為包括:複雜度指標隨時間往上,這在 proposer 一直加難度的情況下可以預期;迴圈設定正確的話,程式跟答案的多樣性也變好;proposer 隨著訓練進行,出的題越來越難。proposer 跟 solver 有一點對抗的味道,像賽局,但整體是把對方推上去。

這裡的 takeaway:任務選擇不該卡在人的資料上,前提是有某種形式的驗證,而且要有做 curriculum learning 的能力。雖然只在模型自己出的程式題上 hill climb,coding 跟 math benchmark 上都有強表現,math 也變好是比較意外的事,用領域裡其他結果可以解釋一部分。還有一個規律:模型越大,相對小模型拿到的增益越大。

另一位講者補了 Swirl 的結果,說兩邊看到的東西很像。在 Swirl 裡,模型自己生成訓練資料,不只讓它在生成資料的那個任務上變好,還會有 transfer。Swirl 做的任務是帶 retrieval 的 multi-hop 問答,但隨著 synthetic data 越生越多、RL 越做越多,模型在別的工具呼叫上也變好,例如呼叫 Python 解數學題,反過來也一樣。這裡有一個重複出現的趨勢:模型自己生成資料,跟泛化是綁在一起的。另一件有趣的事是,比較大的模型更會吸收這種 data flywheel、也更容易從中泛化,至少在 Swirl 的 RL 最佳化這一側是這樣。

講者把三個瓶頸收在一起,順便給出下一個研究方向。要真正的泛化跟推理,reasoning chain 的多樣性是關鍵,而怎麼做到還是開放問題;驗證要更好,越能打破驗證迴圈、不被人力或只有專家驗得動的題目卡住越好;第三是資料選擇,人能整理的 prompt 有限,打破這道牆對下一代的自我改進模型很重要。另一位講者補的方向是:如果只在「可以驗證、可以生 synthetic data」的領域把自我改進推到極限,把這些能力帶回多樣的 verifiable 任務,效能能被推到多高?能不能讓模型在驗得動的領域越來越聰明,同時把不可驗證領域對標註資料的需求降到最低?他補了一句,這會是很吃算力的實驗。

驗不動的領域怎麼辦

課堂上有人問,哪些應用不落在 verifiable 問題裡。答案是驗證很慢的那些:科學發現;chip design 裡跑一次要好幾天的模擬,跑完才收到一個 reward 訊號;或是化學實驗,得進 wet lab 跑完才知道品質好不好。這些領域難,是因為 RL 微調或 test-time scaling 需要 verifier 幾乎是即時的。等一下可以,幾分鐘可以,一小時或許也行,但 RL 訓練要跑幾百幾千步,不能等好幾天,也不能讓人進迴圈替它收 reward。真正不可驗證的還包括創意,或任何帶主觀性的指標。creative writing 就是:設計一個精確的 reward function 很難;當然可以把它建模出來,但模型只要稍微偏掉,RL 或 Agent 就會去 reward hacking。

現在有人怎麼解?訓練一顆另外的 reward model 去預測模擬的結果。不要真的跑那些昂貴的模擬或實驗,先在線下收一大堆資料,訓練 reward model:給定 input,預測 output 的品質,然後拿它當 RL 最佳化裡的驗證對象。但 reward model 的泛化能力取決於資料量,也可能不準,不準就會出事。

講者另外補了自己領域的例子。不用講到 chip design,光 Stanford 跟 Yale 做過的 kernel bench,編譯器執行就能給訊號,看有沒有生對程式,也有些指標可以量。但有個課堂專案要讀 performance profile,事情一複雜就難了:簡單的東西或許能設計出最佳化過的 kernel,但把這些東西全部串起來、要做 performance profiling、還要改掉沒最佳化的部分,整體上就是更難的問題。常見的解法是把問題拆成子問題,讓模型一個一個看,再放一些參考解在知識庫裡讓它查。講者說他描述的其實就是那個課堂專案,重點是問題本身難、模型能力又還沒到,所以往往要靠拆解,拆成模型現在做得到的樣子。

每一瓦能換到多少 intelligence

前半段講的是怎麼讓模型更會自我改進,後半段換一個角度:這些 intelligence 要花多少電。

這是跟 Professor Ray、Professor John Hennessy 及一大群合作者一起做的工作。他們看模型端跟硬體加速器端的趨勢,想知道未來的 AI 推論工作負載會長什麼樣,模型多大,需要什麼樣的加速器來服務。

現在的處境,講者用一個詞形容:mainframe 時代。ChatGPT、Gemini 這些大模型都跑在雲端,不跑本地,因為模型大;有些是專有的,根本拿不到;就算是開源的大模型,也還是在雲上跑。同時算力需求在爆炸。Google Cloud 過去十二到二十個月,服務的算力成長大約 1200 倍;Nvidia 有過年增 10 倍的年份。這些數字明確是被 AI 拉出來的。要滿足這個需求,資料中心要的電力大約是 250 gigawatt 這個量級,而且還在往上,所以能源供應只會更吃緊。Google 那邊處理的 token 數,去年二月是 160 兆,今年十月是 1.3 quadrillion,也就是 1300 兆。這是歷史上最快的算力需求成長之一。

但看一下工作負載長什麼樣。從一份很大規模的 ChatGPT 使用者資料集看,大約 77% 的請求是實用指引、找資訊、寫東西這類任務。很多這類任務不需要最強的前沿模型,小一點的本地模型就能處理。使用者當然會隨著 chatbot 變強、問越來越難的問題,但絕大多數查詢還是落在複雜度比較簡單的那一側,小的模型就接得住,不必動到大顆的專有模型。

另一邊,本地推論加速器在進步。2012 年到現在,本地加速器的 GPU 記憶體大約成長 126 倍;現在筆電、MacBook 可以有 100GB 這個量級的記憶體,再加上 8-bit 量化,某些最大的模型也能塞進本地跑。所以問題變成:本地推論可以在重新分配推論需求這件事上扮演什麼角色?現在幾乎所有流量都進雲端,進 H100、TPU、GP200、GP300 這些加速器。

為了系統性地看,他們先定義一個指標,intelligence per watt,簡稱 IPW。能力這一側看的是模型能處理多少比例的查詢,針對單輪跟推理型的查詢;這份研究裡把本地模型定義成 active parameters 20B 以下。效率這一側看的是在本地硬體上跑這些模型,每一瓦能換到多少有用的算力。定義寫下來是平均任務準確率除以平均功耗。

他們看的範圍:二十多顆本地模型,包含 Qwen、GPT-OSS 這類;企業級跟本地加速器都看;工作負載是一百萬筆來自 ChatGPT 的查詢,加上 natural reasoning、MMLU Pro、Super GPQA 這類推理 benchmark;指標有準確率、能源、延遲、算力使用等。這批資料拿來理解趨勢,不同模型與硬體組合下的各種指標也開源出來。

三個發現。本地模型已經很不錯,進步的趨勢更值得注意:2023 年以來,它們在準確率、或說能解決的 chat 查詢比例上成長 3.1 倍,而這只花了兩年;現在能處理前面那批查詢裡大約 88.7%。本地加速器的效率還落後企業級晶片,Apple M4 Max 的 IPW 比 B200 低 1.5 倍;原因是 B200 極度針對語言模型工作負載最佳化,M4 還要顧其他種類的工作負載,而且當初設計這些晶片時並不預期 LLM 會跑在本地,所以晶片設計者的重心大多放在雲端規模。最後一個觀察是 IPW 這個指標在過去兩年大約改善 5.3 倍,其中 3.1 倍來自模型變好,另外 1.7 倍來自硬體變有效率。

兩條趨勢擺在一起看:本地模型越來越強,能解以前解不了的題,速度還很快;同時模型效率跟硬體效率都在變好。這指向一個未來:越來越多流量可以由跑在 edge device 上的模型處理,筆電或手機都算。

還沒解完的幾件事

講者把幾個沒解完的方向列出來。一個是 test-time scaling 的基礎原理。現在的做法是透過 RL、收資料、然後微調模型,但這裡顯然還有更多東西。比如:為什麼會有這種性質?一直對模型問同一個問題、靠 test-time scaling 讓正確答案冒出來,這件事對模型來說代表什麼?把成功的軌跡 distill 回模型的最佳做法又是什麼?這些都還是開放問題。從 synthetic data flywheel 這個現象,可以很清楚接到 continual learning。

continual learning 的落差是這樣:人解任務、學東西,腦子是一直在進步的;模型大多是離線流程,某個 Agent 收了經驗,過一段時間才微調一次。人的行為跟模型的行為之間有落差,continual learning 這個概念有可能處理它。講者想問的是,什麼新的做法可以把正向經驗、從負面經驗學到的東西、還有模型解題的過程,用更自然的方式放回模型裡,不要走現在這種非同步的「生資料、再微調」。

還有一塊是 infra:high throughput、low latency 的 test-time scaling。test-time scaling 的做法,不管是重複取樣、對前幾輪的結果來回更新、還是工具呼叫,都跟現在主流的 chatbot 用法差很多,後者大多是單輪來回。這代表系統與推論最佳化有很大空間。講者的實驗室做過 Hydrogen、Tokasaurus 這類工作,這些方法變成主流之後會更重要,需要特定的做法去最佳化系統跟底層算力。

課程那張總圖上,pre-training 那一塊也有很多有意思的工作,這門課碰得比較少,重心放在 post-training 跟 test-time scaling。而現在衝出來的是 synthetic data flywheel 跟 continual learning,它們長在 fine-tuning、online learning 跟 test-time scaling 的接縫上。回到 IPW,下一步也很清楚:如果推論真的從全部在雲端,變成很大一部分在本地,那會需要 hybrid 的 inference serving engine,能在本地與雲端的模型跟加速器之間順順地分流,看需求跟資源的複雜度決定。另一個方向是新的模型架構與 kernel,特別是為本地加速器做能源效率,這塊比雲端加速器少人做很多。能源會是接下來最珍貴的資源;IPW 這類指標,以及更好的方式去理解與量測能源、瓦數、功耗,並且據此最佳化,會很重要。現在它還不是主流的目標函數,但預期會越來越普遍。

學生問的問題

第一個問題是:continual learning 是記憶系統的事,還是 LLM 本身的事?講者說,long-term memory system 確實是人類的類比。但在那之前,光是在 multi-step reasoning 裡從成功與失敗學習,讓模型把這套技能留下來,把權重、或一部分權重用有用的方式更新,就已經是個重要能力,而我們基本上還沒有。能不能學會一個新技能?能不能學會怎麼學?他舉機器人當例子:能不能看影片就學會一件事怎麼做,而不是被餵一大堆任務示範。

另一位講者補了其他把知識帶進來的路。in-context learning 是一種。想像有一個無限長的 context,模型可以完美取用裡面每一塊、並且從中學習;我們沒有這個,但如果有的話,那也許就是 continual learning 的一種解:把所有正面與負面的東西都放進 context,模型同時記得、同時對它推理。現在做不到,就算到一百萬、幾百萬,模型對 in-context 資料的推理能力還是會衰減。另一條路是課上講過的 Cartridge:不動權重、不微調,把東西放進 activation,或說 KV cache,來實現長 context 與 in-context learning。所以 continual learning 不一定只等於微調,把有效 context 長度大幅拉長也是一種想法。

追問是實作面的:一直更新權重,還是更新一個記憶庫,哪個比較容易?講者說看應用。如果那是知識庫,更新記憶庫容易,最簡單的版本就是留一個資料庫讓 LLM 學著去查,要更新就更新資料庫。但你真正想教 LLM 的是對新領域推理的能力,外掛一個記憶系統做不到這件事,這時候更新權重就做得比較好。他舉機器人為例:不管加多少記憶系統,如果沒有更新 LLM 的權重,cross-embodiment generalization 不會發生,那比較是技能轉移的問題。

另一個問題來自課堂,問到 Absolute Zero 那篇:環境好像就是 post-training 用的資料,那有沒有論文是讓 Agent 自己生出環境的?講者回,在只有窄域智能的世界裡,遊戲可以做出模擬,拿來當玩具任務的環境。這一代環境之所以重要,是因為它們是真實世界任務的代理。所以重點不在「有沒有讓 Agent 自己生環境的論文」,問題其實是:你想代表的是哪一組任務,如果它容易模擬,用 Agent 生或用軟體生差不多。真正要問的是,它是不是模型跟真實世界互動、拿 feedback 的合理代理。遊戲的探索空間有限,比較容易用程式表示,也比較容易做模擬。

課結束的地方

講者在最後謝謝這班學生,說教這門課、準備這些內容是很享受的事。這個領域在動,現在教的東西,等下次開課就開始變成歷史,但學到的基礎技術長期都有價值,因為新東西大多還是長在這些基礎上;他也期待看到大家的專案與 poster。

另一位講者補的是自己的角度:他們在做投影片、備課的過程也學到很多,因為很多題目就是這麼新。謝謝學生一起走這段,希望大家學到新技能、被新的方向啟發,也希望這只是開始。

〈Stanford CS329A Self-Improving AI Agents〉-EP-Part 8 | Agentic Evaluations and Long Horizon Tasks

https://www.youtube.com/watch?v=8JAqLnTaZu4

Stanford CS329A「自我改進的 AI Agent」第八講的主題是 agentic evaluations 跟 long-horizon tasks。課一開始先問了一圈,班上同學做過的 agentic eval 有 multi-hop 的問答、有拿私人 wiki 當知識庫的 QA、有幫論文核對參考文獻的正確性,也有重構整個 repo 這種事。這些場景有個共通點:它們都不是答案已經放在 context 裡、答一次就結束的題目。

講者也提醒尺度的變化。四、五年前,模型能生出任何解釋都算大事;現在要量的是它可能怎麼影響經濟、怎麼影響安全,而傳統 benchmark 那種聊天、問答、單次作答的題目正快速飽和。模型卻已經在做要好幾個小時的工作,我們手上沒有一把公認的尺。整堂課用三份研究回答兩個問題:模型能完成多長、多複雜的任務,以及這些任務在真實世界裡值多少錢。

這兩個問題各有一把尺。METR 用人類專業者的工時當錨,量模型能完成的任務時間軸,順便量在那個長度上它有多可靠。OpenAI 的 GDPVal 把真實工作直接交給模型,跟業界專家的產出比 win rate。講者說兩者都有效,看到的 insight 也接近,但量出來的趨勢差很多,而這個差異本身就是重點。

METR:用人類專業者的工時當尺

METR 的題庫由三種長度的任務組成。最短的一組是 1 到 30 秒的原子動作,例如在軟體工程裡把一個檔案打開,約 66 題。中間那組是一分鐘到三十小時的軟體與研究工程任務,數量最多,約 97 題。最長的一組是完整 ML 研究風格的工作,可以做到八小時,只有 7 題。合起來大約 170 題,最短一秒,最長八小時。

流程是這樣:先蒐題、審題,確認每題夠明確;再讓該領域大約五年經驗的專業者實際做一遍,記錄成功完成的時間,以及在他們眼中這題有多難;agent 那邊則反覆跑,量成功率。資料夠了之後,把成功率對人類工時擬合成一條曲線,從曲線上讀出模型在這個任務長度上的表現,也就得到「時間軸」這個數字。

人類那一端有它自己的問題。有經驗的人被訓練成知道「怎樣算做完」,所以常常低估題目的難度;人覺得難不難,跟模型覺得難不難也不一定同步。他們的做法是找幾位專家解同一題,看人之間的一致性,數字差太多就再補資料點,大致一致就往下走。

那個 50% 也要講清楚。它不是「每一題都必須過一半」,而是每個任務各自算多次嘗試的成功率,再把各題的成功率平均起來。所以 50% 的意思比較接近:這件事交給它,大概一半的時候會拿到好答案。

七個月翻一倍,但那是 50% 的成功率

把成功率跟人類工時放在同一張圖上,趨勢是這樣:一秒到三十秒的短題成功率普遍偏高;一分鐘到好幾小時的多元題型散得很開,最高到 0.8,最低到 0;完整研究題有成功案例,整體偏低。任務越長,模型越難一路待在軌道上。

沿著時間軸看模型世代,2019 年的 GPT-2 大約只能處理兩秒的任務;2023 年的 GPT-4 到幾分鐘,換算下來約 8 分鐘;2025 年的 Claude 3.7 Sonnet 是 59 分鐘。這是 50% 成功率的水準,大約每七個月翻一倍。講者用一個日常比喻壓住這個數字:等於把事情交給一個實習生,他只有一半的機率做完,可能交回答案,也可能沒有。

換到 80% 成功率的門檻,同一顆模型只剩十幾分鐘的任務長度,課堂上先講 8 到 10 分鐘,後面換算成 15 分鐘左右。80% 那條線大致也照著同樣的節奏在長,只是位準低了一截。59 分鐘跟十幾分鐘之間的落差,就是真的要部署時會碰到的可靠度問題。

這些改善是哪些能力帶來的?講者列了 reasoning、code generation、tool use 這幾條主線,再加上幾件不那麼顯眼的事:不要一直重複同樣的行為、出錯之後能恢復、對「最終目標是什麼、自己走到哪裡」有記憶跟掌握。課堂補充的方向也類似:把 context 整理好、context 滿了就壓縮、遇到複雜問題先規劃再依新資料重新規劃、拿到使用者回饋就把工作重做一遍,以及對 codebase 這種環境有 memory。

失敗模式是另一個重點。研究者把 GPT-4 這種非推理模型跟 o1 這種推理模型並排比,看到幾種反覆出現的壞法:規劃能力差,不知道怎麼把任務拆成步驟;工具選錯;心算或推理本身算錯;明明還在動,卻提早放棄,因為它不知道這個任務「成功」長什麼樣子;以及卡進重複迴圈,失敗之後還是繼續選機率最高的同一個動作。重複迴圈在 o1 上比 GPT-4 少。講者說,失敗模式分析很有用,因為那直接指出模型還有哪裡可以變好。

這把尺也有它的限制。碰到沒有單一正確答案、比較亂的任務,模型表現會掉。SWE-bench 的趨勢跟 METR 的圖類似,但標註者傾向低估工時,而且模型大多看過那些 GitHub repo,所以在 SWE-bench 上量到的 doubling time 會比完全沒看過的 repo 短。更明顯的是內部 PR 的實驗:同一個題目,外部承包人員會比 repo 維護者慢 5 到 18 倍,而模型的表現比較接近承包人員的時間。講者的解讀是,模型現在的定位還比較像一個沒有 context、被叫來解題的外包,還不是那個懂這個領域的專家。

GDPVal:把真實工作交給模型,跟專家比 win rate

GDPVal 把問法換掉。METR 問的是「這個我想交給 AI 的任務,它能不能做完」;GDPVal 問的是「同一個任務交給模型、不交給人,產出夠不夠好」,而夠不夠好由 win rate 決定,比的對象是業界專家。

題庫直接從真實工作來,設計者是各領域十年以上經驗的專業人士,涵蓋不動產、政府、製造、專業科學與技術服務、醫療、金融、零售、批發,以及資訊業(包含影片剪輯)。課程上舉的例子包括:製造工程師要設計組裝線用的電纜捲軸立架 3D 模型;投資分析師要做競爭地景;註冊護理師要看影像寫諮詢報告;影片剪輯師要依腳本剪出開場影片;客服要草擬回覆不滿客戶的 email;飯店禮賓人員要排一家四口的行程;稽核要從幾張採購單裡找出定價不一致;房仲要做新案的銷售手冊;活動人員要排園遊會的攤位動線。因為這些題目帶主觀成分,成功指標才用 win rate 取代對錯。

規模上,這份資料集鎖定 GDP 前 5% 的經濟價值、九個產業、約 44 個職業;O*NET 裡跟電腦相關的數位任務,大約 60% 進了這個評測集,其中一部分是公開的 gold set。題目平均要七小時才能完成,有些要好幾週;文字跟多模態都有,CAD、影片、音訊、試算表、簡報都算;gold subset 平均一題大約 400 美元;大約 70% 的題目要求模型去跟參考檔案互動;89% 經過專家確認規格夠明確,不是因為寫得含糊才把模型考倒。

趨勢跟 METR 長得完全不同。GPT-4o 在 2024 年的平均 win rate 是 12.4%,之後慢慢爬到 25%,再到 30 幾%,Claude Opus 4.1 上來後是 47.6%。這條線接近線性,跟 METR 每七個月翻一倍的指數線是兩種形狀。

講者花了不少力氣解釋這個差異。指數趨勢很容易讓人往下推:現在能做一小時的任務,下一季就能做幾小時,再下一季就是幾天。GDPVal 說的是,好幾小時、幾天、甚至幾週的任務,模型只有某個程度的可靠度;而且它是按職業拆開來看的,比單看「幾小時」這種數字更接近現實。

模型之間也有性格差異。一邊在美感、文件排版、理解 PDF/試算表/簡報上比較好;另一邊在指令遵循、計算正確、純文字任務上比較好。失敗模式最常見的也是指令遵循:模型答應要去讀參考資料,實際上沒讀,然後用自己的幻覺蓋過去;另外還有排版錯誤。某一邊在跟參考資料相關的指令遵循錯誤明顯較少。

可接受度的分布長這樣:大約一半的任務是「可以接受但略差」,只有約 20% 是模型真的更好,29% 是差或災難;人類評分者之間對同一份產出也有分歧。

課程還把 GDPVal 接回這門課的主題。既然講的是自我改進的 agent,平行採樣或序列採樣(同一題試很多次,每次拿上一輪的結果再改)能改善多少,就是個好問題。允許試 N 次的話,成本大約改善 1.6 倍、速度大約 1.4 倍,相對於沒有輔助的專家;而且在它成功的那個子集裡,成本還不到人類專家薪資的 10%。

哪些職業已經接近打平?政府、零售與批發的表現接近人類專家;短題、幾小時以內的比較好,題目一長就下滑;多模態跟文字任務各有強弱。已經摸到人類專家水準的包括租借櫃檯人員、房仲、進出貨與庫存管理、採購、電腦與 IT 系統主管、軟體開發;另一張圖上表現突出的是政府行政服務主管、法遵人員、醫療與健康服務主管、個人理財顧問、客服、零售銷售第一線主管,以及銷售、編輯、調查與新聞分析這幾類工作。

但把 prompt 裡的 context 拿掉,win rate 會掉幾分,更根本的問題是模型不知道該去做什麼。真實工作是 context 很重的:人負責決定要解哪一個問題、要把哪些背景放進來,模型負責解。這跟前面承包人員與維護者的落差是同一件事的兩面。講者的近期結論也因此保守:AI 輔助已經在專業 workflow 裡發生,配上人類監督確實划算,不同職業受影響的程度差很多,而且不同模型強在不同任務類型。

DeepScholar-Bench:寫一篇 related work,看它漏掉什麼

第三份研究把焦點放在研究合成上面。任務是幫學術論文寫 related work 那一節。這個題目算是課堂上有人許願的,希望 AI 幫忙寫論文的 literature review。選它有兩個理由:寫論文的人都需要它,而且它必須不斷更新,用新論文重跑,沒有過期這回事。這個領域也不是沒人做,OpenAI、Gemini、Perplexity 都有 deep research 產品,STORM 跟 OpenScholar 從史丹佛出來,這門課的作業也讓人自己搭過一個 deep research agent。

資料集用近期 arXiv 論文,PhD 難度,橫跨 22 個領域,每月用新論文重跑一次,所以它是 live benchmark,也避開資料污染;挑的論文只在主要模型訓練完成之後才發表。

評分拆成三個軸。第一個是 knowledge synthesis:產出有沒有把知識組織好、讀起來連貫,以及有沒有抓到關鍵事實。第二個是 retrieval quality:檢索回來的參考文獻跟你要研究的主題相不相關,引用次數好不好看,以及涵蓋度,也就是有沒有找到真正重要的論文。第三個是 verifiability:citation 有沒有支撐它旁邊那句話,這裡同時看 precision(引的都對)跟 coverage(該引的有沒有引)。三個軸的指標都經過人類驗證,人類之間的一致性大約 70% 到 80%。

現有系統沒有一個超過 19%。講者特別點出,大部分 benchmark 到後來都會飽和,這一個還有一大段空間。

拆開看更有意思。某一套 deep research 系統的英文寫得好、組織也漂亮,但幾乎所有模型都持續漏掉關鍵事實,漂亮歸漂亮,不保證涵蓋。檢索整體只是「還可以」,大家都找不到完整又重要的來源,文件重要性全部低於 12.5%。verifiability 方面,有一套系統的 precision 到 90%,而 OpenAI Deep Research 的英文很順,verifiability 反而較低。講者把話說得很白:寫得連貫跟驗得過,目前沒有一套系統同時做到。

失敗模式集中在幾個地方。找不到完整的來源;即使找到相關文件,也不一定找到奠基性的論文,因為專家是靠經驗知道哪些非引不可,那種 context 是累積出來的;模型不太會判斷文件重不重要,只能判斷相不相關;檢索對了,也不一定有效率地抽出關鍵資訊,把正確來源直接給它,關鍵事實的覆蓋率也只有大約 50%,不給更低。

這也回答了「為什麼要挑一個看起來很窄的題目」。講者的論點是,真實任務要能用,就得有辦法好好查知識庫,研究合成只是一個代表案例。任務長度跟經濟價值之外,還有一整類能力是關於去哪裡找資料、找到之後怎麼用、用完能不能驗。

三張尺量到的不是同一件事

三份研究並排之後,會發現它們各自簡化了不同的東西,缺口也不一樣。

METR 是自動評分,沒有多 agent 互動,題目設計成單一 agent 就能跑,不特別懲罰犯錯,也沒有資源限制。真實工作可能有主觀的評分標準,可以拆給多個 agent,也有成本跟犯錯的代價。

GDPVal 的題目規格寫到極致,人腦裡該有的 context 全部寫進 prompt,而且一次做完,沒有來回修正的機會;它同時要求模型自己已經具備那些說不出口的知識。

DeepScholar-Bench 要模型檢索、抽事實、驗證,還要把 precision 跟 recall 的取捨做到那個職業可以接受的程度。

同一個任務放在不同的尺上,讀數會很不一樣。研究合成任務在 METR 的尺上是 30 分鐘到 8 小時,現在的能力大約到 50 分鐘,但在那個長度上品質可能還是差的,成功率可能只有一半。所以 METR 的圖上好看,不代表經濟價值高。

到這裡,能確定跟不能確定的就分得出來了。能確定的是:隔離、規格明確的任務一直在進步;軟體工程跟 ML 研究是進步最明顯的兩個領域,一部分原因是我們自己比較懂這兩個領域,等於在自動化自己的工作;小時級的任務做得不錯;比較強的模型能生出組織很好的產出,即使不是每一部分都對。

信心較低的是:需要大量 context 的任務表現不好,prompt 一模糊就不知道要做什麼;對抗性的環境下表現也不特別好;要 95% 的可靠度還不到;軟體跟知識工作之外的泛化還沒真的看到;碰到知識庫,檢索、抽關鍵事實、再把抽出來的東西驗到高準確率跟高涵蓋率,都還是缺口。

剩下的長尾

課程最後把三條線收在一起。METR 說 50% 可靠度下的時間軸每七個月翻一倍,外推到 2028 到 2031 年,幾乎是一個月長的任務可以交給模型;GDPVal 的 win rate 是線性爬升,即使某些任務已經到 48%,還是有很多類別拿不到高 win rate,而且很多題目需要 context 或參考資料;DeepScholar-Bench 顯示的是檢索跟驗證的硬缺口。

講者自己的判斷偏保守:可靠度跟錯誤恢復會繼續改善,但表現會隨任務類型變動;horizon 變長不等於輸出可靠或高品質;所以尺不能只有一把,duration-based、economic-value-based、synthesis-quality-based 的指標都需要,而且都還要找人來驗。

長尾為什麼難,課堂最後也給了方向。SWE-bench Verified 在 coding 上很強,但還有一大類任務不是 PR 型的,這些會繼續難;有人形容前 80% 容易做,最後 20% 花了十年,分散式系統就是模型很難搞對的領域之一。至於卡在哪裡,講者的診斷是資料問題跟模型能力的混合:要做出有代表性的任務不容易,補上每個任務需要的模型能力也不容易。法律研究、財務研究這種大類採用得快,但很特定的領域就卡在資料量跟模型能力上;機器人跟 embodied AI 那邊,則有一批新創直接把資料收集當成主要假設在打。

至於兩年後會變成什麼樣子,講者說他手上的其中一項任務,最後會變成 AI scientist 在做的事:提出 hypothesis、跑實驗、把整個迴圈跑完。那是他們對 AGI 的定義,現在還不到。現階段模型比較像一個很強的 brainstorming 夥伴,一個 AI co-scientist。他也覺得可靠度的長尾會是最難啃的一段。

講者最後也把問題拉回學生身上:CS 這個專業不會消失,能想清楚 fundamentals 才是關鍵,因為 AI 再強都還是需要有人把 context 給它。

〈Stanford CS329A Self-Improving AI Agents〉-EP-Part 7 | Self-Improvement and Deep Research Agents

https://www.youtube.com/watch?v=Uni9dqyuuDM

模型的輸出裡本來就躺著解答,難的是把它挑出來。

Stanford CS329A 第七講把整堂課押在「搜尋」這兩個字上。講者開場先把前提講白:我們大致知道解答存在於模型輸出的搜尋空間裡,這堂課要處理的是怎麼從那個空間裡把答案挑出來。她示範了兩種很不一樣的搜尋。一種是把 sampling 開到極限,再靠 filtering 和 clustering 把候選收斂到交得出去的數量,這是 AlphaCode 與 AlphaCode 2 的路線。另一種是在推理過程中一邊發現知識缺口、一邊發查詢,把檢索到的文件讀懂之後抄成筆記放回思路,這是 Search-O1。課程安排上,作業二用的是 HumanEval 這類單函數題目,作業三才會真正走到 agentic search 這一套。

一百萬個解答,只交十個出去

AlphaCode 要解的不是補完一行程式,而是完整的競賽題。題目給你一段描述、一組輸入輸出,等於一份契約:餵進這組輸入,就該吐出那組輸出。寫 code completion 的 agent 是幫你把當下那行接完;這裡要的是從題目讀出意圖、想出演算法、生出整個區塊的程式,而且連「先看懂 docstring 才知道該用哪種解法」都算在內。講者說,模型一次吐一行建議,開發者接得很順,成功率也高;換成端到端解掉一道題,就是另一個量級的問題。

這篇論文發表在 2022 年,講者說這是將近四年前的工作。當時他們讓模型直接在真實比賽裡跑,賽中生成、賽中篩選、賽中提交,總共打了十場,每場大約五千名參賽者。平均成績是排進前 54.3%,前提是每題只交十個候選。講者補了一句,這個水準大致和過去半年在 Codeforces 上出賽的參賽者裡約 28% 的那群人相當。這也是第一次有人示範 AI 可以跨出狹窄任務、把一道題從頭解到尾。成績表上列著每場比賽的最好、估計與最差排名,而排名是把提交出去的解放到其他參賽者的解旁邊,比正確性,也比效率。

這條 pipeline 的前半段是自己養一顆模型。他們用 encoder-decoder 架構,先在 GitHub 上大約 700GB 的程式碼做預訓練,目標是 next token prediction,loss 走 masked language model 那一套。到了微調階段,他們加了幾個技巧,其中一個叫 GOLD:對高機率的 token 給比較高的權重,對低機率的 token 給比較低的權重,等於在 next token prediction 的 loss 上再疊一層跟 token 可能性有關的加權,目的是把精確度拉起來,讓機率集中在比較有意義的模式上。他們另外做了 value conditioning 與 prediction。

接著才是這條 pipeline 真正的主角:大規模 sampling。每一道題生成一百萬個程式,一半 Python、一半 C++;prompt 裡的題目標籤與 rating 會被打亂,sampling 溫度拉高,讓解法盡量分散。

一百萬個答案不可能全部交上去,所以中間多了一道手續:先篩選,再 clustering。篩選的條件很樸素,只留下能通過題目範例測資的程式。clustering 處理的是「寫法不同、語意等價」這件事,他們另外訓練了一個測試輸入生成模型,讓它看著題目描述去預測新的測試輸入,用這種方式把語意等價的解法歸在一起。做完這兩步,才有辦法從一百萬個樣本裡挑出一小批候選,送進 Codeforces 平台。講者說,如果一題只能交十個,你不會想交十個長得差不多的解法。

評估有兩條軌道。一條是 Codeforces 的正式比賽,交出去就跟人類參賽者一起排名;另一條是 CodeContests 這個訓練資料集裡留出來的測試集,離線就能量到訊號,不必每次都在真實賽事上跑。

課堂上有人指著成績表問,為什麼同一套系統在某些比賽排得很前面,換一場就掉好幾個百分點。講者沒有直接回答,先把問題丟回去,再自己收:一種可能是那些題目離訓練分布比較遠,模型本來就沒見過;另一種可能是選答案這一步在某些比賽特別不靈光。搜尋空間裡有正確解,不代表你有能力把它挑出來,選得不好,一樣拿不到分。

pass@k 量覆蓋率,10@k 量你有沒有本事挑

要讀懂 AlphaCode 的成績,得先把兩個指標分開。pass@k 問的是:讓模型生成 k 個樣本、全部送去隱藏測資評測,有幾成題目真的被解掉。它量的是搜尋空間的覆蓋率,也就是取樣這件事本身有多會撈。10@k 的那個十,是實際能交出去的提交數;你就算生了一百萬個樣本,也沒辦法把一百萬個都拿去對隱藏測資,中間一定要有篩選與評分的動作。所以 10@k 量的是 selection 這一端做得好不好,兩個指標擺在一起,瓶頸在哪裡就很清楚。

實驗把模型分成 9B、41B,以及 41B 加上 clustering 三組,在驗證集與測試集上從 10@1k 一路做到 10@10k、10@100k、10@1M。結果有三件事很穩定:模型越大分數越好,樣本越多分數越好,同樣的模型再加上 clustering,分數再往上墊一層。clustering 之所以有效,理由不是它讓模型更聰明,而是它讓你能在十個名額裡塞進十種不一樣的思路。競賽題如果交十份本質相同的解,等於只交了一份。

把取樣預算放到橫軸、解題率放到縱軸,會看到一條對數線性的關係:樣本每多一個數量級,解題率往上加一段;底模越強,斜率越漂亮。41B 那條曲線比底下那顆三億參數的模型陡,同樣的趨勢在 pass@k 上也看得到。講者特別點出一件事:如果只准交十份,曲線會提早壓平。pass@k 是不限提交次數的假想情境,可以爬到 40% 以上;換成 10@k,只剩 30% 左右。中間蒸發掉的那一段,就是選答案的能力還不夠,你被自己的 filtering 與 clustering 卡住。

這條對數線性是可以推導的,Azalia 在前面的課講過那篇推導;講者要強調的是,就算中間插進 selection 這一步,這條線還是維持對數線性。課堂上有人問,如果趨勢繼續,樣本數再往上加一個數量級,分數會不會直接翻倍,甚至值得當成專案題目。講者的回答很直接:把模型本身變強,比一直堆樣本容易。AlphaCode 2 就是從這條路走出來的,同樣一百萬個樣本,它可以拿到更好的成績,或者用一百個樣本就打平舊版本。她也補了一個容易被跳過的假設:往上加樣本的前提,是每一個新樣本都帶來新的多樣性;如果多生十倍,解法卻都長得一樣,分數不會動。還有一個更根本的限制,底模的能力本身有天花板,模型不夠強的時候,樣本再多也救不回來。課堂上也提到 saturation:模型越小時,要追到同樣的 pass@k,樣本數得開得越大,而加樣本的效益遲早會平掉。

loss 降下去,不代表解題率會上來

AlphaCode 這條路線的收穫,講者收在覆蓋率上:大規模 sampling 加上 filtering、clustering,確實可以把「正確解在不在樣本裡」這件事推到很高的水準。他們還回頭查了一件事,確認模型不是在抄訓練資料裡的解法。搜過之後,生成出來的程式帶有某種新意,所以這算是一種分布外的泛化,模型是真的在推理。

但訓練時盯著的 loss,對解題率來說是很差的代理指標,這顆模型在動態規劃與構造類演算法上就明顯偏弱。第二個代價是規模:每題一百萬個樣本,放在哪裡都不便宜。如果場景有時間限制,你需要的其實是一邊生成、一邊把可接受的解排出來,而不是等全部生完再挑。還有一件事跟難度有關:越難的題目需要越多樣本,而且這套一次到底的做法在難題上並不強;真正該走的方向是多步解法,讓難題拆成好幾步走得完的過程。

AlphaCode 2 換掉底模,也多了一顆會打分的模型

AlphaCode 2 的起手式是一個假設:為什麼要自己預訓練一顆模型,直接拿一顆現成的 LLM 來微調不行嗎。這篇在 Google 的工作挑了 Gemini Pro,做法是微調,而不只是在 prompt 裡把它帶進競賽題的世界。

取樣那邊的改動是把多樣性做到極致。他們養的不是一顆 AlphaCode 2,而是一家族模型:把 CodeContest V2 切成不同片段,配上不同的超參數、難度與題目標籤,各自微調出一個版本,再讓這些版本一起貢獻樣本。語言也收斂到只剩 C++,不像上一代是一半 Python、一半 C++;生成時把溫度與 metadata 都打亂,繼續逼多樣性。資料也換了,CodeContest V2 是開源的版本,問題與解的品質都更高。

真正的差別在選擇階段。第一代靠 clustering 這類啟發式規則,判斷哪些解法語意等價、哪些該留;第二代訓練了一顆 scoring model,講者直接把它叫作 reward model,讓它替每個候選估一個 0 到 1 之間的正確機率。這顆模型吃的不是拿來生成的那份資料,而是另一個品質更高、由人工標註與評分的資料集,學的其實是排序:同一道題,兩個解法擺在一起,哪一個該排在前面。

流程攤開就是:一百萬個樣本先全部拿去跑測試輸入,編譯不過或答案錯的直接丟掉,這一步砍掉大約 95%,剩下來的大約五萬個;接著聚成 cluster,只留下最大的十群;再用 scoring model 重新排序,每一群挑出分數最好的那一個代表。這十個代表,就是送出去的答案。

兩代擺在一起比:舊版要一百萬個樣本才有 25% 的解題率,新版在同樣一百萬個樣本上是 43%,接近兩倍;而且新版只要一百個樣本,就追平舊版一百萬個樣本的分數。對人類參賽者來說,整體落在第 85 百分位,大約是 Expert 到 Master 這個區間;如果只看它最好的兩個候選,可以勝過 99.5% 的參賽者。講者說,隔一年再推一次,只是換了一套系統,成績就走到這裡。

這裡真正留下來的一課是「用更少的樣本換到更好的成績」:底模更強、樣本更多樣、選擇更準,三個一起改才會有這個結果。代價也還在,實驗本身很貴,方法高度綁定程式這個領域,而且大部分算力花在生成那些根本編譯不過的樣本上。

九成五的樣本,死在編譯與基本測試那一關

95% 這個數字讓課堂上有人忍不住問,這樣不是貴到不合理嗎,有沒有更好的取樣方式,例如把 prompt 寫得更可靠,或改用別的做法。講者把問題丟回去,學生接了:作業一裡做過的 self-refinement 也許可以搬過來,先拿到一點回饋,再據此修正樣本,不必盲目生一百萬個。講者把兩條路分清楚:AlphaCode 這種做法比較像平行搜尋,生一大堆、靠 clustering 收斂;refinement 是在已經生出來的解上接回饋、把同一個解改好。問題是,在這個場景裡,回饋要從哪裡來。另一個可以砍成本的方向在訓練端:如果 RL 迴圈能讓模型本身更會解題,test-time 需要燒掉的算力就會少一些。

同一個問題也把討論帶到「這套系統到底要怎麼蓋」。講者把視角拉高一層:日常在用的 thinking model,背後其實也只有幾十個樣本;真正該問的是,你要怎麼蓋出那個能生出這幾十個樣本、還能把它們排隊評分的系統。用這個角度看,AlphaCode 2 已經很接近一個多模型系統:一邊是負責生成的家族,另一邊是負責評分的模型,中間靠 filtering、clustering 與評分把候選收斂到十個。如果把這樣一整套系統裡學到的東西蒸餾回單一模型,那顆模型就會變成大家熟悉的大型推理模型。講者把這個典範收成一句話:在 test-time compute 的世界裡,正確解應該存在於模型輸出的空間裡,所以你得有本事把它搜出來。自己重蓋一套系統的好處是,你手上的招比「當代模型剛好會什麼」多很多。

討論裡也順便解釋了為什麼 scoring model 不吃跟生成模型同一份資料。原因是汙染:評分模型不該看過完全一樣的題目,但它又必須看過同一個分布裡的東西,否則學不到怎麼排序。用不同階段、不同品質的資料集分頭微調,還得留意另一件事,後一個階段如果沒有把前一階段的資料混進來,模型會把前面學到的東西忘掉。

簡單題不必開到一百萬次取樣

講者丟了兩個問題給課堂:取樣策略該怎麼隨題目難度調整,以及推理要怎麼直接嵌進模型裡。

第一個問題的共識很清楚,難題才需要大規模取樣。有學生提議讓一個模型先把題目分成簡單、中等、困難,資料也帶著這些標籤,簡單題就從比較容易的池子裡多抓一點。講者把結論收在 sampling 這一側:如果題目簡單,模型本來就比較容易在搜尋空間裡撈到解,樣本數可以少一個量級,甚至靠幾輪迭代修正就能收斂,不必每次都開到一百萬。她也提醒,平行生大量樣本的目的,是逼出不同的解法路線,很少是在修同一個答案。

第二個問題把大家帶回訓練資料。有學生說,可以在資料裡加上提示,告訴模型這題用的是哪一類演算法;講者把它一般化成大家已經看過的東西。如果能把「寫程式之前先想一遍」的那段思考也放進訓練資料,那就是 chain of thought;如果反過來,先給模型答案,再要它把推理補出來,那是 STaR 那一類做法。遇到更複雜的題目,可以把它拆成子問題,為每個子問題加上提示,而不是要求模型一次解完。

有人追問,拆解之後如果第一步就錯了,後面不就跟著爛掉。講者的回答是,這正是為什麼最後一定要把迴圈關起來、而且要多步,最好還能像樹狀搜尋那樣,第一步先想幾個候選、確認大致正確,再往第二步走,走錯了還能回頭。這個方向還在早期。她也補了一個前提:任務拆解之所以行得通,是因為多數題目背後有共同的抽象模式;如果題目本身是分布外的,可能就得讓人留在迴圈裡,也就是前幾堂課談過的 AI scientist 那一類做法。

RAG 只在開頭檢索一次,複雜題目撐不住

課程後半段換到 deep research agent。Search-O1 的底層是大顆的推理模型,而推理模型有它天生的缺口:知識有 cutoff,昨天發生的事不在權重裡。講者說,還有一個更細微的症狀。推理模型遇到知識缺口的時候,不一定會停下來,而是會在推理鏈裡留下不確定性的字眼,例如 perhaps、alternatively,或是 wait。拿 GPQA 的推理鏈出來看,這種字出現的頻率很高。缺口不會自己消失,它會沿著整條推理鏈往下傳,把不確定性帶進最後的答案。

最直覺的補法是 RAG:把問題變成查詢,丟給搜尋工具,拿回一份文件塞進 prompt,再讓模型照著回答。講者用一個對比說明它為什麼不夠。如果問題只是問天氣,查一次就夠了;如果問題有好幾個部分,推理走到某一步才會發現需要新資訊,而你在一開始就把該查的查完,中間沒有再查的機會。RAG 相對直接推理當然有進步,但一進到 multi-step 的題目就會明顯吃虧。

讀懂文件再抄成筆記,才是 Search-O1 的重點

中間還有一種做法叫 agentic RAG。模型在推理過程裡遇到自己在意的實體,就插入特殊 token 觸發搜尋,檢索工具回來的文件直接插進推理鏈。這已經比開頭查一次好,但文件可以很長、又充滿雜訊,模型對長 context 的理解與推理就決定了上限;十份、二十份文件塞進去,它未必處理得來。

Search-O1 多做的是兩件事。第一個是讓模型一邊推理、一邊產生查詢,偵測到知識缺口就觸發一次搜尋,同一段推理裡可以來回好幾輪。第二個更要緊:拿到文件之後,它先讀過、判斷哪些段落跟當下的問題有關,抽出精華,再把這些筆記接回推理鏈。

講者用一題化學題走過三種做法。題目要算 product 3 的碳原子數,而 product 3 是一連串化學反應的產物。用一般推理模型,它看到不確定的名詞,就在腦內猜一個結構,然後照著猜出來的東西把答案算完,猜錯的話後面全部跟著錯。改成單純的 tool call 補文件,模型查完把文件塞進 prompt,一次塞進十份文件,資訊量超過它能好好推理的範圍,答案還是錯的,十個碳答成十四個。Search-O1 的做法是查完之後在文件裡推理,把真正相關的片段抓出來,再把整理過的資訊接回下一輪推理,答案就對了。

講者把這件事比成人類讀參考資料。你不需要把所有參考文獻都攤在桌上,你會做筆記,用自己的話把重點記下來,之後是這份筆記在幫你理解與綜合。Search-O1 裡負責讀文件的那個模組做的就是這件事:逐一檢查每份文件跟當前查詢、以及前面推理的關聯,抽出片段後附加到 prompt 上。它其實是在檢索工具內部又跑了另一個多步流程。

有人接著問,模型怎麼知道該搜什麼。講者把難點直接點出來:這才是整件事最難的地方。實務上你得先拆出問題裡的關鍵實體,針對那些實體去查,而不是把整段問題原封不動丟給搜尋工具;凡是你不打算信任權重裡那份知識的地方,就該交給 tool call。

課堂上有人問,如果前一段推理需要修正,這套機制怎麼處理。講者說這裡有個沒有寫得很明白的前提:系統裡得有一份狀態或記憶緩衝,記著目前要回答的查詢是什麼、前面推理走到哪裡。也有人問,能不能不改架構,直接在 prompt 裡叫模型把查到的東西做個總結再繼續推理。講者說這是好問題,建議在作業三直接試;她的保留意見是,這種做法等於假設模型對長 context 的理解與推理都很好,而這正是目前真正的限制,有一篇新工作叫 agentic context engineering 就在處理這件事。理想上當然希望模型能把長 context 吃得很乾淨,但那還不是現在。

文件越多,RAG 越差,Search-O1 反而越好

Search-O1 的成績攤開來看,橫軸是檢索回來的文件數量,縱軸是 pass@1,分成物理、化學、生物與整體四個面板。直接推理與 RAG 兩條線,文件變多,分數不會變好;Search-O1 的線會往上走,因為它會從每一份文件裡提煉相關資訊,文件越多,能抓到的線索越多。講者把這形容成另一條軸線:你可以靠迭代把同一個答案改好,也可以平行地多撈一些資料,再把資料削成塞得進 context 的大小。

在 GPQA 上,這條線畫出的是跟人類專家的距離。物理、化學、生物三欄都有專家的分數可以比;Search-O1 在物理與生物上已經很有競爭力,某些情況下甚至比人類專家高,化學明顯落後。講者提醒要看對角線,物理學家的分數要跟模型解物理題比,不能拿生物專家的分數去對。她也不忘踩剎車:這是「在這個等級的題目上有競爭力」,不是「已經超越人類專家」,化學還有很多空間。

有人提出一個假設:化學特別弱,會不會是因為摘要時很難保住化學意義,分子結構只要改一個地方,性質就整個變了。講者沒有下定論,只建議直接去 GPQA 上驗,並且補了另一個可能,每個科目的表現差異,也可能來自訓練資料本身不夠強,或題目落在分布外。

Multi-hop 問答是另一個戰場。這類題目要跨好幾份文件才能拼出答案,標準 RAG 做到某個水準就飽和,加上 agentic 的做法也會撞到天花板;在 HotpotQA 這類題庫上,表上被標成粗體的最好成績大多來自 Search-O1。講者也把進步歸給兩件事:不確定性下降,以及文件的品質與被提煉過的程度上升。多輪下來,模型能認出自己哪裡還不知道,再針對那裡補查,推理品質就上來了。她還給了一個可觀察的指標:推理鏈裡那些表達不確定的字,perhaps、wait、likely,數量在 Search-O1 的做法下大幅下降。

課堂上有人問檢索本身的 precision 與 recall。講者把責任歸屬講清楚:有可能真的沒檢索到對的文件,但這篇論文的主張是另一件事。即使找回來的只是好幾份「大致相關」的文件,一次全部塞進 context,等於要求模型同時對這麼多文件做推理,這才是它撐不住的地方。

最後一個沒解完的:模型不知道自己不知道

課程結束前,講者提到一篇沒時間講的 Search-R1,把它跟 Search-O1 放在一起對照:Search-O1 是用 prompting 的方式把迴圈關起來,Search-R1 則是用 RL 迴圈直接教模型怎麼去搜尋。差別在方法,不在目標。她請大家自己去找那篇論文看。

最後一個提問回到語言模型最根本的地方:模型輸出答案的時候,理論上帶著機率,這些機率跟答案對不對有沒有關係。講者先處理這個問題。把輸出 token 的 log probability 拿出來聚合,不能只是加總,起碼要做平均或幾何平均之類的處理;做出來會看到模型普遍過度自信。校正過去看,如果它只有五成把握是對的,它還是會表現得像有八成把握。這也解釋了為什麼你試著糾正模型,它有時候會很強硬地說是自己對,不太肯改。

沿著這條線,研究上有人在試的是讓模型用第二次 pass 估自己的信心,或直接用 RL、RLHF 把校正調好,讓它在沒把握的時候不要硬吐答案。不同模型的行為不一樣,外界看不到實驗室裡怎麼調,最後只剩下「這個模型在幻覺」這種籠統的說法。至於機率與正確性的相關性,講者的觀察是,答案是對的時候,模型大致會答對;答案不對的時候,它反而可能很篤定自己知道。幻覺與「模型知不知道自己在說什麼」,在她口中是一個還很活躍的研究領域,也是一個很適合拿來當專題的題目。

這堂課停在這裡:搜尋空間裡有解,選解的系統可以蓋得比模型本身更聰明,但模型對自己的無知,仍然沒有可靠的感覺。

〈Stanford CS329A Self-Improving AI Agents〉-EP-Part 6 | Train Time Scaling/Scaling RL

https://www.youtube.com/watch?v=yVnmHSAy3ck

訓練階段的算力,可以換到參數量換不到的東西。CS329A 第六講要講的就是這句話:把生成、驗證、過濾、微調接成一圈,讓模型從自己的輸出學,一顆 7B 模型在 AIME 這種競賽數學上,就能把 GPT-3.5 的五%推進到五十%以上。但這條迴圈有兩個硬條件,題目要落在模型搆得到的地方,領域要驗得動;而真正讓多數人卡住的不是想法,是 RL 的實作細節,熵、回應長度、reward 的分布,每一格沒調好,模型不是不學,是整條訓練崩掉。前幾堂課談的是推論端的算力、工具與程式回饋、強健的驗證,這一講要把迴圈關起來,用三篇論文把路走一遍:STaR、DeepSeekMath,跟把 GRPO 細節補齊的 DAPO。

AIME 那張表:小模型把大模型的位置佔走

課一開始,講者先換掉尺。前幾堂課用的 MATH 對現在的多數模型來說已經飽和,多數模型也都在上面訓練過,於是改用 AIME 2024 跟 AIME 2025;作業一用的也是這種近期的數學推理題。

同一張 AIME 上,175B 的 GPT-3.5 一般相信大約拿 5%。DeepSeekMath 用 train-time scaling,7B 拿到 51.7%,再加上一些額外的技巧可以到 60%。講者開場時把第三篇的方法講成 DPO,說套在 Qwen-32B 上可以拿到 50%。第一講談 scaling 時,故事是參數變多、能力變強;這裡要講的是另一根槓桿,而且它讓小模型跑到大模型的位置上。

三種訓練範式先分清楚。pretraining 是在網路資料上訓練,課程第一講處理過;fine-tuning 跟 RLHF 是用人類的偏好資料,把 base model 變成助理;test-time scaling 是前幾堂課的重點,多數投票、推論階段多取樣幾次、把多個輸出合起來,或評估模型輸出裡的錯誤再拿來改進。train-time scaling 就是再往前一步:把 test-time 生出來的東西濾過之後,拿回去做進一步的微調。講者說,這堂課如果只帶走一件事,就記這個圈。

為什麼這個圈值得記?因為過去的模型只從網路上的資料學,現在讓它從自己的輸出學,濾得聰明一點,就能再往上推。花在「訓練自己的輸出」上的算力,可以替代模型參數;這跟早期用小模型加大量資料換分數的路子平行。還有一個前提要先講白:直接用 RL 做推理通常行不通,多數時候不是方法錯,是實作細節很難做對,而演算法放大之後,那些小修正會變得極度關鍵。

把 test-time 的輸出接回訓練,前提是這個領域驗得動

課堂上一開始就有人問,train-time 跟 test-time 的算力該怎麼分,有沒有報酬率開始變平的那一點。講者把問題留到第三篇再答。

先看 o1 的兩張圖。縱軸是 AIME 的 pass@1,左圖橫軸是 train-time compute,右圖橫軸是 test-time compute。推論端的算力加上去,pass@1 跟著上去,這是對數線性的關係,前幾堂課已經看過;o1 這張圖多說的是,訓練端的算力加上去,pass@1 也會上去。兩條軸一起加,分數再往上,於是就有了一個可以繞的圈:模型先生出輸出,輸出回饋回去,模型在這張榜上再往上走。

這個圈為什麼在數學上轉得動?因為數學有 verifiability。前面有一整堂課在談強健的驗證,重點就是你有能力分辨哪些輸出是對的、哪些不是,才有辦法把對的那些挑出來餵進 train-time scaling。換到驗不動的領域,這條路就先斷一半。

講者把兩邊的性質對照著講。test-time compute 對使用者的門檻很低,模型訓練好了,多做幾次推論,只要其中有一個答案是對的,而你手上有一個好的 verifier,搜尋幾乎可以無限放大;下一週要講的 AlphaCode 就是這個方向的極端版本,只要搜尋能一直做下去,理論上一定找得到正確解,因為重複取樣本來就會把正確解採出來。train-time scaling 的挑戰不一樣,是你要把它 scale 對,而且這個封閉迴圈裡要有足夠的成功案例,它才轉得動。

台上也有人對那張圖有意見,覺得 test-time 看起來比較划算、有點可疑。講者的回應很直接:那張圖只是某一個時間點的其中一種切法,不同研究不一定有直覺上的優劣,而且「他們的圖不一定都對」。回到基本面,test-time 好用,前提是那個領域的驗證夠強;驗證不夠強的時候,你還是得讓模型自己變強,兩個方向各有各的用處。她給了一個很具體的說法,test-time 像是把義大利麵往牆上丟,而你剛好知道它該黏在哪裡;train-time 是直接教模型,把 pass@1 拉高,讓它更常自己吐出正確答案,但這一圈還是需要驗證。

思考模型在想什麼:分析、拆解、回頭、換路

推理為什麼有幫助,講者用現在這批 thinking model 走了一遍。o 系列、Gemini Flash Thinking,以及其他前沿實驗室的對應版本,解法都是讓模型在給答案之前,先花一段 token 把推理寫出來。這些 token 通常用在四種動作上。

problem analysis,先弄清楚題目在描述什麼。task decomposition,把任務拆成子任務。self-evaluation,回頭看自己剛剛的答案,覺得不對。backtracking,認出錯誤之後退到前面的步驟重做,甚至同時試幾條不同的路,像是一種平行的搜尋。講者強調最後這件事要有意義,模型本身得對「這是不是正確解」有一點感覺。

她拿了幾個 o1 早期版本的例子。一個是請模型寫 Bash 腳本,把某一種格式的字串做轉置再印回來。模型的輸出裡,第一步不是開始解題,而是先確認使用者要的輸入跟輸出格式是什麼,這是 problem analysis。同一個題目換一個片段,模型把解法拆成解析輸入字串、建矩陣、轉置、再照原格式輸出,這是 task decomposition;講者自己說,對這題來講有點殺雞用牛刀,但題目一複雜,這種拆法就值得。第三個例子是化學題,要算某個溶液的 pH,模型算到一半突然發現正確的公式不是它正在用的那一個,於是回頭改公式;就算知識本來就在模型裡,這個自我修正的動作還是真的發生了。

這些能力換到分數上是什麼樣子?在程式、資料分析、數學計算這類有驗證機制的領域,thinking model 對上不是 thinking model 的 GPT-4o,勝率超過 50%。換到個人寫作、編輯文字,勝率的進步就小得多。講者把這個對比收在同一句話上:能驗證、能把圈關起來的領域,進步快得多。

講者也順手回答了一個大家會擔心的問題:為了難題去微調,會不會把簡單題弄壞?通常不會,除非推理鏈整條壞掉、開始重複繞圈,那就是 overthinking。這個答案在後面的 RL 段落裡會再回來一次,因為它其實是 reward 分布跟 KL 的問題。

STaR:生成、驗證、過濾、微調

要教模型推理,第一件事是缺資料。網路規模的語料裡,多數內容沒有推理步驟,有大量推理步驟的來源很少;要人工標,成本高到不現實;想用已知的解題模式自動生成推理,只在一小撮特定領域可行;只給幾個範例做 few-shot prompting,也打不贏直接拿大量資料微調的模型。講者的結論很直白:少量的推理範例不夠用,而沒有推理鏈的大資料集反而還行。

STaR 的切入點很簡單。先準備一小批有推理步驟的範例,用它們去生成解法,例如在一萬題上跑一輪,一萬只是一個代表性數字;接著只留下答案是對的那些,這些題目帶著推理鏈,可以拿去做微調;然後把整個流程再跑一次。跟 test-time scaling 的差別就在那個「只留對的」。

為什麼不能只留對的就好?因為模型卡住的那些題目,如果直接丟掉,模型就學不到怎麼解新題,訊號等於零。STaR 對這些失敗題多了一個動作:把正確答案當提示給模型,要它把推理倒著補出來。講者用的例子是答案 42,人類把答案講出來,模型開始生推理;生出來的推理,加上題目跟答案,一起進訓練資料。關鍵在最後一步:微調的時候不要把提示一起給模型,要讓它看起來像是模型自己直接解出來的。這樣訓練集就能往更難的題目擴,推理能力可以一圈一圈往上墊,而不是卡在模型原本就解得動的那些題。

把 STaR 攤成演算法,就是生成推理、從成功的路徑學習、失敗的用提示去 rationalize、把生成的推理當訓練資料。講者把它形容成很 bare bones 的做法,甚至說它幾乎可以算是一種 off-policy 的 RL。

這套做法站在三個假設上。最終答案正確與否,可以當成推理品質的代理,他們在數學上發現大致成立,所以濾掉錯答案就等於濾掉低品質的推理鏈;代價是模型也一併失去了從錯誤推理鏈學習的機會。第二個假設是,模型被給答案當提示之後,生得出有效的推理路徑。第三個是,一開始的語言模型要強到能從少數範例 bootstrap 起來;如果題目類型離它太遠,這一圈推不動,這也是為什麼要反覆迭代。

6B 的 GPT-J:樣本效率亮燈,GSM8K 上熄火

STaR 的實驗用一顆 6B 的開源模型 GPT-J。訓練上有幾個安排:先做一小段 warm-up,學習率之後固定在常數,外圈跑固定的迭代次數,內圈的步數一輪一輪加上去;他們刻意讓訓練前期慢一點,再慢慢把每一輪內部的工作量拉高。

資料用四種。GSM8K 是大家熟悉的國小數學題,大約九千筆;Common Sense QA 是日常常識的選擇題,有推理可寫;還有多位數加法的算術題;最後一種是他們自己生成的合成資料。

幾組結果值得記。對比直接用數學資料做 supervised fine-tuning,STaR 這條路可以把成績往上推,而且只用了 70 到 87% 的資料,等於有一批沒有正確解的樣本被整批丟掉。另一個限制是它並不是真的 RL,跑多輪之後會開始平掉;講者說 RL 本身有它的難處,但這裡同樣會飽和,迭代次數要抓,還要一些調校。

Common Sense QA 上有一個比較人性的檢查。他們把 STaR 生出來的推理拿給真人看,跟 prompt 資料集裡原本的 few-shot 推理擺在一起,問人比較偏好哪一種,結果是 STaR 的推理大致說得通。同一條線上還有樣本效率:用 rationalization,資料只用了 86%,就達到 72.5% 的準確率,對比之下要達到同樣水準,一般微調得吃下更多資料。講者說這是一顆很小的模型,但這是推理這條路第一次看到有生命跡象。

到了 GSM8K 的數學推理,rationalization 反而沒什麼用。GPT-J 對 baseline 有進步,但幅度不大;直接拿好資料做微調,也能拿到類似的提升。講者給的理由是題目太簡單:模型被要求用 chain of thought 時,實際用掉的計算步數,跟給它 rationalization 提示時差不多,多這一步沒有多換到什麼。GSM8K 對當時的 GPT-4o 已經在能力範圍內,對 GPT-J 也是。即使如此,直接微調跟 STaR 加 rationalization 相比,後者還是有一點收穫。

終點對不等於每一步都對:STaR 的破口與兩個後繼

課堂上有人追問,給提示生出來的那條推理鏈,品質要不要檢查?講者說這篇沒有在 rationalization 那一步做過濾,後續的論文才開始補,例如在上面加一個 process reward model,逐步判斷哪一步說得通。她也把這個缺口直接變成專題題目:如果你不想只靠最後答案當正確性的代理,該怎麼評估推理鏈的品質?

下一個問題更根本:資料裡的答案是誰保證的?這篇的起點本來就是一個有正確答案的 benchmark,訓練集跟測試集都從那裡切出來,正確與否不是模型自己說了算。

還有人問,錯的推理鏈能不能直接當負面教材來學。講者的回答是,這件事到現在都還沒做好。目前能轉動迴圈的前提,是有非零的 reward;現在的做法大多是「對的就留下、錯的就濾掉」,從失敗中學習只有少數論文在試,不是這堂課要處理的範圍。

提示怎麼寫,也不是中性的。few-shot 的範例長什麼樣,模型就照著長,最後訓練資料也長成那樣;這一塊需要 prompt engineering,而它會把模型往某個方向偏。講者把 rationalization 的邏輯收成一句:它是條件在「你已經有答案」這件事上,有了答案,模型才比較有機會把好的推理生出來;沒有答案的時候,它可能很有自信地生出一條錯的。至於推理鏈的品質本身,多數任務根本沒有現成的評估方式,要嘛找人看,要嘛訓練一個 process reward model;而只靠最終答案過濾,中間可能藏著無效的步驟,真的陰性跟偽陽性都會出現。

課堂上最後把問題推到更根本的地方:STaR 的天花板在哪?討論收在幾件事上。它不會做出訓練資料裡沒有的邏輯跳躍,不會自己長進新領域;如果模型連提示都給了還是想不出來,rationalization 也生不出東西,錯誤樣本累積下去只會更糟。講者說這些答案都對,但真正的重點是 base model 本身能做什麼,這一整條線的魔法大多是在那個基礎上長出來的。

也有人問,這種方法對前沿模型有用嗎,為什麼不直接用更強的模型生資料來蒸餾小的就好。講者沒有正面反駁,只把課程的立場講清楚:這幾篇是在示範從零開始能怎麼做,讓大家理解這條路要付出什麼;實務上你當然可以拿前沿模型的輸出來用,那是蒸餾,另外一條路。後面兩篇延伸也順帶提了。V-STaR 是在迴圈裡多加一個 verifier,generator 跟 verifier 一起訓練;Quiet-STaR 把推理步驟從語言空間搬到 latent space,用 MLP 來做。講者的說法是,既然要讓模型在內部想,何必一定要用英文想。

DeepSeekMath:先養能力,再開 RL

第二篇換到數學推理,用的是它自己提出、後來變得很有名的 RL 方法。

它看的 benchmark 是比 AIME 簡單、也更早的 MATH。隨著模型變大,這張榜的分數本來就在往上;DeepSeekMath 出來的時候,一顆 7B 的模型突然跑到很前面。講者說,主要的躍進是他們把 train-time scaling 迴圈裡 RL 那一段做對了。

做對的第一件事,發生在 RL 之前。更早的 Minerva 是在 PaLM 上堆大量的科學與數學資料,來源多半是 arXiv 論文。DeepSeek 的判斷是,訓練在 arXiv 論文上不是關鍵;他們改用 Common Crawl 的網頁,而且起點是一顆已經在程式上練過的 DeepSeek-Coder。理由很直接:從一個程式推理已經被強化過的模型出發,數學也會跟著好。他們把 Common Crawl 裡的數學內容認真篩過,做成 OpenWebMath 這類語料,覆蓋的數學領域更廣,能挖出的 token 也多得多。講者把這一步叫做 RL 之前的 priming:如果模型在某個領域本來就弱,你得先把它的能力養起來。這也是第一次有人把「從程式起家」對數學與工具使用的幫助講清楚;他們也發現,只練 arXiv 並沒有同樣的效果。

能力養起來之後,才是先把數學資料做 supervised fine-tuning,再把 RL 放大。

GRPO:拿掉 critic,用同一題的一組答案當基準

RLHF 時代最常見的演算法是 PPO,即使已經有 verifier 也一樣。PPO 的記憶體問題出在它要同時養好幾份模型:舊的 policy、正在學的新 policy、提供回饋的 critic,還有指派 reward 的 reward model,四份一起放在那裡。7B 還撐得住,想放大就很吃力。

DeepSeekMath 提出的 GRPO 把 critic 拿掉,改成用「同一題的一組答案」當基準,模型份數從四份降到三份。做法是每一題取樣多個答案,用 reward model 打分,再把分數正規化:reward 減掉這組的平均,再除以標準差,得到的值就當作 advantage。講者說,這其實跟 DPO 那一類方法在做的事一樣,都是拿 reward 互相比較;而 reward model 本來就是用比較的方式訓練出來的,所以這種正規化放在 GRPO 的脈絡裡很合理,記憶體也省下來,RL 才有辦法往大規模走。

她沒有把完整的公式寫上黑板,只要大家記住那個直覺:reward 減平均、除以離散程度,就是 advantage 的估計。效果是 7B 在數學上從 46.8 走到 51.7,也是第一個不靠 critic、在 7B 規模跨過五十%的開源模型。

後面這一層是講者認為最值得帶走的觀念。不同的 RL 變體,差別通常只在兩件事上:資料從哪裡來,以及梯度怎麼算。梯度取決於一個梯度係數,還有一個「給定題目時輸出這個答案的機率」;係數怎麼算,各種演算法就不一樣。GRPO 的係數來自這個 group baseline,它對「單一題、只求一個答案」的任務很合適。把幾個方法擺在一起看更清楚:STaR 是生成一次,答對就是 reward 1,答錯就是 0;online rejection fine-tuning 也是邊生成邊篩,錯的就丟掉;GRPO 則是每一題生一組、每一組都打分,advantage 來自組內的平均與離散程度。

reward 沒有分布,模型就沒有東西可以爬

課堂上有人把擔心講出來:為了難題去更新全部權重,會不會把其他題目跟其他 benchmark 弄壞?講者用 reward 的分布回答。如果題目簡單到模型每次都對,reward 永遠是 1,不會有 0;分數沒有分布,正規化就沒有意義,模型也就沒有東西可以學。反過來,如果整批題目都太難,reward 到處都是 0,模型同樣找不到施力點。她要的是一批有訊號的題目,reward 在裡面有分布,模型才有東西可以爬。

KL divergence 是另一個方向的安全帶。有人指出,這件事在原始論文裡的解法就是加上 KL 項:如果模型已經會解的題目被過度最佳化,能力會回退,KL 可以把 policy 拉住,不要偏離它原本就會的東西太遠。講者接受這個補充,並把它跟自己的說法並置:一邊是選題要有好的分布,讓模型有爬坡的訊號,一邊是 KL 讓它不要跑遠。她還補了第三條路:不一定要更新全部權重,後來有一些工作跟 blog 用 LoRA 這類局部更新,也能在加入新能力的同時,把原本的表現留在原地。

reward 從哪裡來也順便被問了一次。如果 reward 只有 0 跟 1,能不能用?可以,但那只是代理,你可以對多個樣本取平均,讓它變平滑;要真的連續分數,就是訓練一個 reward model 來打分。同一段討論裡,講者也講了 DeepSeekMath 這邊一個容易被忽略的結果:這個線上 RL 迴圈主要拉起來的是 majority@k,不是 pass@k;同一題取樣 32 次,變好的是多數答案變一致,而不是模型突然能解開以前解不開的題。講者的評語是,模型變得更一致,不是真的變聰明。

DAPO:在 Qwen-32B 上把 30 調到 50

第三篇處理的是更難的題目、更長的推理鏈。把 GRPO 直接放大到很好取得的 Qwen-32B 上跑 AIME,只有 30%,而且會出現幾個典型症狀:模型的熵崩掉、變得太有自信、訓練不穩,回應長度還會失控地長。同一個榜上,DeepSeek-R1 那篇拿到 47%。DAPO 的工作就是把 GRPO 沒講清楚的細節攤開,一個一個補。第一個動作很單純:overlong filtering,把過長的回應濾掉,光這一步就把 30% 推到 36%。

再來是不對稱的 PPO 裁切。標準的 PPO clipping 把「往上加」跟「往下減」用同一把尺;低機率的 token 想被拉上來只能拉一點點,高機率的 token 一樣會被裁,探索空間就塌掉了。DAPO 讓裁切變成不對稱,允許比較大的上修。圖上的差別很明顯:做了不對稱裁切,準確率比較高,右邊的熵也維持住,沒有崩;沒做的話,熵直接崩掉。講者提醒,熵在這裡是「模型還剩多少探索空間」的代理指標。

第二個是 dynamic sampling。GRPO 是取樣 64 個答案,算出分布,用組平均當基準;DAPO 改成超額取樣,然後把「全對」跟「全錯」的組濾掉,只留下中間有訊號的那些。理由是不想浪費梯度:reward 全對或全錯,advantage 就是零,那些組本來就沒東西可傳;濾掉之後,真正有貢獻的組維持住有效的 batch size。課堂上有人問 64 這個數字是不是太小,講者的回答是這只是一個示範值,實際要取多少,取決於 benchmark 的難度跟 base model 的能力。

第三個是 loss 要下在 token 還是樣本上。如果 loss 是 sample-level,一題一個分數,那一大段又長又爛的回答,跟一句又短又好的回答會拿到一樣的權重;DAPO 改成 token-level,並加上跟長度有關的形狀調整。他們同時盯著熵跟平均回應長度:不做這件事的時候,熵會往上長,回應長度也會失控,做下去才把兩個都壓住。

第四個是 soft overlong punishment。模型碰到難題會一直想,最後被截斷,這種被截斷的推理鏈會帶進很多雜訊;DAPO 在 token 上放一個漸進的懲罰,讓訓練穩定下來,而不是把噪音吃進去。講者補充,其他論文對同一件事有別的做法,例如直接在 RL 迴圈裡把 context length 拉長,DAPO 選的是懲罰函數。

把這些加起來,Qwen-32B 在 AIME 上的分數是這樣走的:GRPO 30%、加 overlong filtering 36%、加不對稱裁切 38%、加 soft overlong punishment 41%、加 token-level loss 42%、最後加 dynamic sampling 到 50%。50% 這個數字已經超過把 DeepSeek-R1 蒸餾到 Qwen-32B 的結果;也就是說,他們是直接在 Qwen-32B 上爬坡,爬出一顆很強的模型。

loss 之外的儀表板:熵、回應長度、飽和

DAPO 這篇留下來的原則,講者覺得比技巧本身更重要:在 RL 裡,loss 本身不足以當進步的代理。要一起看三件事。回應長度有沒有失控;熵是不是落在中間,不要太低也不要太高;以及整批樣本裡「全對」的比例有多高,那個比例決定你還需要取樣多少。

症狀對應的處理也很具體。回應長度爆掉,就要去控制 loss;熵要盯住;跑了一段步數還看不到進步,reward model 很可能已經飽和。講者的結論是,RL 的外圈最佳化本身比 supervised learning 難,這也是為什麼 SFT 跟 RL 的選擇不是純粹的資料量問題:SFT 在手上有一堆高品質資料時更快、更直接,但它不會把推理鏈這種能力帶起來;RL 在 reward 訊號夠強的領域可以用少得多的範例爬坡,代價是真的很難調穩。

三套方法什麼時候用哪一套

課的最後,講者把三篇併成一張選擇表。

手上只有幾百個帶推理的範例、也還沒有 RL 基礎設施,STaR 是合理的起點;在 GSM8K 這類簡單推理題上能看到進步,幅度不算驚人,但至少還留在模型能力範圍內。如果你有一顆夠好的 base model,也願意先用好的 instruction 資料把它養過一遍,GRPO 是一個就算記憶體不夠、GPU 數量有限也能跑的演算法,在標準數學推理題上已經被證明有效。推理鏈會拉得很長、題目難到需要 state-of-the-art,才需要 DAPO 這一層:把 RL 演算法跟基礎設施裡的每一個變數都控制住,這對 AMC、IMO 這種競賽級題目很有用。

三套都會改善的東西也要講清楚:算力加上去,majority@k 會變好;答案的格式通常會變整齊;模型在多步之間會更連貫。但三套都還沒有動到最底層的那件事,沒有教會模型解全新的問題,也沒有讓它大幅跨出原本的領域。講者說,pass@k 要動,等於要模型的基本能力跳一階,而歷史上這種跳階通常來自某種突破,或某個維度上的規模化,不是迴圈多跑幾輪就會發生。

回到課堂一開始那個「算力該分給哪一邊」的問題,講者整場給的答案不是一個比例,而是兩個前提:驗證夠不夠強,以及迴圈裡有沒有足夠的成功案例。還有一個跨三篇的前提要一直記著,推理品質、整條 RL 迴圈,全都取決於模型本身有多會想,以及有沒有一個 verifier 或 reward model 在旁邊。reward model 太弱,模型爬不動;模型太強,reward 會被 hack 掉。這也是為什麼上一堂課談的程式應用特別好做,因為那裡有真的可驗證的 reward:數學跟程式有最終的正確答案,再加上執行回饋跟 unit test。問題是,這種地方有多少?以及,一個 verifier 不夠的時候,能不能用一整組 verifier 互相補位?講者提到課上已經看過的 Weaver,就是這個方向。

還沒解完的:pass@k 不動、失敗學不會、reward 會飽和

講者收在一串還沒解的問題上,也承認 train-time scaling 現在還是很活躍的研究區。

第一個是那個怪現象:為什麼線上 RL 會把 majority@k 拉起來,pass@k 卻不動?第二個是那些看起來很聰明的行為,backtracking、自我評估、自我修正,到底是模型真的長出了新行為,還是這些模式本來就在,只是變得更常見?第三個是失敗的資料。現在多半的做法是直接把錯的濾掉,只有少數論文試著從失敗裡學到東西;怎麼用失敗的推理鏈又不讓訓練崩掉,還沒有好答案。

她點的三個可能方向也很清楚:資料面,怎麼生成更好的訓練資料;演算法面,怎麼讓 RL 對 reward model 的雜訊更有韌性、該用什麼樣的 reward;以及把 STaR 的 rationalization 跟 DPO 那一類方法接起來。

最後有人問到前沿實驗室現在的配方。RL 佔整個訓練的比例,去年大概在 99 比 1 那種量級,最近長到可能 5% 左右;Grok 4 對外說自己用了 50% 的 RL,但講者說那個比例並沒有換到預期的大跳躍,因為瓶頸在別的地方:reward 不夠強,或 reward 裡有雜訊。課堂上另一個人問到 AMC、USAMO 這種題庫很小、又要小心資料洩漏的競賽資料,沒有足夠資料怎麼確保驗證訊號。講者的回答把問題換了一個問法:不是「資料夠不夠多」,而是「手上的資料夠不夠讓模型爬坡」,會不會在 dynamic sampling 的時候把有訊號的組整批濾掉。RL 本身資料效率高,要的資料量沒有那麼大;驗證訊號則是另一件事,verifier 可以用一整組來補,而不是只能靠一個。

〈Stanford CS329A Self-Improving AI Agents〉-EP-Part 5 | Planning and Multi-Step Reasoning

https://www.youtube.com/watch?v=Ml_fp9XkB8Y

規劃不是把計畫一次寫完就算了。多步任務真正的難點有三個:走過的步驟能不能拿回來搜尋、彼此不相干的步驟能不能並起來跑、工具的使用能不能在沒碰過工具的情況下學會,而這就是 CS329A 第五講排出來的三篇論文。去年 ICML 的 LATS,把 MCTS 搬進語言模型的推理路徑,用 test-time compute 換準確率;NeurIPS 2025 的 Sprint,把可以並行的計畫從序列生成裡切出來,要的是省延遲;下週要在 COLM 報告的 SWIRL,把工具呼叫留在離線標註階段,用每一步的 reward 訓練多步行為。講者收尾時把三套併起來看:它們不互斥,是一組可以拼裝的工具箱,而且每一套都留了接口給後面的人接。

規劃不是把計畫寫出來就結束

講者用一個度假規劃的 prompt 說明多步任務的形狀。推理的那一步,模型要想清楚這件事要做什麼:預算是多少、行程怎麼排。動作的那一步,是它真的去蒐集資訊:開瀏覽器、生一個搜尋 query、去讀 Reddit 或旅遊部落格。再下一步是搜尋與修正:拿到線上蒐集來的回饋之後,回頭改目前為止的計畫,也許換一個目的地,也許查當地還有什麼新東西可做。想、做、搜尋三個動作輪流出現,才把「幫我排一趟旅行」這種題目解完。

LATS 要處理的正是這個縫隙。講者的說法是,當時的目標是把「LLM 生一份計畫然後照著執行」推進到「鼓勵模型探索多種不同的計畫與路徑」。模型到今天為止都還是這樣:生出多樣解、照著行動、為了解一個問題規劃好幾層最佳化,這些都是弱項。這篇的做法是把 RL 跟多步規劃裡已經存在的技術搬進來,包括多步的 Monte Carlo tree search;再加上一個當時比較新的條件,模型有能力把回饋吃進來,所以它可以一邊跟環境互動,一邊把環境給的東西帶回搜尋過程,用來修正跟最佳化之後的計畫。

LATS 跟 ReAct 差在拿什麼當分數

論文標題講得很白:Language Agent Tree Search 把推理、行動、規劃收在語言模型裡。講者用「規劃一趟夏威夷旅行」走了一遍。同一個 prompt 取樣幾次,模型可能決定去問去過 Hawaii 的朋友,或是去讀相關的 subreddit;框架會替每一個動作算出一個分數,再用分數去更新這棵樹接下來要往哪裡長。動作一分數比較高,就從它展開,於是模型去問朋友 A 跟朋友 B 的意見,兩個回應的品質各給一個分數,再從那裡繼續長。這是多動作取樣的流程,不同分支的動作可以真的並行執行。

樹上同時要考慮探索跟利用。一直往當下分數最好的狀態走,可能會錯過現在看起來普通、但走下去更好的節點,這就是 MCTS 進場的地方。

跟 ReAct 的差別,講者特別點出來,在「分數是對什麼打的」。ReAct 先用一個 verifier 在 test time 引導搜尋,被評分的是推理軌跡,展開的方向由那個分數決定。LATS 不評推理痕跡,它評模型採取行動之後的結果,再把模型對這條軌跡的 reflection、以及環境給的觀察一起算進去。整個直覺可以拆成三塊:chain of thought 把推理拆成一步一步;tree expansion 透過動作生成讓步驟分岔;規劃與搜尋就在這棵樹上跑。從 ReAct 借來的是第四塊,動作得到的回饋會回流到之後的搜尋裡。

迷宮那一題,六個階段走一遍

LATS 的流程有六個階段:selection、expansion、evaluation、simulation、backpropagation、reflection。講者用一道「走出迷宮」的題目把它走完。初始觀察是你在一間燈光昏暗的房間裡,左邊一扇門、右邊一扇門,目標是找到出口。

selection 要先挑一個節點來展開,挑選的依據是 UCT。選好節點之後是 expansion,從這個節點取樣可以採取的動作。這個例子取了三個:打開左邊的門、打開右邊的門、檢查房間有沒有線索。三個動作都在環境裡執行過,觀察結果接回 context。打開左門得到的觀察是一條掛著畫的昏暗走廊,開右門是另一個觀察,第三個動作也有自己的結果。

接著是 evaluation。每一個「動作加觀察」形成的新狀態都要給一個分數,他們把兩個分數合起來。一個是 LM-as-judge:把動作跟觀察丟給語言模型,問它這個狀態多有希望,直接要一個 0 到 1 的分數。另一個是 self-consistency:假設這裡不是取樣三個動作,而是取樣五十次,把動作歸類,某一類出現得越頻繁,分數越高。講者舉的例子裡,狀態 A 的 self-consistency 分數比較高,因為動作 A 有 75% 的取樣都出現。兩個分數合起來,每個狀態就有了一個值。

simulation 用的是貪婪法。狀態 SA 分數最高,SB、SC 低很多,所以就從 SA 一路展開下去:再取樣、再展開,直到成功、失敗,或是把展開的預算用完。這場走訪裡,SA 底下的候選動作選了往樓梯走,運氣很好,觀察裡就看到出口標示得清清楚楚。到此 simulation 結束,這條軌跡不是成功就是失敗。

真正重要的是這條軌跡怎麼回寫。backpropagation 拿整條軌跡的回報去更新沿途每個狀態的價值,算法是一個移動平均:新價值等於舊價值乘上造訪次數減一,加上這條軌跡的回報,再除以造訪次數。講者也把 UCT 的算式拆開,它就是一個利用項加上一個超參數乘上探索項;NP 是父節點被造訪的次數,NS 是當前這個節點被造訪的次數。相對於父節點,一個節點被造訪得越少,探索項越大,就越會被鼓勵去走;被造訪很多次,除下來的數字變小,UCT 就相對那些還沒被探索的兄弟節點低。課程裡有人追問 UCT 的理論保證,講者的回答是這裡有數學也有直覺,但沒有證明這樣是最佳解,只是把探索跟利用兩邊平衡起來,被認為是比較好的做法。

最後一個階段是 reflection。backprop 做完之後,模型會對整條軌跡補上一段自己的想法:這次成功或失敗,是什麼造成的。講者說這個動作對整體品質的幫助相當明顯。

UCT 可以換掉,重複的動作會被累加

課堂上兩個技術問題都繞著這棵樹的邊界條件。有人指出 UCT 是從 bandit learning 來的 upper confidence bound,bandit 裡還有很多挑手臂的演算法,這篇有沒有比較過別的?講者的回答是沒有比較。探索的方式在 multi-armed bandit 的文獻裡有一整套,全部都可以搬到這個框架裡試;這篇的主要貢獻是搭出一個平台,讓別人把不同的最佳化方法接上去。

另一個人問的是重複動作。如果軌跡裡出現 A、B、A、B 這種重複,或是同一個動作在不同的節點出現,這棵樹有沒有辦法處理,還是會把它們當成各自獨立的軌跡?講者說,同一個動作在軌跡裡重複出現時,從某個父節點看過去,這個動作的次數會被累加,而次數本來就會進到 UCT 的算式裡,所以在建樹的過程裡就會被算進去。她也補了背後的前提:這裡假設面對的是一棵樹,不是一張全連接的圖。

HotpotQA 跟 WebShop:多取樣跟 reflection 都換得到分數

LATS 挑了兩個資料集驗證。HotpotQA 是設計成多步的問答集:每一題要答對,至少得從兩篇不同的 Wikipedia 頁面檢索資料,多步是題目本身規定的。講者說結果很好,取樣的軌跡數越多,表現就明顯往上走;reflection 跟把推理痕跡帶回來,又另外給了一段提升。這篇提供的是機制:test time 多花算力,可以真的換到多步推理題上更好的解。

WebShop 走的是應用面。講者唸了一個實際的查詢:想找一張小型的可攜折疊桌,要已經組裝好的,顏色跟表面處理有指定,價格也有條件。這種題目同樣是多步的。LATS 在這上面沒有做任何 fine-tuning,只在 test time 跑,成績就很高,已經接近人類專家的水準。

把 LATS 收成幾句話:它把推理、行動、規劃放在一起,把 MCTS 這類已知的方法帶進語言模型,在多個領域都拿到很強的結果;因為是 test-time 加模組化的做法,移植跟實作都相對容易。

代價也講清楚了。樹的展開、backprop,每一項都在加成本,而論文並沒有真的分析成本效益。另一個沒有處理的前提是:有些動作不可逆。模型如果是在跑一筆交易,動作真的執行下去,後果會很實際,例如真的付了一筆服務費。遇到這種場景,搜尋要怎麼調整,這篇沒有回答。

Sprint:不是不用想,是不用排隊想

第二篇是 Sprint,NeurIPS 2025,講者上課的時候論文還沒在會議上報告。它處理的是規劃與平行執行,以及怎麼用模型自己讓它想得更平行。

動機來自一個大家已經很熟的現象:O1、Gemini 2.5 Pro 這類前沿模型碰到難題會想得更久,而想得越久跟準確率越高是連動的。講者放了 DeepSeek R1 的訓練曲線:訓練往下走,它在 AIME 這類數學題上越來越強,同時每一則回應的平均長度也一直往上。越長的連鎖思考換到越高的分數,趨勢就是這樣。

但把長長的思考軌跡攤開來看,很多步驟其實彼此獨立。模型在試不同路線,把任務拆成子任務,其中一些子任務可以同時跑,還有一些步驟是在驗證前面做過的事。既然計算圖上有彼此不相依的部分,就沒有道理等它們一個接一個被生出來。

Sprint 就做這件事,而且是在 post-training 階段進來。它讓模型用 planner 生出多份計畫,再讓多個 executor 平行把計畫執行掉;一輪做完,再來一輪計畫跟平行執行。規劃與執行交錯,就是加速的來源。

讓模型自己標出哪些步驟可以並行

資料是模型自己標出來的。他們先有一批 DeepSeek R1 產生的推理軌跡,再用一個模型,講者舉的是 GPT-4o,把軌跡切成一段一段的步驟,並且替每一步標上這是規劃還是執行;有些步驟裡,一份計畫底下掛著好幾個執行片段。標完之後可以畫成一張 DAG:例如第四步跟第二步彼此不相依,但都接在第一步後面。這張圖讓模型看出哪些步驟可以並起來,於是資料就能打包成第一步先做、第二步跟第三步同時做。

這批資料拿去做 supervised fine-tuning。講者特別強調「LRM」在這裡只是 large reasoning model 的意思,現在每一顆 LLM 基本上都算推理模型了。微調的內容是把同一套思考過程重寫成帶標籤的版本;模型學到的行為是,在推論的時候自己把標籤生出來:計畫一、它的執行、計畫二、它的執行。

推論的結構值得說清楚,因為課堂上有人以為這變成三條平行線同時生成。它還是下一個 token 一個一個生。改變的是模型現在會在一個時間點上,把可以並行的計畫一起吐出來:先出來計畫一跟計畫二,計畫一輸出完,它的執行就開始跑,計畫二輸出完,它的執行也開始跑;執行結果回到 context,模型再生下一輪的計畫。實務上就長成這樣:第一步之後同時生出第二步跟第四步,讀完兩邊的結果再繼續。

課堂上另一個問題是重規劃。如果模型在執行第四步之後發現前面的方向錯了,想退回去用計畫三而不是計畫二,它記得住哪份計畫對應哪份執行嗎?講者的回答是它還是可以,因為所有 context 都還在。訓練教的只是不要等:計畫二既然跟計畫一無關,就沒有理由壓著不先做。也因為計畫跟執行是用特殊標籤生出來的,外面的系統可以照著標籤去真的把工作並起來跑。

平行之後,準確率跟著上去

訓練配方是這樣的:在數學資料集上生六千條思考軌跡,留下並行程度比較高的那些,把格式重排之後,對 DeepSeek R1 蒸餾出來的 Qwen-7B 做 supervised fine-tuning。

有個出乎意料的結果。專案一開始的目標是把並行度拉高、把序列生成的 token 數壓下來,這件事做到了;但同一個過程也把準確率一起推上去。模型似乎喜歡這種比較有結構的思考方式。圖上可以看到,序列 token 數相對 R1 蒸餾 7B 這個基準大幅下降,準確率還高出 3.5 個百分點,而且序列 token 數比 32B 模型少很多。

還有 out-of-domain 的表現。平行思考只在數學資料上訓練過,但模型在 Countdown 跟 GPQA diamond 上也變好,這兩個資料集完全沒有進訓練。講者的解讀是,平行思考本身似乎就在幫模型,序列 token 的節省是順便拿到的。

軌跡的形狀也有兩種變化。難題需要更多輪的規劃與執行。前期,模型觀察到更多平行、更多探索;後期則收斂下來,往單一計畫裡鑽深。另一個課堂提問處理了矛盾的歸屬:如果每一個平行分支單看都對,合起來卻錯,該聽誰的?講者說不論序列還是平行,最後所有東西都會被壓回 context 裡,模型在思考之後要生出最終答案,有矛盾就要在這裡解掉。她也說兩種做法都可能出現思考上的矛盾,而這篇看到的比較像是「同一道題的不同步驟」,不是「同一道題的不同解法」。

瓶頸也在課堂上被問到。平行跑的獨立任務,怎麼保證每個花差不多時間,不會有人拖隊?講者說保證不了。他們做了一些安排,但還是可能出現 straggler:第四步比第二步久很多,你就只能等第四步。不過至少等的時間是第四步,不是第四步加第二步。他們的一個做法是,如果某個執行太簡單,就把它併回計畫裡,讓並行的區塊變大一點。這條線還能再最佳化,她也不確定論文有沒有分析到這一層。

平行度有多少,取決於任務。數學的序列 token 比例比 GPQA 低,這個比例本身就是平行度的指標。在數學上,跟準確率相當、甚至更低的其他方法比,Sprint 把序列 token 砍掉大約四成。但題目本身想得少的時候,能並行的空間也少,這個「先規劃再執行」的重排甚至可能比基準差;優勢出現在需要更多思考、token 更多的難題上。

講者順手提了一份最近的 Sonnet 4.5 系統卡:裡面的 prompt 鼓勵模型盡量用工具,至少用一百次。她的觀察是,我們正在進入一個問題規模更大的階段,一題要處理的 token 早就超過 8K 到 10K。

Sprint 這篇只做了 supervised fine-tuning。講者認為 RL、GRPO 這類方法有機會從同一批資料裡挖出更多東西,泛化也會更好;工具的重疊使用,以及在實作上真的做出 wall-clock 的加速,都還是可以做的題目。

SWIRL:要教多步工具使用,但不要在訓練時真的呼叫工具

第三篇是 SWIRL,下週要在 Montreal 的 COLM 報告。它同樣是訓練端的方法,要讓模型把多步推理做得更好。

動機很日常。很多真實任務要靠多步推理加上工具:用搜尋引擎回答多跳問題、解數學題、做軟體工程專案、規劃旅行、分析資料。人在處理重要任務時,工具通常要來回好幾輪,推理跟呼叫交錯出現。一個步驟就已經夠複雜,步驟一多,錯誤跟麻煩會沿路累積。

這篇的設計目標列得很具體:模型要知道什麼時候該呼叫工具,要生得出對的 query 去觸發工具,要在多個推理步驟之間維持準確率,要學會從錯誤裡回復,還要知道什麼時候該停下來、不再呼叫新工具,直接給最終答案。最後要能適應新的工具跟新的推理任務。

還有一個目標是操作面的,也決定了整個做法:訓練過程不要真的去用工具。工具會失敗、會慢、會有 bug,而訓練本身已經夠貴了。

講者也點名了既有做法的問題。RLHF、RLAIF、執行回饋這些微調流程,很多是在單一步驟上做最佳化:模型把想做的做完,生出一個最終答案,reward 就看這個答案對不對,然後把這個訊號往回傳到動作上。SWIRL 想要的是對「生出這些步驟的過程」有更多掌握。

工具呼叫留在標註階段,訓練時只看動作好不好

做法從資料開始。給一個 prompt,讓模型一次只走一步。每一步都告訴它:你可以推理、可以生一段 chain of thought、可以呼叫工具,如果你已經準備好生最終答案,就直接生。第一個動作可能是推理加上一次工具呼叫,環境的回應接著被放進來;下一輪再把原始 prompt、前一個動作、環境的結果一起送進去,問它下一個動作。這樣反覆迭代出來的就是多步資料,不同題目的步數從一到三步、五步都有。

每一步都要有標籤。他們用 LLM-as-judge:把前面的 context 跟當前這個動作交給評審模型,請它估這一步有多好。這整件事在離線做完,很多題目可以平行跑。

接下來的分離是這篇的關鍵。所有真正的工具呼叫都發生在離線標註階段,產生的軌跡被存下來。到了 RL 微調,模型被放到第 k 步的位置上,prompt、前面的步驟、環境的回應都已經在 context 裡,它要做的是生出下一個動作;這個動作拿到一個分數,分數拿去做最佳化。沒有人真的去執行那個動作。講者的理由是,語言模型判斷「這個動作提得好不好」已經夠準,不需要真的跑一遍再評估。

課堂上有人立刻追問:評審看不到工具真正的輸出,怎麼有辦法打分?講者說,評審評的是 query 的品質,不是工具的輸出。它看到模型在問某個人的年齡,在搜尋結果還沒回來之前,就能判斷這是不是一個合理的搜尋問題;不知道那個人的年齡,並不妨礙它判斷這個問題問得好不好。她也回答另一個追問:這裡沒有訓練任何 judge 模型,就是直接 prompting。

被最佳化的目標寫成這樣:假設有 s1 到 sk 這些步驟,每一步後面接一個動作,動作裡包含一段推理跟一次工具呼叫;他們最大化的是「在目前為止的 context 之下,單一動作的期望 reward」,而這個 context 就是前面累積下來的狀態與動作,一路從動作一做到動作 k。課堂示範裡的軌跡長這樣:第一個動作是去查第一個人的年齡,拿到環境回應之後,第二個動作是查第二個人的年齡,最後一步模型判斷資訊夠了,生出 answer 標籤跟最終答案。

推論時的迴圈長得跟資料生成很像。prompt 會說請用幾個字回答下列問題,並指定可用的工具,例如計算機:如果你覺得用計算機有幫助,把數學 query 放在標籤裡;也告訴模型,一旦資訊夠了,就生出 answer 標籤跟最終答案。模型第一步呼叫計算機,把想算的東西放進 query;工具被執行,輸出回到模型;模型再被問一次,這次帶著前面的思考與工具結果。就這樣一輪一輪往下走。

process-filtered 的資料,比只留答對的更有用

實驗設定是這樣的:多步合成資料由 Gemma 2 27B 產生,題目來自 HotpotQA 跟 GSM8K,大約五萬條軌跡。資料可以只用 process filter,也就是評審對每一步都投贊成;可以只用 outcome filter,只留最終答案正確的;可以兩者都過;也可以隨機抽。

結果有點反直覺。只用 process filter、完全不管最終答案對不對的那批資料,訓練效果比只留答對的軌跡、或過程跟結果都要對的資料更好。講者的解釋是,如果模型本來就答得對,你留著這些軌跡,對它解不開的題目幫助有限;反倒是過程站得住、結果沒收好的軌跡,在教模型用不同的方式想同一道題,讓它有機會解開以前解不開的題目。

泛化是這篇最漂亮的地方。在 GSM8K 上訓練,教模型用 SymPy 或計算機解數學題,然後拿去測 HotpotQA,準確率從 65 拉到 71。如果直接拿 HotpotQA 訓練,工具是搜尋而不是計算機,同一份評測從 65 到 73。反過來也成立:在 HotpotQA 上用搜尋工具訓練過的模型,換到 GSM8K 用 Python 也表現得更好。講者的解讀是,模型學到的是怎麼一步一步想、怎麼把工具叫起來,換工具也帶得走,不只是學會用某一支工具。

資料量的效果同樣明顯。在 HotpotQA 上用搜尋工具訓練,測試的卻是數學題:訓練樣本從一百筆增加到一萬筆,模型在完全不同的任務上也跟著變好。講者說這是這篇最重要的一張圖。在比較容易生出資料的環境裡合成資料,教模型怎麼用工具、怎麼多步思考,這個行為可以搬到全新的工具與領域上,規模再放大一點,可能是一套很有力的方法。

他們也試著解釋為什麼會變好。方法是看每次回答時每一步的平均 process reward,比較 RL 前後:過程的正確性在 in-distribution 的 HotpotQA 上提升,在 out-of-distribution 的 GSM8K 上也提升。模型每一步想得更對,兩邊都一樣。他們另外看了 precision、recall 等指標,也跟前沿模型比過。

最後是 RL 跟 SFT 的對照。同一套流程用 supervised fine-tuning 也跑得起來,但多步 RL 明顯贏過 SFT。SFT 對資料的要求還剛好相反:它最需要過程跟結果都對的資料,只給 process-filtered 的資料反而差。講者的解釋是,SFT 本質上是模仿學習,你給它軌跡,要它照著重現,結尾錯了就會拖累表現;RL 則是在既有的前綴上讓模型再挑一次動作,並且對這個新動作給 reward,它才有機會跳出資料裡原本的樣子。

SWIRL 的總結是:跨資料集與工具都能泛化,能轉移到不相干的任務,從 process-filtered 的資料學得更好,合成資料越多、in-domain 跟 out-of-domain 都跟著漲,而這些改善在每一步的 process 正確性上看得到。

三套工具放在一起,是一組可以拼裝的工具箱

課要收尾的時候,講者把三篇併起來看。LATS 花的是 test-time compute,在難題上用搜尋加 reflection 換準確率;Sprint 動的是規劃的結構,把獨立的計畫並起來跑,省延遲,通常也順便漲分;SWIRL 把工具呼叫搬到離線,用 process reward 訓練多步行為。三者在時間軸上分工,不是互相取代。

她也強調這條線的模組化程度。UCT 可以換成別的分數策略,搜尋可以考慮成本,不可逆的動作可以加上安全限制,reflection 可以寫得更有內容,最後還需要有人把標籤化的平行計畫真的變成看得到的執行加速。這些接口都還開著,講者最後一句話是:多步推理跟規劃是一個非常活躍、還在往前走的領域。