iT邦幫忙

0

一文徹底搞懂 OpenClaw 的架構設計:從 Gateway 到 Agent Runtime 的全鏈路解析

  • 分享至 

  • xImage
  •  

title: "一文徹底搞懂 OpenClaw 的架構設計:從 Gateway 到 Agent Runtime 的全鏈路解析"
description: "深度解讀 OpenClaw 的架構設計與運行原理,涵蓋 Gateway 閘道層、Agent 執行時期、記憶系統、外掛體系、多端協同等核心模組,帶你理解一條訊息從發送到回覆的完整生命週期。"
tags: ["OpenClaw", "AI助手", "架構設計", "Gateway", "Agent Runtime", "開源"]

一文徹底搞懂 OpenClaw 的架構設計:從 Gateway 到 Agent Runtime 的全鏈路解析

最近在研究 AI 助手的自架方案,把 OpenClaw 的架構翻了個底朝天。這篇文章把我的理解整理出來,希望能幫到同樣在研究的朋友。

1. OpenClaw 是什麼?一句話定位

OpenClaw 是一個開源的 AI 助手執行時期平台,核心理念是:一個 Gateway 連接所有聊天平台,一個 Agent Runtime 調度所有 AI 模型

你可以把它理解為「AI 助手的作業系統」——它不是一個聊天機器人,而是讓你在 WhatsApp、Telegram、Discord、Slack、Signal、iMessage 等十幾個平台上執行同一個 AI 助手的基礎設施。

跟 Dify、Coze 這類「拖拉式 AI 應用建構平台」不同,OpenClaw 更偏底層:它關心的是訊息怎麼路由、上下文怎麼組裝、工具怎麼執行、記憶怎麼持久化

2. 整體架構概覽:Gateway + Agent 雙核心

┌─────────────────────────────────────────────────────────┐
│                     Control Plane                        │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────┐ │
│  │ macOS App│  │   CLI    │  │  Web UI  │  │ WebChat │ │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬────┘ │
│       └──────────────┼──────────────┼─────────────┘      │
│                      │  WebSocket   │                    │
│              ┌───────▼──────────────▼───────┐            │
│              │        GATEWAY               │            │
│              │  ┌─────────────────────────┐ │            │
│              │  │ Channel Adapters        │ │            │
│              │  │ WhatsApp│Telegram│Slack  │ │            │
│              │  │ Discord│Signal│iMessage  │ │            │
│              │  └─────────────────────────┘ │            │
│              │  ┌─────────────────────────┐ │            │
│              │  │ Session Manager         │ │            │
│              │  │ Auth │ Protocol │ Cron  │ │            │
│              │  └─────────────────────────┘ │            │
│              └──────────────┬───────────────┘            │
│                             │                            │
│              ┌──────────────▼───────────────┐            │
│              │      AGENT RUNTIME           │            │
│              │  ┌──────┐ ┌──────┐ ┌──────┐ │            │
│              │  │Memory│ │Tools │ │Canvas│ │            │
│              │  └──────┘ └──────┘ └──────┘ │            │
│              │  ┌──────────────────────────┐│            │
│              │  │    Model Providers       ││            │
│              │  │ GPT│Claude│Gemini│DeepSeek││           │
│              │  └──────────────────────────┘│            │
│              └──────────────────────────────┘            │
│                                                          │
│  ┌──────────────────────────────────────────────────┐   │
│  │                    NODES                          │   │
│  │  macOS │ iOS │ Android │ Headless                │   │
│  │  Camera│Screen│Location│Canvas                   │   │
│  └──────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘

整個系統分為四層:

  1. Control Plane(控制面):macOS App、CLI、Web UI、WebChat——都是用戶端
  2. Gateway(閘道層):核心樞紐,管理所有訊息通道和工作階段
  3. Agent Runtime(代理執行時期):AI 的大腦,負責上下文組裝、模型呼叫、工具執行
  4. Nodes(節點層):分散式裝置節點,提供攝影機、螢幕、位置等實體能力

