OpenClaw 架構:自託管 AI 助手的工程骨架 🦞
基於 v2026.3.8 原始碼,拆解一個自託管 AI 助手的工程骨架

上一篇聊了生態,這一篇拆架構。
OpenClaw 的程式碼量不小:43 萬行 TypeScript。但這篇文章不看程式碼量,看複雜性怎麼被分配。一個自託管 AI 助手要同時處理二十多個聊天入口、多個 Agent、工具呼叫和權限邊界;架構問題不是「功能怎麼塞進去」,而是「哪些複雜性應該留在執行時,哪些應該推給模型、CLI 和策略層」。
0. 先認幾個詞
如果你沒有系統架構背景,也沒關係。先記住 6 個詞,後面會順很多:
架構:系統如何分層、每層分別負責什麼。Channel / 頻道層:負責和外部聊天平台「說同一種協議」的適配層。Gateway / 閘道:中央調度者,負責路由訊息、管理會話和 Agent。Node / 執行節點:真正去拍照、跑命令、操作裝置的執行端。workspace / 工作區:Agent 的設定、記憶、技能和會話檔案所在的本地目錄。sandbox / 沙箱:把高風險操作隔離起來的受限執行環境。
1. 3 層架構:Channel → Gateway → Node
先看全景圖:
你可以把 OpenClaw 想成一家公司的 3 個部門:
| 誰 | 幹什麼 | 打個比方 |
|---|---|---|
| Channel(頻道層) | 對接 WhatsApp、Telegram、Discord、飛書等 20+ 聊天平台 | 前台:負責接電話、收郵件、接待來訪 |
| Gateway(閘道) | 中央調度,管理所有會話和 Agent | 大腦:誰的訊息該給誰處理、怎麼回覆,全在這裡決定 |
| Node(執行節點) | 在裝置上幹活:拍照、錄螢幕、跑命令 | 手和腳:大腦說「拍張照」,它去執行 |
整個系統的核心就是 Gateway:一個常駐運行的程序,預設只監聽本機(127.0.0.1:18789),不對外網開放。想遠端存取?走 Tailscale 隧道,不直接暴露埠號。這個設計叫「Loopback-First」,安全上很討巧:什麼埠號都不開,就沒有攻擊面。
為什麼只用一個程序不搞分散式?原因很實際:WhatsApp 協議要求同一時間只能有一個裝置在線,你搞兩個程序反而會打架。與其為了「架構正確」多搞一堆協調邏輯,不如老老實實一個程序管到底。對絕大多數個人使用者來說,夠用了。
2. 一條訊息的旅程
你在 Telegram 上跟你的 OpenClaw 說了一句「幫我查下明天台北天氣」,發生了什麼?
第 1 步:接入。 Telegram 適配器收到訊息,把 Telegram 格式的資料翻譯成 OpenClaw 內部統一格式。不管訊息從哪個平台來,翻譯完都長一個樣。
第 2 步:驗身份、找路由。 你是誰?允不允許跟 Agent 說話?如果是陌生人,先彈一個配對碼讓主人批准。通過後,路由引擎決定這條訊息交給哪個 Agent。
第 3 步:組裝上下文。 從磁碟讀出你之前的聊天記錄,載入 Agent 的性格設定(SOUL.md)、行為規則(AGENTS.md),再從記憶庫裡語義搜尋相關內容。組裝成一份完整的「大腦簡報」。
第 4 步:問大模型。 這份簡報發給 Anthropic、OpenAI、DeepSeek、MiniMax、GLM、Qwen、Gemini 等大模型提供商(你設定了哪個就用哪個),模型一個字一個字地串流吐出回覆。
第 5 步:執行工具。 如果模型說「我需要跑個命令查天氣」,執行時會攔截這個請求,根據安全策略決定在哪裡執行(管理員的命令直接跑,陌生人的命令丟到 Docker 沙箱裡跑),然後把結果餵回給模型繼續生成。
第 6 步:回覆。 最終答案按 Telegram 的格式要求(字數限制、Markdown 規則等)拆好,發回給你。聊天記錄寫入磁碟。
整個鏈路中,真正慢的是第 4 步:等大模型吐第一個字。其他步驟基本都是毫秒級。
3. 頻道適配層:一次開發,到處說話
OpenClaw 對接了二十多個聊天平台,但不是每個平台都從零寫一套。它抽象了一層「適配器」,每個平台的適配器只負責四件事:
- 登入:WhatsApp 掃 QR Code、Telegram 填 Bot Token、iMessage 用 macOS 原生能力:各平台各的規矩
- 翻譯進來的訊息:不管是文字、圖片、回覆還是表情,統統翻譯成內部統一格式
- 管門禁:誰能私聊、群裡要不要 @才回覆、哪些群允許
- 翻譯出去的回覆:把 Agent 的回覆適配成各平台能顯示的格式
內建的有六個大平台(WhatsApp、Telegram、Discord、Slack、Signal、iMessage),其他三十多個(飛書、LINE、Matrix、Mattermost 等)透過外掛接入。
這層抽象最大的好處是:Agent 完全不需要知道訊息來自哪個平台。你在 WhatsApp 上聊的 Agent 和在 Telegram 上聊的是同一個,邏輯完全複用。頻道只是「傳話筒」,換一個傳話筒不影響說話的人。
4. Agent 執行時與工作區
Agent 執行時的核心來自 Pi-mono(一個開源程式設計 Agent),嵌入在 Gateway 裡面跑。
「一切皆文字」的工作區
這裡的關鍵設計是:每個 Agent 的所有組態,都落在可以直接打開編輯的文字檔裡:
workspace/├── AGENTS.md # 定義 Agent 是誰、怎麼做事(相當於履歷+工作手冊)├── SOUL.md # 靈魂設定:性格、價值觀(寫好就不該改)├── USER.md # 記錄使用者資訊:你叫什麼、喜好是什麼├── MEMORY.md # 長期記憶:Agent 主動記下的重要事情├── HEARTBEAT.md # 定時任務:比如每天早上報天氣├── memory/ # 日記本│ └── YYYY-MM-DD.md # 每天一頁,只追加不修改├── skills/ # 技能包└── sessions.json # 會話記錄沒有資料庫,沒有專用管理介面,純文字檔。想改 Agent 性格?打開 SOUL.md 改兩行就行。想看它記住了什麼?打開 MEMORY.md 直接看。這種「你能看到它的全部大腦」的透明感,是很多封閉 AI 產品做不到的。
每一輪對話怎麼跑
- 分清身份:你是管理員直聊、朋友私聊、還是群裡有人 @了它?不同來源,安全等級不同
- 組裝記憶:讀聊天記錄、載入性格和規則、搜尋相關的長期記憶,拼成一份完整上下文
- 問大模型:發給設定的模型,支援 fallback:主力模型掛了自動切備用
- 幹活+記住:執行工具呼叫,更新聊天記錄
上下文的組裝不是把所有東西一股腦塞進去。不相關的技能不載入、不需要的工具不注入:省 token 就是省錢。
5. 4 層記憶:讓 AI 真的「記住你」
普通聊天機器人關掉視窗就失憶了。OpenClaw 不會。它有 4 層記憶,從最深層的「我是誰」到最淺層的「剛才聊了啥」:
| 層 | 是什麼 | 打個比方 |
|---|---|---|
| SOUL | 人格設定,永遠不變 | 你的性格:出生就定了 |
| TOOLS | 當前裝了哪些技能 | 你今天帶了哪些工具出門 |
| USER | 關於你的長期記憶 | 你的老朋友記得你愛吃什麼 |
| Session | 當前這次對話 | 此刻正在聊的話題 |
幾個巧妙的機制:
每日日記。 每天的對話會自動寫進 memory/2026-03-12.md(只追加,不覆蓋)。下次開聊時,Agent 會自動翻看今天和昨天的日記,保持連續感:「你昨天說要買的那本書,買了嗎?」
自動搶救記憶。 聊得太長,上下文快塞滿了怎麼辦?OpenClaw 會偷偷在背景跑一個隱形輪次,把重要資訊存進 MEMORY.md,然後壓縮掉舊內容。你察覺不到這個過程,但關鍵資訊不會丟。這個機制叫 Pre-Compaction。
語義搜尋。 你說「之前聊過的那個部署問題」,它能從記憶裡搜出來:不是靠關鍵字精確比對,而是靠語義理解。底層是向量搜尋(SQLite-vec)+ 傳統關鍵字搜尋(BM25)雙管齊下。
跨平台認人。 你在 Telegram 上跟它聊了半小時,切到 WhatsApp 繼續聊,它認得你。同一個人在不同平台的 ID 會被連結到同一個身份,共享同一份記憶。但群聊的記憶是隔離的:你在群裡說的話,不會洩露到私聊裡。
6. 工具系統:把複雜性轉移到 CLI
OpenClaw 的工具系統很克制。
很多 AI Agent 框架會預置大量專用工具。OpenClaw 只保留 4 個核心工具:
| 工具 | 一句話 |
|---|---|
| Read | 讀檔案 |
| Write | 寫檔案 |
| Edit | 改檔案 |
| Bash | 跑命令 |
這條路線的前提是:命令列已經封裝了大量現實世界能力。查天氣可以呼叫 curl,寄信可以呼叫 CLI,查資料庫可以走 psql。系統不為每個場景預製工具,而是把通用執行介面交給模型。
代價也很明確:模型必須知道該呼叫什麼命令、如何組合命令、什麼時候停止。複雜性沒有消失,只是從工具清單轉移到了模型能力、CLI 生態和權限策略。
在這 4 個核心工具之上,還有 55 個內建 Skills 和 ClawHub 技能市場。Skills 負責把高頻流程封裝起來,避免每次都從 Bash 層重新規劃。
MCP 被放在旁路,而不是主路徑。 MCP 是 Anthropic 推出的工具協議標準,很多 AI 框架都在接入。OpenClaw 的主路徑選擇 CLI/Unix,並用內建的 mcporter 做橋接。這不是單純反標準,而是把工具生態的中心放在命令列可組合性上。
自我擴展把能力沉澱成 skill。 OpenClaw Agent 遇到不會做的事,可以生成 skill、安裝、再在發現問題時修改重新載入。關鍵不在「自動變強」,而在臨場解法能否沉澱成可複用流程。
7. 多 Agent 路由:一個大腦,多個人格
一個 Gateway 可以同時跑好幾個 Agent,各管各的。路由規則長這樣:
{ "bindings": [ { "agentId": "home", "match": { "channel": "whatsapp", "accountId": "personal" } }, { "agentId": "work", "match": { "channel": "slack" } }, { "agentId": "bot", "match": { "channel": "discord", "guildId": "123456" } } ]}翻譯一下:WhatsApp 私人號來的訊息給「家庭助手」處理,Slack 的給「工作助手」,Discord 某個伺服器的給「社群機器人」。三個 Agent 完全隔離:各自有自己的性格、記憶、技能和安全策略。
8. 安全:3 道門
你的 Agent 跑在你自己的伺服器上,能執行命令、讀寫檔案:安全當然是大事。OpenClaw 的安全模型分 3 道門:
第一道門:你是誰?(私聊配對) 陌生人給你 Agent 發訊息,Agent 不會直接回。它會發一個 6 位配對碼,你在已認證的頻道裡確認了,對方才能用。這是預設行為:關掉就意味著任何知道你號碼的人都能白嫖你的 API 額度。
第二道門:VIP 通道(白名單)。 信任的人可以直接加到白名單裡(allowFrom),跳過配對直接聊。
第三道門:群裡別亂回(群組規則)。 群聊裡 Agent 預設只在被 @ 時才回覆,不會對著群裡每條訊息都冒泡:既省 token,又不擾民。
再往下還有縱深防禦:工具權限五層過濾、Docker 沙箱隔離(陌生人的命令在沙箱裡跑)、安全稽核命令(openclaw security audit)。這些層是獨立的:配對碼洩露了?沙箱還在。沙箱被繞過了?工具策略還限制著能調什麼。
9. 幾個判斷
單程序不是偷懶,是務實。 對個人使用者來說,一個程序管到底比搞分散式靠譜得多。這個架構的天花板在哪?大概是同時在線的訊息量超過單機處理能力的時候:對絕大多數人來說,這一天不會來。
頻道抽象層是最值錢的一層。 二十多個平台的差異全封裝在適配器裡,Agent 完全不操心訊息從哪來。想加一個新平台?寫個適配器就行,Agent 邏輯一行不改。這個解耦做得非常乾淨。
安全設計是認真的,但落地仍有差距。 架構上從身份、沙箱到工具策略做了縱深防禦。但 Kaspersky 稽核發現了 512 個漏洞(8 個嚴重級別),說明藍圖畫得好和實際安全之間,隔著持續的工程投入。
4 個核心工具的路線是一場複雜性轉移。 它賭的不是「工具越少越好」,而是模型能力、CLI 生態和權限策略加在一起,能比大量預製工具更可擴展。如果模型能力不足,Bash 會變成風險入口;如果權限收得住,這條路線會把工具系統做得很薄。
最終的檢驗標準不是架構有多漂亮,而是跑得穩不穩。 這篇分析基於原始碼靜態閱讀。實際效果:高併發下的 Gateway 穩定性、沙箱真的能不能防住攻擊、跨頻道認人的邊界情況:需要更多真實使用資料來驗證。
架構只是骨架,生產環境才是考場。
評論