本地部署 ZeroClaw 折腾

之前 OpenClaw 大火的时候,看到部署使用那 node 的时候我不是很想用,然后当时各种漏洞的存在也确实证实了这一点,但是现在已经有不少优秀的分支可以使用,因为我比较在意轻量化,于是选择了较为轻量化的 ZeroClaw

既然是部署一个自己的 AI 助理,那么我还是不希望自己的数据上传到云端的,所以这次的折腾目标是尝试构建一个纯本地的私人助理

总览

为了实现数据全本地,模型方面使用 Ollama 部署本地模型,通信使用在 NAS 上搭建的 Matrix 服务器,具体的手机电脑使用 Element 软件,虽然该软件也有 web 端,但不知道为什么一直配置出错,所以暂时不折腾了

另外我还试着做了容器多开配置以及构建一个 MCP 服务器,这里因为只是容器,所以我给了 ZeroClaw 完全权限

编译 ZeroClaw

安装 Rust,访问 https://rustup.rs/ 下载 rustup-init.exe 文件后运行,遇到选项选择默认 1 即可,期间需要安装 VS Studio 及相关配件

克隆 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-enabled 建议开启,sandbox-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