三波浪潮:從聊天機器人到基礎設施
Cloudflare 用「三波浪潮」來描述 AI agent 的演進,而他們認為我們正站在第三波的起點。
前兩波證明了 LLM 配上正確的工具是通用機器,但所有這些 agent 都有一個共同的結構性限制:它們是個人的、本地的、短暫的。
為什麼現在的 Agent 需要基礎設施
當 Cloudflare 的工程師每天都在用 coding agent 工作,他們遇到了三面同一面牆:
只能在你的筆電或昂貴的 VPS 跑——沒有分享、沒有協作、沒有跨裝置的交接。閒置時一樣花錢——固定月費,不管 agent 是否在工作,擴展到整個團隊或公司就疊加得很快。需要手動設定和管理——安裝相依套件、管理更新、配置身份和密鑰。
傳統應用從一個實例服務多個用戶。但 agent 是一對一的——每個 agent 是獨一無二的實例,服務一個用戶,執行一個任務。如果一億個知識工作者各自使用 agent,即使是適度的並發,也需要數千萬個同時執行的 session 容量。以目前的容器成本,這是不可持續的。
解法是 Durable Objects:每個 agent 有自己的身份、持久狀態和在收到訊息時喚醒的能力。閒置時消耗零算力。當有事件發生時平台喚醒 agent,載入狀態,處理完再回去休眠。
| VM / 容器 | Durable Objects | |
|---|---|---|
| 閒置成本 | 全時計費 | 零 |
| 擴展方式 | 手動配置容量 | 自動,每個 agent 獨立 |
| 狀態儲存 | 需外部資料庫 | 內建 SQLite |
| 崩潰恢復 | 自建(進程管理、健康檢查) | 平台重啟,狀態保留 |
| 10,000 個 agent,各 1% 活躍時間 | 10,000 個常開實例 | 任何時刻約 100 個活躍 |
這改變了規模化運行 agent 的經濟模型。不再是「一個貴 agent 給一個進階用戶」,而是「每個客戶一個 agent」、「每個任務一個 agent」、「每個郵件執行緒一個 agent」。
Project Think 的核心 Primitives
Project Think 為 Agents SDK 新增了六個 primitives,可以單獨使用,也可以透過 Think 基礎類別全部接在一起。
LLM 呼叫可能需要 30 秒,多輪 agent 迴圈更長。Fiber 是持久函式呼叫:在執行前登錄至 SQLite,可在任意點透過 stash() 建立檢查點,崩潰後透過 onFiberRecovered 恢復。
子 agent 是與父 agent 共置的 Durable Objects,各自有獨立的 SQLite 和執行上下文。用型別化 RPC 溝通,TypeScript 在編譯時捕捉誤用。
對話以樹狀結構儲存,每則訊息有 parent_id。支援分叉(探索另一條路但不丟失原始路徑)、非破壞性壓縮(摘要舊訊息而非刪除),以及 FTS5 全文搜尋。
LLM 寫一個完整程式來處理整個任務,而不是一連串的 tool call。Cloudflare MCP server 只暴露兩個工具(search + execute),使用約 1,000 tokens,相比原來的 117 萬 token 減少 99.9%。
傳統 tool call 每次呼叫都要把結果塞回 context window,再決定下一步。100 個檔案就是 100 次來回。但 LLM 看過大量真實 TypeScript,讓它寫一個程式一次處理所有檔案,更快、更準、更省 token。
執行梯:五個層級,按需升級
Dynamic Workers 是沙盒:在毫秒內從 V8 isolate 啟動,比容器快 100 倍、記憶體效率高 100 倍。能力模型從「沒有任何權限」出發,再由開發者明確授予。
這個設計原則形成了一個執行梯,agent 按需升級:
@cloudflare/shell 提供。
@cloudflare/codemode 提供。
@cloudflare/worker-bundler 從 registry 抓套件、用 esbuild 打包、載入 Dynamic Worker。Agent 寫 import { z } from "zod" 就直接能用。
git clone、npm test、cargo build,與 Workspace 雙向同步。
核心設計原則:agent 在 Tier 0 單獨使用就有用,每個層級是加法。用戶可以隨需求添加能力。
Think 基礎類別:五行代碼,完整 Agent
Think 是一個有主見的封裝,把所有 primitives 串接起來。它處理完整的對話生命週期:agentic 迴圈、訊息持久化、串流、工具執行、串流恢復、擴展。你只需專注於讓你的 agent 獨特的部分。
最小子類別如下:
import { Think } from "@cloudflare/think";
import { createWorkersAI } from "workers-ai-provider";
export class MyAgent extends Think<Env> {
getModel() {
return createWorkersAI({ binding: this.env.AI })(
"@cf/moonshotai/kimi-k2.5"
);
}
}
就這樣。串流、持久化、abort/cancel、錯誤處理、可恢復串流、內建 workspace 檔案系統——全部包含。用 npx wrangler deploy 部署。
需要更多控制時,可以覆寫你關心的部分:getModel()、getSystemPrompt()、getTools()、configureSession()。每個 turn 的鉤子也都可以接:beforeTurn、beforeToolCall、afterToolCall、onChatResponse。
Think 用 context blocks 實現持久記憶——它們是系統提示中的結構化區塊,模型可以跨次 hibernation 讀取和更新。模型看到 MEMORY (462/1100 tokens),知道自己可以主動記住東西。隨著 context 增長,Think 透過非破壞性壓縮處理上限:摘要舊訊息而不刪除,完整歷史仍存在 SQLite。
自我擴展:Agent 在執行時為自己寫工具
Think 把程式碼執行推進了一步:agent 可以寫自己的擴展——TypeScript 程式,在 Dynamic Worker 中執行,自己宣告網路存取和 workspace 操作的權限。
{
"name": "github",
"description": "GitHub integration: PRs, issues, repos",
"tools": ["create_pr", "list_issues", "review_pr"],
"permissions": {
"network": ["api.github.com"],
"workspace": "read-write"
}
}
Think 的 ExtensionManager 打包擴展(選擇性帶 npm 相依套件)、載入 Dynamic Worker、註冊新工具。擴展持久化在 DO 儲存中,在 hibernation 後存活。
30 秒前 agent 還沒有 github_create_pr 工具,現在有了。這是讓 agent 隨時間真正變得更有用的自我改進迴圈——不是透過 fine-tuning,而是透過可審計、可撤銷的程式碼。
Project Think 最重要的不是任何單一 primitive,而是整個設計哲學的轉變:從「如何阻止這個東西做太多」到「我們確切想讓它能做什麼」。這才是讓 agent 作為基礎設施能夠運作的關鍵——不是更好的 prompt,而是更好的架構。
Project Think 目前處於實驗性預覽階段,API 穩定但仍在演化。Cloudflare 自己已在用它構建內部 background agent 基礎設施。
npm install @cloudflare/think agents ai @cloudflare/shell zod workers-ai-provider