3. 閘道層深度解析

3.1 單一 Gateway 統治一切

OpenClaw 的設計哲學是單 Gateway 架構:一台主機上只執行一個 Gateway 程序,它獨佔所有訊息通道的連線。

# 啟動 Gateway
openclaw gateway

# 預設監聽
# WebSocket: 127.0.0.1:18789
# HTTP (Canvas): 同埠

為什麼是單一程序?因為 WhatsApp(透過 Baileys 函式庫)要求單一工作階段連線,Telegram Bot 也是單一實例。與其搞複雜的分散式鎖,不如讓一個程序管所有事。

3.2 WebSocket 協定:一切通訊的基礎

Gateway 的所有通訊都走 WebSocket,協定設計非常乾淨:

// 請求
{"type": "req", "id": "abc123", "method": "agent", "params": {...}}

// 回應
{"type": "res", "id": "abc123", "ok": true, "payload": {...}}

// 事件(伺服器推送)
{"type": "event", "event": "agent", "payload": {...}, "seq": 42}

關鍵設計決策:

  • 第一個 frame 必須是 connect:任何非 JSON 或非 connect 的首 frame 直接斷開
  • 冪等性 Key:所有副作用操作(sendagent)必須帶冪等性 Key,伺服器端維護短期去重快取
  • 事件不重播:用戶端斷線後需要自己重新整理狀態,不做事件回放

3.3 安全模型:裝置配對 + Token 認證

OpenClaw 的安全模型分兩層:

裝置配對(Pairing)

  • 每個 WS 用戶端在 connect 時攜帶裝置身份
  • 新裝置需要配對審批,Gateway 頒發裝置 Token
  • 本機連線(loopback)可以自動審批
  • 簽章載荷 v3 綁定 platform + deviceFamily,中繼資料變更需要重新配對

Token 認證

  • 設定 OPENCLAW_GATEWAY_TOKEN 後,所有連線必須在 connect.params.auth.token 中提供匹配的 Token
  • 遠端存取建議走 Tailscale 或 SSH 通道
# SSH 通道遠端存取
ssh -N -L 18789:127.0.0.1:18789 user@host

4. Agent 執行時期:AI 的大腦

4.1 工作階段管理

OpenClaw 的工作階段(Session)是 Agent 執行時期的核心概念。每個聊天視窗、每個使用者對話都是一個獨立的工作階段。

工作階段的關鍵特性:

  • 獨立上下文:每個工作階段有自己的訊息歷史和上下文視窗
  • 自動壓縮(Compaction):當上下文接近模型的 Token 限制時,自動壓縮歷史訊息
  • 記憶刷新(Memory Flush):壓縮前觸發一次靜默的 Agent 回合,提醒模型把重要資訊寫入持久化記憶
{
  agents: {
    defaults: {
      compaction: {
        reserveTokensFloor: 20000,
        memoryFlush: {
          enabled: true,
          softThresholdTokens: 4000,
          systemPrompt: "Session nearing compaction. Store durable memories now.",
          prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply NO_REPLY if nothing to store."
        }
      }
    }
  }
}

這個設計非常巧妙——在上下文被壓縮之前,給 AI 一次「臨終遺言」的機會,把重要資訊寫到檔案裡。

4.2 上下文組裝

每次 Agent 回合,執行時期需要組裝完整的上下文:

  1. System Prompt:從 SOUL.mdAGENTS.mdUSER.md 等檔案載入
  2. 記憶注入:載入 MEMORY.md(僅主工作階段)和 memory/YYYY-MM-DD.md
  3. 工具定義:根據策略過濾可用工具清單
  4. 訊息歷史:目前工作階段的對話記錄
  5. 工作區檔案:注入工作區的關鍵檔案內容

4.3 工具執行迴圈

