AI 領域精選文章翻譯
by Zak Knill

原文連結: All your agents are going async
Agents 以前是你同步對話的東西。現在,它們變成會在背景跑的東西,你一邊工作,它一邊做事。當這件事發生時,底層 transport 就開始失靈。
LLM 剛出來的那段時間,大多數人都是打開聊天視窗,輸入 prompt,然後看模型一個 token 一個 token 地把答案吐回來。ChatGPT、claude.ai、Claude Code,還有幾乎所有 AI SDK 或 AI library 的 demo,都是這種模式。很容易以為,這就是 AI 現在能力的上限。但其實不是。
真正正在發生的事,是所有 agent 都在轉向非同步。Agent 開始有 cron、webhook 支援、WhatsApp 整合、從手機遠端控制、排程任務與 routines。Agent 變成了會在背景持續運作的東西,在你工作時替你做事,然後再非同步回報結果。Agent 也開始接上 Temporal、Vercel WDK、Relay.app 之類的工作流系統。人在終端機或網頁聊天視窗前面盯著它,只是其中一種模式,而且越來越不是最有趣的那一種。真正有意思的是,agent 在沒有人類同步監督時,能做些什麼。
問題在於,聊天機器人主要是建在 HTTP 上的。送出一個 HTTP request,塞進 prompt,然後把 LLM 產生的 token 透過 SSE stream 回傳。但當 agent 是非同步執行時,這套就不行了。沒有一條 HTTP 連線可以讓你把回傳結果一路串回來。
OpenClaw 先往非同步 agent 邁了一大步,證明 agent 可以住進 WhatsApp 聊天裡。agent 可以跟著人一起移動,也可以在背景處理事情。OpenClaw 證明,使用者不必黏在瀏覽器或終端機前,也能讓 AI 幫忙做事。
Anthropic 對 OpenClaw 模式的直接回應是 Channels,這是 MCP-based 的設計,可以把外部聊天系統的訊息非同步推進 Claude Code session。它們還有 /loop 和 /schedule 這類 slash command,以及 Routines,都可以把 agent 排進背景執行。Anthropic 另外也做了 Remote Control,讓你可以從手機或另一個瀏覽器接續 Claude Code session。
ChatGPT 也有 scheduled tasks,可以觸發非同步 agent,在需要時反過來找你。Cursor 也有 background agents,讓工作在雲端背景執行。這些功能的共同點,都是把「人坐在終端機或聊天視窗前,一輪一輪互動」這件事解耦。它們讓 agent 互動變成連續、遠端、長時間、非同步。
這些新功能有個共同問題:agent 工作的生命週期,和單一 HTTP 連線的生命週期脫鉤了。在 chatbot demo app 裡,agent 只有在 HTTP 連線開著時才會處理事情。LLM 會對一個 HTTP request 做推論,並把 token 透過 SSE stream 回傳。但這無法應付非同步 agent。
舊的 HTTP transport 有四種情境處理得很差:
很多人覺得 OpenClaw 很酷,原因之一就是它把這些情境一起處理掉了。OpenClaw 把 agent 工作的生命週期,和人類連線的生命週期分開。agent 可以非同步工作,然後用 WhatsApp、iMessage、Telegram、Discord 或其他非同步聊天系統,在完成後把結果推回來。這根本不是 HTTP request-response 做得到的事。
放眼整個產業,現在有好幾種不同解法。很明顯的一種,就是 OpenClaw 這種模式,把所有互動都放在外部聊天平台上。這個聊天平台也會把 conversation history 提供給 agent,所以 agent 就算重啟,也還是有上下文。不過我不覺得這是最有趣的解法。
更多人其實是把 session state 逐步收進一個集中式、託管式的環境裡。Anthropic 正在用 Routines 和 Remote Control 做這件事。更多 session state、conversation history 和 agent inference 都跑進 Anthropic 自己託管的平台裡。他們不是只當 LLM inference API,而是在整合更多 agent 生命週期和連線狀態。
Cloudflare 也加入了這場戰局,推出建立在 workers 平台上的 Agents 平台。Cloudflare Sessions API 提供了 agent 的 session 與 conversation storage,而且可以透過 HTTP 存取。為了解決非同步通知問題,Cloudflare 也推出了 Email for Agents。
問題其實分成兩半。第一半是 durable state,agent 的狀態放哪裡?它在重啟或處理非同步任務時怎麼讀到那些狀態?它的輸出又存到哪裡?第二半是 durable transport,response 的 bytes 要怎麼在 agent 和人類,或 agent 和其他 agent 之間傳遞?怎麼讓連線撐過斷線、換裝置、fan-out、server-initiated push 等狀況?
Anthropic 和 Cloudflare 的方案,主要都在處理第一半。他們在做 durable state 的儲存與管理。至於 response bytes 怎麼送到人手上,還是得靠 polling,或 HTTP request。Cloudflare 雖然有 websocket 支援,但它沒辦法在斷線後,繼續維持串流中的 LLM response。Anthropic 和 Cloudflare 的思路是,只要把所有需要的資料存好,client 之後總能用 HTTP GET 把資料拿回來。這算是半成功,但還談不上是「可能性之藝術」。
現在 session 和 transport 全都綁在同一個 HTTP request-response 裡。Cloudflare 和 Anthropic 的託管功能,某種程度上讓 session state 變得更 durable,但它們沒有解掉 transport 問題。
你還是得用 HTTP GET,或 polling,才能知道有沒有新東西發生。回頭看 OpenClaw 的模式,conversation history 在聊天通道裡,agent process 和 LLM provider 又與它分離,這種設計沒辦法直接照搬到 Cloudflare 或 Anthropic 上。那裡沒有一個可供 enterprise 使用的 OpenClaw channels 版本。沒有 durable transport,也沒有 durable state 的完整解法。
如果把問題拉到基礎設施層來看,最值得關注的方向,是把 session 當成核心概念來設計在既有的即時訊息平台上。每次看到大家一次又一次重複踩到同樣的問題,都很讓人沮喪,因為他們一開始就選錯了 transport:HTTP request-response。
對 AI 來說,session 應該是一個人和 agent 都可以隨時連上、隨時斷開的東西。人可以來來去去,session 也應該能撐過 Wi‑Fi 問題,或者人搭進隧道、手機斷線這種狀況,而人和 agent 都不需要為此操心。這就是現代非同步 agentic application 最值得追求的能力。
conversation state 應該透過這個 durable session 來存取,而人和 agent 也應該透過它互相通知。session 應該是建構 async agent 的一等公民 primitive。
因為既有的 realtime messaging platform 已經支援雙向、durable、realtime 的 transport,而且也支援 multi-device 和 multi-user,真正的挑戰就變成把 session state 和 conversation history 接上去,試著一次解掉兩半問題,durable transport 和 durable state。
這篇最有價值的地方,不是再講一次「agent 很重要」,而是把問題拉回基礎設施層。很多團隊其實已經有不錯的模型、工具調用和工作流編排,卡住的反而是狀態怎麼留、結果怎麼回、誰能接手、斷線後怎麼續跑。
對真的在做 agent 的人來說,這意味著產品設計不能只想「聊天框要不要更順」,而要先決定 session 是不是一等公民。如果 transport 還是靠短命的 request-response,所謂長流程 agent 多半只是把輪詢包得更好看而已。
更現實的一點是,越多人把 agent 送進背景、排程、跨裝置與多人的情境,越會逼出「通知」「接續」「審批」這些老問題。能把這些問題原生處理好的平台,才真的接近 agent 時代的底層。