工作坊 Session 1: Foundational Capabilities
把聊天機器人變成 Agent:現代 RL 長什麼樣子
Lovre Pesut; Muhammad Hashmi — AI Engineer, Daytona; DevRel, Daytona
同樣的 harness、同樣的工具,GPT-2 會直接崩潰而 Kimi K3 能自己修 bug——中間的差別叫 reinforcement learning;而現代 RL 的真正瓶頸不在演算法,在於「誰來提供幾千萬個一次性沙箱」與「環境本身已經變成新的資料」。
開場:Daytona 是誰,為什麼在這裡(約 01:08)
Muhammad Hashmi 開場說明:Daytona 做的是跑 agent 與其 workload 的基礎建設——透過 API 建立電腦,自選作業系統、CPU 數量、RAM、磁碟。兩個主要使用情境:在背景/雲端跑 agent,以及 reinforcement learning。理由很直接:訓練 agent 時模型是靠「實際做事」來學,而 coding agent 或 computer-use agent 需要一個計算環境來做這些事。
而這場 workshop 要回答的問題是:我們到底怎麼從幾年前那個「有時候有用的問答助理」走到今天會自己動手的 agent?
主題一:同樣的 harness,差在哪裡(Muhammad,約 01:10)
他先放了一段 Kimi K3 的終端 agent:給它一個 prompt 去修 bug 或實作功能,它開始跑一堆指令、寫檔案。然後放下一張——同樣的 harness、同樣的工具,但模型換成七年前的 GPT-2。送同樣的 prompt,它直接崩潰,完全不知道該做什麼。
「理解這兩張投影片的差別,大概就是這場的主軸。簡短的答案是 reinforcement learning。」
他補充了一個重要的觀察角度:RL 本身不是新東西,已經存在數十年了,真正改變的是背後的模型,以及什麼東西被獎勵。
主題二:從 next-token 到 agent 的一條線(Muhammad,約 01:12–01:29)
他用一條時間線把整個演進串起來,重點在「每一步到底獎勵了什麼」:
- Pre-training:模型從機率分布抽下一個 token;拿 ground truth 算 loss(負對數機率),再把梯度更新回權重。他用逐 token 的機率變化投影片示範某個 token 從 61% 被推上去的過程。
- In-context learning 是掉出來的:你給模型三個 Python 函式的模式,它就能相當準確地預測第四個——「沒有人把這個模式建進權重裡,它就是從 next-word prediction 掉出來的湧現性質」。模型放大之後,這種模式跟隨能力顯著變好。
- 「一步步想」:幾年前那篇 thinking step by step 的論文,以及大家記憶中「明確叫 GPT 想仔細一點,它就更常答對」的體驗。
- 從補句子到當助理:早期模型只是把你的輸入補完;要變成助理,得先讓它學會「當助理」這個模式——給它大量問答樣本,它就學到「面對問題要當個有幫助的助理」。這是另一次重大轉折。
- 模仿的極限:如果你拿一本數學課本的資料集,只獎勵那些能通往正解的 token,那其實是在規定模型該怎麼走到答案。問題是我們本來就不知道最好的路徑是什麼。
- 所以 RL 的動機是:只獎勵最終答案,然後期待推理能力自己長出來——而這件事後來確實成立。
- RLHF:先出現的是人類偏好——你選哪個回答比較好,再用它訓練 reward model,讓底層 LLM 對齊人類偏好。
- RLVR(可驗證獎勵):既然知道推理有用,為什麼還要教它模仿寫好的解法?只獎勵最終答案就好。DeepSeek-R1 就是這個路線的示範:不檢查每個 token 是否符合資料集,只檢查最終答案。
- credit assignment 的問題:推理鏈很長時,怎麼知道哪些 token 該領這份獎勵?模型可能前幾千個 token 走得很合理,後面才走岔。當時的答案是 critic model——猜測某個 token 是否「比預期更好」,因為本來就很可能被輸出的 token 不該領太高的獎勵。但這要同時訓練另一個模型。
- GRPO(group relative policy optimization):不用另訓一個模型,改成一次抽一組 rollout,用「同一題的多次嘗試」當作 credit 的代理。他的例子:同一題四次嘗試,三次過、一次失敗——那次失敗相當「意外」,所以那些 token 應該被懲罰得比其他 token 被獎勵得更重。如果不處理這個相對關係、什麼都平均獎勵,模型就會收斂到單一做事方式。
- Tool calling:模型要寫程式,理想上它應該能測試那段程式,至少在你貼進編輯器之前先知道它會壞。做法是讓模型輸出特殊 token 包住的內容,由一個 parser 認出來、拿去環境裡執行。訓練上就是先獎勵它照格式輸出,再獎勵它更常在解題時使用工具。
- 一次 tool call 還不是 agent:agent 是不斷「行動 → 觀察」直到任務完成或它認為完成。演化路徑是 GitHub Copilot → 住在編輯器裡的 agent → 今天的終端 agent。
- 關鍵結論:RL 裡的「環境」變成了一台電腦。 Coding agent 必須呼叫檔案編輯工具、程式執行工具,而這些都得在某個計算環境裡執行。所以訓練 agent 現在得處理大量雲端基礎建設——這正是大家用 Daytona 做 RL 的原因。
主題三:一次真實的 RL 訓練跑起來長什麼樣(Lovre,約 01:30–01:39)
Lovre Pesut 接手,先做一個誠實的框定:我們不知道 OpenAI 那些解開數學未解問題的模型是怎麼訓的,但我們對中國的開源模型知道很多——Kimi K2 / K3、GLM,以及 Cursor 的 Composer 2(他說 Composer 2 也是基於 Kimi)。這場後半就建立在這些公開技術報告上。
他先給出現代 RL 的標準形狀:每個 agent 拿到一個隔離的沙箱,在裡面做任務,再用某種可驗證的標準打分。 這也是 coding 成為這些模型最大應用的副作用。
案例:Qwen3 8B 的一次訓練跑
- 配置:trainer 用 SkyRL,環境與 rollout 用 Harbor,沙箱是 Daytona sandboxes(但他強調任何沙箱都可以)。
- 這裡帶出一個值得記住的區分:現代 RL 基本上分兩塊——產生 rollout 的那一半,和更新權重的 trainer;現在通常是不同函式庫各管一塊,再加上某種沙箱底層。
- 規模:8 張 H100、4 小時、1440 次 rollout;起始 reward 約 0.3(因為是二元獎勵,等同 30% 正確率)。
- 他放了一段 60 倍速的訓練過程視覺化:GPU 使用率會抖(沙箱啟動與 episode 收尾時有 downtime,極度優化的設定可以更平順);每個 step 是 8 個任務 × 每題 4 次 rollout = 每 step 建立又銷毀 32 個沙箱;reward 緩慢爬升。
- 時間都花在哪:RL 訓練通常大部分時間花在 rollout(模型行動、生成回合),其次是 backward pass(也不是可忽略的一塊),再來是 weight syncing——trainer 更新完權重後要把新 policy 送給 rollout 產生端。這個案例是完全同步的 RL:跑一步 → 更新權重 → 下一步用全新權重跑。
最有意思的部分:模型到底學到了什麼
「RL 在某些方面比 pre-training 更可解釋,因為資料量小得多,你可以直接把 trajectory 拿來看模型發現了什麼有效。」
這一跑把成功率從約 30% 拉到約 60%,但模型學到的不是什麼演算法新洞見,而是把格式寫對:
- 不再在雙引號裡面又用雙引號(寫檔案到 Python / 文字檔時)。
- 不再輸出字面上的
\n字元而不是真正的換行——這在一開始大約四分之一的 rollout 裡絆倒了它。
「這正好連到那個老爭論:RL 到底是教會模型新東西,還是只是強化 pre-training 裡已經有的東西?至少在這個例子裡,我們可以說模型主要學會的是處理格式、處理 harness,而不是學會什麼新的演算法。」
(技術細節:每次 rollout 只在 agent 的 token 上訓練,tool 結果等不算。)
主題四:大規模訓練跑到底做了什麼(Lovre,約 01:39–01:48)
Kimi K3 的技術報告細節
- 51 M 沙箱:他們明確說明訓練用掉 5,100 萬個沙箱。
- microVM 與 pause:他們用 microVM,而且大量使用 pause 功能——因為 Kimi 在回合之間傾向想很久,把沙箱暫停就能在思考期間不佔用計算資源。
- Dynamic harness(他認為最有趣的一點):怎麼讓模型準備好面對任何可能被丟給它的 harness?他們做了一個可設定的動態 harness——用 config 開關各種 harness 面向:system prompt、sub-agents、memories、skills 等等,把它當成一條資料增強的軸。這樣模型不只準備好面對現有的所有 harness,連未來的 harness 大概也涵蓋得到,因為它是在 harness 特性的大量排列組合上訓練的。
- 對照 Composer 2:Cursor 的做法正好相反——專門為 Cursor 自家 harness 訓練。「Kimi 走的是 harness 多樣性、追求對任何東西都穩健;Composer 2 走的是把模型為 Cursor 準備到極致。」這是兩種很不一樣的 agentic 訓練哲學。
- 不同 reasoning 等級:給定 reasoning 等級就給一個 token 預算(也視題目而定);超出預算就直接給 −1 獎勵,不管當時是否正確。
- 九次 RL 跑 + on-policy distillation:最終模型其實由九次獨立的 RL 訓練組成——reasoning 等級 low / high / max 各一個,加上 general(一般對話)、agentic、coding 等專家模型——最後全部蒸餾進最終模型。
- on-policy distillation 怎麼運作:拿專家模型(例如 coding 專家),用通才模型產生 rollout,再用專家模型去評分那些 token。這樣就能把每個專家的一部分智慧灌進最終模型。條件是你要能取得模型每個 token 的完整 log probs;做得到的話,teacher → student 的蒸餾非常有效。
環境已經變成新的資料
Kimi K3 與 GLM 都揭露了他們用自家 agent 合成環境的做法,而且變化很多。Kimi K3 甚至建了一張涵蓋整個網際網路的巨大有向圖,試圖用合成環境覆蓋每一個領域。
「環境可以說是新的一種資料形式。以前你想盡辦法把資料集做大;現在網路上的 pre-training 資料還算不少,但環境沒那麼多,而環境才是現在資料棧裡真正有價值的部分。於是你會想派你的模型去建更多、更好的環境。」
Reward hacking:從比喻變成字面
- 經典圖示:OpenAI 2016 年那個賽船遊戲——模型不去比賽,而是學會在原地繞圈撿分數包。
- 在 LLM 上是同樣的事,但精緻得多,因為你的 policy 本身就是個聰明的 agent。
- 「而現在我們知道,reward hacking 已經字面意義上變成 hacking 了,至少在某些案例裡。」
- Kimi 和 GLM 都花了很多篇幅談他們的具體對策:針對不同環境做不同介入來預防或減輕 reward hacking。例如寫 kernel 就是一個特別容易被 hack 的環境,得花很多力氣確保你的 reward 是真的,而不只是 verifier 的一個怪癖。
主題五:同步 vs. 非同步 RL(Lovre,約 01:48–01:52)
- 時間都耗在 rollout:模型要想很久,還可能執行耗時的動作。
- 完全同步 RL 的痛點:你被最長的那條 rollout 卡住——所有 episode 跑完才能進 backward pass 與 weight sync。
- 非同步 RL:盡量產生 rollout,不等特定幾條跑完,只等到「夠多條完成」就立刻更新 policy 與權重。現在為了最大化吞吐量非常流行。
- 代價:你會拿到由過期 policy 產生的 rollout,這既打破 RL 演算法的一些理論假設,也讓整件事更不穩定——「而 RL 本來就已經是出了名的不穩定。」
- Kimi K3 的折衷:介於同步與非同步之間——收集到一定量的 rollout 後,把剩下的 rollout 暫停留到下一次 weight sync。「是非同步 RL 的一個比較不極端的版本。」完全非同步的話 policy 一直往前走,staleness 會以一些不平凡的方式傷到訓練過程。
收尾(約 01:52)
「現代 reinforcement learning 的 API 現在相當標準化了:你有 trainer、有 rollout generator,還有某個地方在跑你的沙箱。」他補充,Daytona 這邊看到的正是對沙箱本身的大量需求。最後提到有一個 repo 可以找到產生這些圖表的程式碼(未在字幕中報出名稱)。
金句
"Same model, same harness, same tools — but it's GPT-2. So when you send the same prompt, it just breaks. It doesn't know what to do."(約 01:11)
整場的出發點:差別不在鷹架,在模型被獎勵過什麼。
"It didn't learn some new insights about algorithms — it just learned to format what it wrote better."(約 01:38)
RL 到底教了模型什麼?至少在這個小規模跑裡,答案是「學會跟 harness 相處」。
"Reward hacking has literally become hacking nowadays — at least in some cases."(約 01:47)
"Environments are a new form of data. Previously you would try to increase your dataset as much as you could; nowadays there's a decent amount of pre-training data on the internet, but there's not that many environments — and the environments are currently the actually valuable part of the data stack."(約 01:46)
這場最有觀點的一句話。
提到的專案與資源 / Projects & Resources
| 名稱 Name | 說明 | Description | 備註 Notes |
|---|---|---|---|
| Daytona | 透過 API 建立沙箱電腦的 agent 基礎建設;主打背景 agent 與 RL | Agent infrastructure: sandboxed computers via API, for background agents and RL | 本場主辦方 / the presenting sponsor |
| Kimi K3 | Moonshot AI 的開源前沿模型;技術報告是本場後半的主要素材 | Moonshot AI's open frontier model; its tech report is the backbone of the second half | 51.2M 沙箱、Firecracker microVM、九次 RL 跑後蒸餾 |
| GLM | 另一個公開較多訓練細節的中國開源模型系列 | Another Chinese open model family that publishes training details | 合成環境與 reward hacking 對策 |
| Composer 2 | Cursor 的模型,專門針對 Cursor 自家 harness 訓練 | Cursor's model, trained specifically on Cursor's own harness | 講者說它也基於 Kimi |
| SkyRL | 案例中使用的 RL trainer 函式庫 | The RL trainer library used in the case study | NovaSky-AI(UC Berkeley Sky Computing Lab);官方與 Harbor 整合 |
| Harbor | 案例中負責環境與 rollout 的函式庫 | The environments/rollout library in the case study | 與 SkyRL 有官方整合 |
| Qwen3 8B | 案例訓練跑的基礎模型 | Base model of the demo training run | 8×H100 / 4 小時 / 1440 rollouts / 0.3→0.6 reward |
| DeepSeek-R1 | RLVR「只獎勵最終答案」路線的代表 | The reference point for verifiable-reward RL | |
| GRPO | 用一組 rollout 取代 critic model 的 credit assignment 方法 | Group-relative credit assignment replacing the critic model | |
| OpenAI 2016 boat-race reward hacking | 賽船遊戲繞圈撿分的經典 reward hacking 圖示 | The canonical reward-hacking illustration |
逐字稿勘誤 / Transcript Corrections
| 字幕原文 Heard as | 應為 Should be |
|---|---|
| Lou | Lovre (Pesut) |
| Kimmy K3 / Kimik3 / Kimikry / Kim Kitri / Gimme K3 / Kimy | Kimi K3 |
| Kimmy K2 | Kimi K2 |
| quen 38 billion | Qwen3 8B |
| sky RL | SkyRL |
| harbor | Harbor |
| deepse R1 | DeepSeek-R1 |
| GM / GLM | GLM |
| composer to / composer too | Composer 2 |
| reinforcement learning with verifiable words | RL with verifiable rewards (RLVR) |
| reposting | RL post-training(語境推斷) |
| Lower Sprawl Plaza | Lower Sproul Plaza |
| irregardless | regardless |
| dual results | tool results |
待確認 / To Verify
- 講者在結尾提到「有一個 repo 可以看到產生這些圖表的程式碼」,但字幕沒有錄到名稱與網址。/ He pointed to a repo with the code behind the charts; the name and URL aren't in the captions.
- 「Composer 2 也是基於 Kimi」是講者口述的說法,未給出處。/ "Composer 2 is also based on Kimi" is his claim on stage, uncited.
- Kimi K3 dynamic harness 那句「so it works at [Kimi CLI] but also works at Claude Code, Codex etc.」中的 harness 名稱由字幕還原("Kimmy Schmi code" / "cloud codecs"),需對照技術報告確認實際列舉了哪些 harness。/ The harness names in the dynamic-harness passage are reconstructed from garbled captions; check the tech report for the actual list.
- 「九次 RL 跑」的組成(low / high / max + general / agentic / coding)是講者口述的拆法,是否恰好九個需對照技術報告。/ Whether the nine RL runs decompose exactly as he described needs checking against the report.
- Harbor 的維護者與定位(搜尋顯示與 SkyRL 有官方整合,並有 fleet-ai/harbor-train 這個 repo),但講者未說明歸屬。/ Harbor's maintainer wasn't stated on stage.
- 案例訓練跑的任務集合只描述為「terminal 裡的一些標準 Python 任務」,未給 benchmark 名稱。/ The task set was described only as "standard Python things in a terminal"; no benchmark named.