OpenClaw 的工具執行是一個經典的 ReAct 迴圈:

使用者訊息 → 模型思考 → 呼叫工具 → 取得結果 → 模型繼續思考 → ... → 最終回覆

內建工具非常豐富:

  • exec:執行 Shell 命令
  • read/write/edit:檔案操作
  • web_search/web_fetch:網路搜尋和擷取
  • browser:瀏覽器自動化
  • memory_search/memory_get:記憶檢索
  • message:跨平台訊息傳送
  • sessions_spawn:子代理編排

5. 記憶系統:Markdown 即記憶

OpenClaw 的記憶系統是我最欣賞的設計之一。它沒有搞什麼複雜的向量資料庫,而是用純 Markdown 檔案作為記憶的載體。

5.1 雙層記憶架構

workspace/
├── MEMORY.md              # 長期記憶(人工策展)
└── memory/
    ├── 2026-03-05.md      # 昨天的日誌
    ├── 2026-03-06.md      # 今天的日誌
    └── heartbeat-state.json
  • MEMORY.md:長期記憶,類似人的「長期記憶」。存放決策、偏好、重要事實。僅在主工作階段載入(安全考量)。
  • memory/YYYY-MM-DD.md:每日日誌,類似人的「工作記憶」。追加寫入,每次工作階段載入今天和昨天的。

5.2 向量搜尋

雖然記憶是 Markdown 檔案,但 OpenClaw 在上面建了一層向量索引:

  • 自動監聽檔案變更(防抖)
  • 支援多種 Embedding 提供者:OpenAI、Gemini、Voyage、Mistral,甚至本機模型
  • 透過 memory_search 工具做語意檢索

5.3 為什麼用 Markdown?

這個設計選擇背後的哲學是:檔案是真相的唯一來源

  • 可以用任何編輯器檢視和修改
  • Git 友善,可以版本控制
  • 不依賴任何資料庫
  • 模型「記住」的東西就是寫到磁碟上的東西——透明、可稽核

6. 外掛體系:四大擴充方向

OpenClaw 的外掛系統圍繞四個核心插槽(Slot)設計:

插槽 職責 範例
Channel 訊息通道適配 WhatsApp、Telegram、Discord、Slack、Signal、iMessage、IRC、Matrix、LINE...
Memory 記憶儲存和檢索 memory-core(預設)、自訂向量後端
Tool 工具能力擴充 瀏覽器控制、檔案操作、API 呼叫、飛書整合
Provider 模型提供者 OpenAI、Anthropic、Google、DeepSeek...

Channel 外掛的豐富程度令人印象深刻——從主流的 WhatsApp/Telegram/Discord,到小眾的 Nostr/IRC,甚至都支援。這意味著你可以在幾乎任何聊天平台上執行你的 AI 助手。

7. 多端協同:Canvas、A2UI 與 Nodes

7.1 Canvas:Agent 可編輯的 Web 介面

Gateway 的 HTTP 伺服器提供兩個特殊路徑:

  • /__openclaw__/canvas/:Agent 可以動態產生和編輯的 HTML/CSS/JS 頁面
  • /__openclaw__/a2ui/:A2UI(Agent-to-UI)宿主

Canvas 讓 AI 助手不再侷限於文字回覆——它可以產生互動式的 Web 介面、資料視覺化、甚至小應用程式。

7.2 Nodes:分散式裝置能力

Nodes 是 OpenClaw 最有想像力的設計之一。任何裝置(macOS、iOS、Android、Headless)都可以作為 Node 連接到 Gateway:

{
  "role": "node",
  "caps": ["camera", "screen", "location", "canvas"],
  "commands": ["camera.snap", "screen.record", "location.get"]
}

這意味著你的 AI 助手可以:

  • 透過手機攝影機拍照
  • 錄製電腦螢幕
  • 取得裝置位置
  • 在裝置上展示 Canvas 介面

8. 一條訊息的完整生命週期

