Back to all posts

無伺服器智能體

無伺服器智能體

建立一個智能體並不容易。

一年前,我們需要自己管理上下文和記憶體,思考 RAG 和向量資料庫,並非常謹慎地調整工具使用的準確性。Claude Code / Claude Agent SDK 的出現改變了這一切。現在越來越多的團隊開始直接使用 Claude Agent SDK + VM 來構建智能體。那麼問題變簡單了嗎?沒有。

在 VM 上執行 Claude Code 依然是一件非常有挑戰性的事情。

  1. 每個使用者會話都需要一個獨立的 VM。在某些場景下,VM 的持久化能力很有用,但這也讓 VM 難以升級與協調。例如,從使用者的角度來看,他們希望安裝在 VM 上的軟體數月後仍然可用。但 VM 上與協調層通訊的部分也需要能夠推送升級。

  2. 大規模建立與協調 VM。一個 k8s 叢集大約能協調幾千個 pod,這對應用服務叢集來說已足夠。但對於每個會話都需要啟動一個 claude code pod 的場景來說,這還不夠。

  3. 採用 k8s 解決方案會面臨 k8s 帶來的延遲,很難實現 1 秒內的效能。

  4. 使用 e2b 解決方案需要自行處理持久化,且上傳/下載檔案都非常慢。

  5. e2b 解決方案無法滿足特定網路環境需求,私有部署也很繁瑣。

我們該如何解決這些問題?讓我們從歷史中學習。當時光倒回十多年前,2012,世界上還沒有 serverless,沒有 k8s,也沒有 docker。後端工程師需要在實體機器上手動維護服務程序來執行服務。那時,ssh 和 ansible 是伺服器工程師的標配工具。服務程序高度依賴實體機器上的各種工具環境。要在多台實體機器上實現一致的工具環境配置非常困難,大規模擴展也是團隊需要提前很久準備的大工程。我還記得有工程師更改了一台機器的環境,卻忘了同步到其他機器,導致生產環境出現一個非常難以排查的幽靈 bug。那段時光非常痛苦。

到了 2012,docker 出現了。Docker 把所有工具環境都打包進一個映像檔,解決了環境不一致的問題。社群逐漸意識到,運行在實體機器虛擬機上的服務程序可以像實體機器上的程序一樣被管理。但 docker 的協調仍然需要工程團隊自行搭建協調系統。而且一旦 docker 內的服務程序與實體機器的網路和檔案系統耦合,協調就會變得非常痛苦。

到了 2014,無狀態服務開始成為主流趨勢。那一年 Kubernetes 和 AWS Lambda 誕生了。它們分別從不同角度描述了無狀態服務的未來。無狀態服務意味著服務邏輯避免與網路位址耦合,也不再本地依賴持久化檔案系統。

接著來到 10 雲原生的年代,無狀態服務的浪潮催生了一大批雲原生基礎設施,例如:

  • 服務閘道 Istio/Linkerd/Envoy/Treafik
  • CI/CD 平台 Argo CD / Flux
  • 可觀察性平台 Prometheus/Grafana/ELK Stack
  • 呼叫鏈分析 Jaeger/Zipkin/OpenTelemetry
  • 儲存 Rook/MinIO/JuiceFS

而我們現在正處於一個新的起點。十年前,一個運算單元是 java/python api 服務程序。從今年開始,這個運算單元變成了一個 coding agent。

ACFS 就像是手動維護實體機器服務程序的時代。E2B 則像是 Docker。沒有任務協調平台、可觀察性平台和分散式狀態持久化儲存能力,對 coding agent 來說,擴展性依然很困難。而我期望的 Serverless Agent Infra 具備以下能力:

  1. 能夠適當地持久化 coding agent 的會話和工作目錄,不丟失上下文。
  2. 超快,能在 100ms 內啟動 coding agent。
  3. 具備易於人類理解的智能體行為 Logging / Metric / Tracing,讓人類更容易理解與調整智能體行為模式。
  4. 開發者不再需要關心虛擬機、容器等運維細節,大規模協調變得非常容易。

我認為所有能滿足這些能力的基礎設施其實都已經準備好了,例如 firecracker 已經驗證了 microVM 的效能與穩定性,也有許多分散式可觀察性平台和檔案儲存系統可選。但作為一個曾經用 e2b 封裝 claude code 的開發者,要把這些整合在一起仍然很困難。例如,當 E2B 裡的 claude code 因 OOM 意外中斷時,工程師很難監控到這一點,更難拿到當時的現場和日誌。

我希望 2026 之後的開發者不需要再經歷這麼痛苦的過程,就像 2026 的大多數工程師已經不需要用 ssh 手動初始化實體機器一樣。

這就是 VM0 的夢想。我希望有一天我能透過一個符合人體工學的 API 來驅動 coding agent,就像:

cosnt agent = vm0.run({
	framework: 'claude-code',
	prompt: 'buy me a coffee'
})

Stay in the loop

// Get the latest insights on AI teammates and collaboration.