OpenClaw 24 小時隨 call 隨到架構解析 AI Generated

目錄

這個 agent 是如何做到 24 小時隨 call 隨到?

OpenClaw 是一個開源的個人 AI 助理,能夠運行在你自己的裝置上,並透過 WhatsApp、Telegram、Slack、Discord、Signal、iMessage、Teams 等 12+ 通訊平台即時回應。它的核心理念是「本地、快速、永遠在線」。

以下是其「永遠在線」架構的完整技術解析。


OpenClaw 專案簡介

項目說明
定位運行在自有裝置上的個人 AI 助理
授權MIT 開源
核心語言TypeScript
RuntimeNode.js >= 22
AI 模型Anthropic Claude(推薦)、OpenAI
支援平台macOS、iOS、Android、Linux
通訊通道WhatsApp、Telegram、Slack、Discord、Signal、iMessage、Teams、Matrix 等

目錄結構

openclaw/
├── src/ # 核心原始碼
│ ├── daemon/ # 背景服務管理
│ ├── gateway/ # API 閘道與請求路由
│ ├── sessions/ # Session 管理與持久化
│ ├── channels/ # 多通道支援基礎設施
│ ├── routing/ # 訊息路由邏輯
│ ├── memory/ # 狀態與上下文儲存
│ ├── cron/ # 排程任務執行
│ └── ... # 各通訊平台適配器
├── apps/ # 應用實作(macOS/iOS/Android)
├── packages/ # 共享套件
├── skills/ # 技能定義
└── docs/ # 文件

如何做到 24 小時隨 call 隨到

OpenClaw 的「永遠在線」並不是靠一個 AI 模型持續運行,而是透過一套精心設計的事件驅動架構。核心概念可以拆成以下幾層來理解。

Gateway Daemon 常駐背景服務

這是整個系統的心臟。執行安裝指令時:

Terminal window
openclaw onboard --install-daemon

--install-daemon 會將 Gateway 註冊為系統級背景服務:

作業系統服務類型說明
macOSLaunchAgent開機自動啟動,關掉 Terminal 不影響
Linuxsystemd系統服務,支援自動重啟

Gateway 綁定 WebSocket/HTTP port(預設 18789),持續監聽所有事件。即使使用者關閉終端機甚至重新開機,服務都會自動恢復。

事件驅動的 Hub-and-Spoke 模型

Gateway 作為中央控制面(Control Plane),採用 Hub-and-Spoke 架構。所有輸入統一視為「事件」:

┌── WhatsApp
├── Telegram
├── Slack
Events ─────────► Gateway ─────────► Agent Runtime ───► LLM
├── Discord │
├── iMessage ▼
├── Webhooks 執行工具、回覆
└── Heartbeat

關鍵設計:AI 模型不是一直在跑,而是有事件進來才被喚醒執行一個 turn。這意味著在沒有訊息的時候,系統幾乎不消耗 LLM 資源,只有輕量的 Gateway daemon 在監聽。

Heartbeat 機制 主動巡檢

這是讓 agent 看起來「有自主意識」的關鍵機制:

  • 預設每 30 分鐘(使用 Anthropic OAuth 時為每小時),Gateway 觸發一次 heartbeat 事件
  • Agent 被喚醒後,讀取 workspace 中的 HEARTBEAT.md 檢查清單
  • 自行判斷「現在有沒有什麼該做的事?」
  • 有事就主動透過通訊通道通知使用者,沒事就回覆 HEARTBEAT_OK 然後休眠

這讓 agent 不僅能被動回應,還能主動追蹤待辦事項、跟進進度、發送提醒

Lane-Aware FIFO Queue 並行處理

為了避免同一個 session 被同時處理兩次(兩個想法打架),Gateway 使用了 lane-aware FIFO 佇列

佇列模式行為說明
Collect合併多條訊息成一次 follow-up turn,避免逐條處理
Followup等待當前 run 完成後再處理下一條
Steer在工具執行邊界注入新輸入,允許即時導向

並行策略:同一 session 內循序處理,不同 session 之間可平行執行。

Session 持久化

所有對話狀態以 JSONL 格式存在磁碟上:

~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl

不依賴記憶體,daemon 重啟後不會遺失上下文。Session 設計強調隔離性:

  • Primary session:每個 agent 一個主要 DM session
  • Channel sessions:群組/頻道各自獨立的上下文
  • Secure DM mode:多使用者部署時可啟用每位發送者隔離

Agent Turn 執行流程

每當一個事件(使用者訊息、heartbeat、webhook 等)進入 Gateway,agent 會執行一個 turn,流程如下:

flowchart TD
A[事件進入 Gateway] --> B[路由到對應 Session]
B --> C[載入 Session 歷史 + Workspace 上下文]
C --> D[呼叫 LLM]
D --> E{需要工具執行?}
E -->|是| F[執行工具: 瀏覽器/檔案系統/Shell/Plugin]
F --> D
E -->|否| G[持久化狀態到磁碟]
G --> H[回覆使用者或保持靜默]

這是一個確定性的迴圈模式,每個 turn 結束後 agent 就回到休眠狀態,等待下一個事件觸發。


WebSocket 通訊協定

Gateway 實作了統一的 WebSocket 協定,所有客戶端(CLI、Web UI、行動 App)透過相同協定連接:

Frame 類型格式用途
Request{type: "req", id, method, params}客戶端發起請求
Response{type: "res", id, ok, payload}伺服器回應結果
Event{type: "event", event, payload}即時事件推送

這種設計讓任何平台的客戶端都能以統一的方式與 Gateway 溝通,新增通道只需實作對應的 adapter。


總結

機制作用
Daemon 服務開機自啟、背景常駐、不怕 Terminal 關閉或重新開機
事件驅動不持續佔用 LLM 資源,有事才喚醒 agent
Heartbeat定期自我巡檢,主動追蹤待辦事項並通知使用者
多通道監聽任何平台的訊息都能即時路由到 agent 處理
磁碟持久化Session 狀態不怕重啟遺失,JSONL 格式儲存
FIFO Queue避免並行衝突,確保訊息有序處理

本質上,OpenClaw 是一個輕量級的訊息路由器 + 按需喚醒的 AI worker,而不是一個「一直在思考」的 AI。這種設計讓它在普通筆電或便宜的 VPS 上就能實現 24 小時服務,同時保持極低的閒置資源消耗。


參考來源