讓我們追蹤一條訊息從使用者發送到 AI 回覆的完整路徑:

1. 使用者在 Telegram 傳送「幫我查一下今天的天氣」
   │
2. Telegram Bot API → Gateway Channel Adapter (grammY)
   │  解析訊息、擷取文字、識別工作階段
   │
3. Gateway Session Manager
   │  尋找/建立工作階段、檢查權限
   │
4. Agent Runtime 開始新回合
   │
   ├─ 4a. 組裝上下文
   │      System Prompt + SOUL.md + MEMORY.md
   │      + memory/2026-03-06.md + 工具定義 + 歷史訊息
   │
   ├─ 4b. 呼叫 AI 模型
   │      POST /v1/chat/completions
   │      → 模型回傳:呼叫 weather 工具
   │
   ├─ 4c. 執行工具
   │      weather("台北") → 取得天氣資料
   │
   ├─ 4d. 再次呼叫模型
   │      將工具結果注入上下文
   │      → 模型產生最終回覆
   │
5. Gateway 將回覆路由回 Telegram
   │
6. 使用者在 Telegram 收到天氣資訊

9. 與競品比較

特性 OpenClaw Dify Coze AutoGPT
定位 AI 助手執行時期 AI 應用建構平台 AI Bot 平台 自主 AI Agent
部署方式 自架(單一程序) 自架/雲端 雲端服務 自架
聊天平台 15+ 原生支援 需要額外整合 有限
記憶系統 Markdown + 向量 向量資料庫 雲端 檔案系統
多端協同 Canvas + Nodes
開源

OpenClaw 的獨特優勢在於:

  • 真正的多平台原生支援:不是透過 Webhook 轉發,而是原生適配每個平台的 SDK
  • Markdown 記憶:透明、可稽核、Git 友善
  • Node 系統:把實體裝置能力接入 AI
  • 單一程序簡潔架構:不需要 Redis、PostgreSQL、訊息佇列

10. 實戰:設定 AI 模型提供者

OpenClaw 需要設定 AI 模型的 API 才能運作。這裡推薦使用 Crazyrouter 作為統一的 API 閘道——一個 Key 呼叫 627+ 模型(GPT-5、Claude 4.6、Gemini 3、DeepSeek V3 等),價格約為官方的 55%。

設定方式:

{
  providers: {
    openai: {
      baseUrl: "https://crazyrouter.com/v1",
      apiKey: "sk-your-crazyrouter-key"
    }
  }
}

這樣設定後,OpenClaw 的所有模型呼叫都會透過 Crazyrouter 路由,自動享受負載平衡和 failover。

💡 Crazyrouter 支援 OpenAI/Anthropic/Gemini 三種 API 格式,跟 OpenClaw 的多模型架構天然契合。新使用者註冊送 $0.2 額度,額度永不過期。

11. 總結:為什麼 OpenClaw 的架構值得學習

  1. 單一程序 > 微服務:對於個人 AI 助手這個場景,單一程序架構足夠了。不需要 Kubernetes,不需要訊息佇列。
  2. 檔案 > 資料庫:Markdown 記憶、JSON 設定、檔案系統工作區。簡單、透明、可攜。
  3. 協定先行:先定義好 WebSocket 協定,再實作功能。讓多端適配變得自然。
  4. 外掛化但不過度:四個核心插槽涵蓋了 90% 的擴充需求。
  5. 安全內建:裝置配對、Token 認證、簽章驗證——安全不是事後補丁,而是架構的一部分。

如果你正在建構自己的 AI 助手系統,OpenClaw 的原始碼絕對值得一讀。


相關連結:

  • OpenClaw 官方文件:https://docs.openclaw.ai
  • OpenClaw GitHub:https://github.com/openclaw/openclaw
  • OpenClaw Discord 社群:https://discord.com/invite/clawd
  • Crazyrouter(AI API 閘道):https://crazyrouter.com

圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言