本地部署 ZeroClaw 折騰

📢 本文由 gemini-3.5-flash 翻譯

之前 OpenClaw 大紅的時候,看到部署使用 node 的時候我不是很想用,然後當時各種漏洞的存在也確實證實了這一點,但是現在已經有不少優秀的分支可以使用。因為我比較在意輕量化,於是選擇了較為輕量化的 ZeroClaw。

既然是部署一個自己的 AI 助理,那我還是不希望自己的資料上傳到雲端,所以這次的折騰目標是嘗試建置一個純本地的私人助理。

總覽

為了實現資料全本地化,模型方面使用 Ollama 部署本地模型,通訊則使用在 NAS 上搭建的 Matrix 伺服器,具體的手機與電腦端則使用 Element 軟體。雖然該軟體也有網頁端,但不知道為什麼一直設定出錯,所以暫時不折騰了。

另外我還試著做了容器多開設定以及建置一個 MCP 伺服器,這裡因為只是容器,所以我給了 ZeroClaw 完整權限。

編譯 ZeroClaw

安裝 Rust,造訪 https://rustup.rs/ 下載 rustup-init.exe 檔案後執行,遇到選項選擇預設 1 即可,期間需要安裝 VS Studio 及相關配件。

複製(Clone)ZeroClaw 官方程式碼:

1
git clone https://github.com/zeroclaw-labs/zeroclaw

然後執行 setup.bat 以開始安裝,選擇自己想要安裝的版本,如果不知道就選擇標準安裝。

順便一提,Windows 上的安裝路徑問題是我修復的,我的第一個 PR (●’◡’●)

另外,官方對於環境變數 PATH 寫入有問題,安裝完成後開啟 PowerShell 執行(這個小問題我就懶得提 PR 了):

1
2
3
4
5
6
# 讀取你乾淨的「使用者級 PATH」,在末尾追加 zeroclaw 路徑,並乾淨地寫回登錄檔
$currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
if ($currentPath -notlike "*\.zeroclaw\bin*") {
    [Environment]::SetEnvironmentVariable("Path", $currentPath + ";$HOME\.zeroclaw\bin", "User")
    Write-Host "PATH 寫入成功!請重啟終端機以生效。" -ForegroundColor Green
}

然後關閉終端機。

本地部署模型

安裝 Scoop,開啟 PowerShell 執行以下命令:

1
2
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

然後新增軟體源,安裝 ollama:

1
2
scoop bucket add extras
scoop install ollama-full

執行 Qwen2.5-coder-7b-instruct-Q4_K_M 模型(可以在安裝 ZeroClaw 後執行):

1
ollama run qwen2.5-coder:7b

等到出現 success 和命令列互動後就代表部署成功,預設執行於 http://127.0.0.1:11434

Matrix 部署

使用 Docker 部署 Synapse 伺服器,然後使用 Element 連線。

首先產生設定檔:

1
2
3
4
5
docker run --rm \
    -v ./data:/data \
    -e SYNAPSE_SERVER_NAME=localhost \
    -e SYNAPSE_REPORT_STATS=no \
    matrixdotorg/synapse:latest generate

開啟 data/homeserver.yaml 調整設定檔,例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 允許新使用者註冊帳號(搭好後可以註冊自己的管理員帳號,註冊好後關閉重啟以確保安全)
enable_registration: true

# 告訴系統你願意承擔無驗證公開註冊的風險(本地環境安全)
enable_registration_without_verification: true

# 強烈建議開啟本地端到端加密(E2EE),確保即便查看資料庫也是密文
encryption_enabled: true

# 如果是純本地區域網路玩,不需要跟外網的其他 Matrix 伺服器互聯(Federation),可以把 federation 監聽關掉,或者保持預設。

撰寫 docker-compose.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
services:
  synapse:
    image: matrixdotorg/synapse:latest
    container_name: matrix-synapse
    restart: unless-stopped
    volumes:
      - ./data:/data
    ports:
      - "8008:8008"
    environment:
      - TZ=Asia/Tokyo

啟動容器:

1
docker compose up -d

造訪 Element 官網 下載用戶端,連線到自己的伺服器註冊帳戶後開始對話。

建立一個 claw 的專用帳戶,開啟所有設定,在「說明與關於」最下方有 Access Token,在 Encryption 有 recover key,在帳戶介面有 Username,這就是 user-id。

設定 Zeroclaw

執行圖形化介面:

1
zeroclaw onboard

這裡根據具體類型選擇就行,我只寫部分。

選擇 Ollama,輸入自訂模型名稱,API Key 隨便輸入(例如 sk-local),選擇模型,之後預設即可。不過建議開啟 sandbox-enabledsandbox-backend 填寫 docker。

在 claw 的設定中,推薦開啟 interrupt-on-new-message,該選項可透過訊息中斷目前任務。

開啟代理:

1
zeroclaw agent --agent <你的Agent名字>

啟用通道監聽 matrix:

1
zeroclaw channel start

Matrix 設定的問題

我不清楚是不是我某一項沒有選對,也就是關於允許的使用者需要建立一個群組,在設定檔中新增:

1
2
3
4
[peer_groups.matrix_{group}]
channel = "matrix.{group}"
agents = ["init"]
external_peers = ["@yexca:yexca-matrix-server"]

當然,關於其他的設定可以分模組進行 GUI 判斷:

  • agent
1
zeroclaw onboard agents
  • channel
1
zeroclaw onboard channels

本地 MCP

我寫了一個 MCP 伺服器用來連線本地的一些服務,目前包含生圖、TTS、印表機服務。

其中生圖服務提供了本地(透過 ComfyUI)和連線 OpenAI 的 image2,而其他服務暫時沒測試,因為我還沒想好要接什麼 TTS 服務,而且印表機的需求只能說是有,但不是很必要。

具體可見我的 GitHub 儲存庫:

載入中...
- -

Docker 多開

因為目前 Zeroclaw 對於 channel 的 matrix 只能監聽一個帳戶,於息我透過多開來對應不同的 matrix 帳戶,同時設定了像是定時/不定時喚醒、多訊息偵測等服務。不過官方的 Docker 映像檔還是停留在 0.7.5,感覺是要等 0.8.0 出來後再更新吧,所以這個映像檔是我在本地建置的,畢竟在這之後設定檔的變更比較大,不是很推薦使用官方的 0.7.5 映像檔。

訪問統計

自 2025-02-08 起的訪問統計

使用 Hugo 建立 | 主題 StackJimmy 設計 | 修改自 yexca