OpenClaw 配置 Matrix 完整教程:从技术选型到多 Agent 协作实战
摘要: 本文详细介绍 OpenClaw 配置 Matrix 的完整流程,包含技术选型决策矩阵、5 层系统架构设计、消息路由流程、4 种多 Agent 协作模式、10 分钟快速配置指南、5 个实战场景案例、生产环境最佳实践以及 10 个常见问题排查方法。
封面图:
作者:江神
邮箱: jiangyayun72@gmail.com
发布时间:2026-03-04
阅读时间:25 分钟
难度级别:中级

一、为什么选择 Matrix?技术选型决策矩阵
1.1 选型背景
2026 年 2 月,我在搭建 OpenClaw 个人 AI 助手时,面临一个关键决策:通信协议选型。
OpenClaw 需要:
- 实时双向通信:用户消息即时推送给 Agent,Agent 响应即时返回
- 多客户端支持:Web、Desktop、Mobile 多端同步
- 消息持久化:历史消息可查询、可回溯
- 房间/频道管理:支持私聊、群聊、频道订阅
- 端到端加密:敏感消息加密传输
- 自托管能力:数据完全掌控,不依赖第三方服务
候选方案:
1. Matrix 协议(自托管)
2. Slack API(SaaS)
3. Discord API(SaaS)
4. WebSocket 自研协议
1.2 技术选型决策矩阵
经过 2 周的技术调研和 PoC 验证,我制作了以下决策矩阵:
| 评估维度 | Matrix | Slack | Discord | WebSocket 自研 | 权重 |
|---|---|---|---|---|---|
| 数据主权 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | 高 |
| 自托管能力 | ⭐⭐⭐⭐⭐ | ❌ | ❌ | ⭐⭐⭐⭐⭐ | 高 |
| 端到端加密 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | 中 |
| 多客户端支持 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 中 |
| 消息持久化 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 中 |
| 房间/频道管理 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | 中 |
| API 成熟度 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | 高 |
| 社区生态 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐ | 低 |
| 部署复杂度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | 中 |
| 运维成本 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | 中 |
| 国内访问 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐ | ⭐⭐⭐⭐⭐ | 高 |
| 成本 | 免费 | $7.25/用户/月 | 免费 | 开发成本 | 高 |
评分说明:
- ⭐⭐⭐⭐⭐:5 分(最优)
- ⭐⭐⭐⭐:4 分(良好)
- ⭐⭐⭐:3 分(一般)
- ⭐⭐:2 分(较差)
- ⭐:1 分(最差)
- ❌:不支持
加权得分计算:
Matrix: 5×3 + 5×3 + 5×2 + 4×2 + 5×2 + 4×2 + 4×3 + 4×1 + 3×2 + 3×2 + 5×3 = 127
Slack: 2×3 + 0×3 + 3×2 + 5×2 + 4×2 + 5×2 + 5×3 + 5×1 + 5×2 + 5×2 + 2×3 = 89
Discord: 2×3 + 0×3 + 2×2 + 5×2 + 4×2 + 5×2 + 4×3 + 5×1 + 5×2 + 5×2 + 1×3 = 86
WebSocket 自研:5×3 + 5×3 + 4×2 + 3×2 + 3×2 + 2×2 + 2×3 + 1×1 + 2×2 + 2×2 + 5×3 = 78
1.3 最终决策:Matrix
选择 Matrix 的核心理由:
- 数据完全可控:自托管 Conduit 服务端,所有消息数据存储在自己服务器
- 国内访问友好:不依赖 GFW 屏蔽的第三方服务,部署在国内服务器即可稳定访问
- 开放标准:Matrix 是开放协议,不会被单一厂商绑定
- 生态完善:Element、FluffyChat 等成熟客户端,SDK 覆盖主流编程语言
- 安全加密:支持端到端加密(E2EE),敏感消息加密传输
- 成本为零:开源免费,只需服务器成本
放弃其他方案的原因:
- Slack:数据在美国,国内访问不稳定,成本高($7.25/用户/月)
- Discord:数据在美国,国内访问困难,游戏场景定位不符
- WebSocket 自研:开发成本高,需要重新实现消息持久化、房间管理等能力
1.4 Matrix 核心概念
在开始配置之前,需要理解 Matrix 的核心概念:
| 概念 | 说明 | 类比 |
|---|---|---|
| Homeserver | Matrix 服务器,用户数据存储地 | 类似"微信服务器" |
| User ID | 用户唯一标识,格式:@username:server.com | 类似"微信号" |
| Room ID | 房间唯一标识,格式:!roomid:server.com | 类似"微信群 ID" |
| Room Alias | 房间别名,格式:#alias:server.com | 类似"群名称" |
| Access Token | API 访问令牌,用于身份验证 | 类似"API Key" |
| Device | 登录设备,每个设备有独立密钥 | 类似"登录的手机/电脑" |
| Federation | 服务器间联邦通信 | 类似"跨服聊天" |
二、系统架构设计:5 层架构详解
2.1 整体架构图
OpenClaw + Matrix 的系统架构采用 5 层设计,每层职责清晰,便于扩展和维护:
┌─────────────────────────────────────────────────────────────────┐
│ 访问层 Access Layer │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Element │ │ Desktop │ │ Mobile │ │ API │ │
│ │ Web │ │ Client │ │ Client │ │ Client │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 代理层 Proxy Layer │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Nginx 反向代理 + SSL/TLS 终止 │ │
│ │ 负载均衡 + 安全防护 │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 服务层 Service Layer │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Matrix │ │ OpenClaw │ │ Message │ │
│ │ Conduit │ │ Gateway │ │ Router │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 执行层 Execution Layer │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Agent │ │ Tool │ │ Memory │ │
│ │ Core │ │ Executor │ │ Manager │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ┌──────────────┐ │
│ │ Skill │ │
│ │ Loader │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 存储层 Storage Layer │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ SQLite/ │ │ Redis │ │ 文件系统 │ │
│ │ PostgreSQL │ │ 缓存 │ │ 日志配置 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ┌──────────────┐ │
│ │ 向量数据 │ │
│ │ 库 │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────────────────┘
2.2 各层职责详解
访问层(Access Layer)
职责:用户交互入口,提供多种访问方式
组件:
- Element Web:Web 客户端,浏览器访问
- Element Desktop:桌面客户端,Windows/Mac/Linux
- FluffyChat:轻量级 Mobile 客户端,iOS/Android
- API 调用:直接调用 Matrix Client-Server API
配置示例:
{
"default_server_config": {
"m.homeserver": {
"base_url": "https://matrix.jzhix.com",
"server_name": "jzhix.com"
}
}
}
代理层(Proxy Layer)
职责:流量入口,负责 SSL 终止、负载均衡、安全防护
组件:
- Nginx:反向代理,路由转发
- SSL/TLS:HTTPS 加密(Let's Encrypt 免费证书)
- Rate Limiting:防止 API 滥用
Nginx 配置示例:
server {
listen 443 ssl http2;
server_name matrix.jzhix.com;
ssl_certificate /etc/letsencrypt/live/jzhix.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jzhix.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:6167;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /openclaw/ {
proxy_pass http://127.0.0.1:8080;
}
}
服务层(Service Layer)
职责:核心业务逻辑,消息处理、路由、Agent 调度
组件:
- Matrix Conduit:轻量级 Matrix Homeserver(Rust 编写,性能优异)
- OpenClaw Gateway:OpenClaw 主服务,处理业务逻辑
- Message Router:消息路由器,分发用户消息到对应 Agent
Conduit 配置示例:
[global]
name = "jzhix.com"
url = "https://matrix.jzhix.com"
address = "0.0.0.0"
port = 6167
[database]
engine = "sqlite"
path = "/var/lib/conduit/db"
[webhook]
enabled = true
url = "http://127.0.0.1:8080/api/v1/matrix/webhook"
secret = "your_webhook_secret"
执行层(Execution Layer)
职责:Agent 核心能力执行,工具调用、记忆管理、技能加载
组件:
- Agent Core:Agent 核心,LLM 调用、上下文管理
- Tool Executor:工具执行器,调用外部 API、执行代码
- Memory Manager:记忆管理器,短期记忆、长期记忆、向量检索
- Skill Loader:技能加载器,动态加载 Skill 模块
Agent 配置示例:
name: 戴蒙
role: 技术助手
model: aliyun/qwen3.5-plus
skills:
- coding-agent
- tech-research-sop
- memory-update-sop
memory:
type: cognitive
stores: [episodic, semantic]
存储层(Storage Layer)
职责:数据持久化,消息存储、配置管理、向量索引
组件:
- SQLite/PostgreSQL:关系型数据库,存储用户、房间、消息
- Redis:缓存层,会话管理、热点数据
- 文件系统:配置文件、技能文件、日志
- 向量数据库:Chroma/FAISS,长期记忆向量索引

三、消息路由流程:从用户到 Agent 的完整链路
3.1 消息路由流程图
用户 (Element) Nginx Conduit Router OpenClaw Agent Core Memory LLM
│ │ │ │ │ │ │ │
│ 发送消息 @damon 你好 │ │ │ │ │ │ │
│───────────────────────>│ │ │ │ │ │ │
│ │ 转发请求 │ │ │ │ │ │
│ │───────────────────>│ │ │ │ │ │
│ │ │ 存储消息 │ │ │ │ │
│ │ │ 触发 Webhook │ │ │ │ │
│ │ │────────────────────>│ │ │ │ │
│ │ │ │ 解析消息 │ │ │ │
│ │ │ │ 识别@提及 │ │ │ │
│ │ │ │────────────────────>│ │ │ │
│ │ │ │ │ 查询用户上下文 │ │ │
│ │ │ │ │─────────────────────>│ │ │
│ │ │ │ │<─────────────────────│ │ │
│ │ │ │ │ 调用 LLM │ │ │
│ │ │ │ │────────────────────────────────────────────>│ │
│ │ │ │ │ │ 生成响应 │ │
│ │ │ │ │<────────────────────────────────────────────│ │
│ │ │ │ │ 返回响应文本 │ │ │
│ │ │ │<────────────────────│ │ │ │
│ │ │<────────────────────│ │ │ │ │
│ │<───────────────────│ │ │ │ │ │
│<───────────────────────│ │ │ │ │ │ │
│ 显示 Agent 响应 │ │ │ │ │ │ │
3.2 消息处理详细步骤
步骤 1:用户发送消息
用户在 Element 客户端输入:
@damon 帮我查一下 React 19 的新特性
消息结构(Matrix 协议):
{
"type": "m.room.message",
"content": {
"msgtype": "m.text",
"body": "@damon 帮我查一下 React 19 的新特性",
"m.mentions": {
"user_ids": ["@damon:jzhix.com"]
}
},
"room_id": "!abc123:jzhix.com",
"sender": "@jiangshen:jzhix.com",
"origin_server_ts": 1709539200000
}
步骤 2:Conduit 接收消息
Conduit Homeserver 接收消息,存储到数据库,并触发 Webhook:
[webhook]
enabled = true
url = "http://127.0.0.1:8080/api/v1/matrix/webhook"
secret = "your_webhook_secret"
events = ["m.room.message"]
步骤 3:Message Router 解析
import re
class MessageRouter:
def parse_message(self, event: dict) -> dict:
content = event['content']
body = content.get('body', '')
# 提取@提及
mentions = re.findall(r'@(\w+):(\S+)', body)
# 识别目标 Agent
target_agents = []
for username, server in mentions:
if username in self.config['agents']:
target_agents.append(username)
# 清理消息文本
clean_text = re.sub(r'@\w+:\S+', '', body).strip()
return {
'room_id': event['room_id'],
'sender': event['sender'],
'text': clean_text,
'target_agents': target_agents
}
步骤 4:上下文查询
class MemoryManager:
def get_context(self, user_id: str, room_id: str, limit: int = 10) -> list:
query = """
SELECT sender, body, timestamp
FROM messages
WHERE room_id = ? AND sender IN (?, ?)
ORDER BY timestamp DESC
LIMIT ?
"""
cursor = self.db.execute(query, (room_id, user_id, self.bot_user_id, limit))
messages = cursor.fetchall()
context = []
for msg in reversed(messages):
role = "user" if msg[0] == user_id else "assistant"
context.append({"role": role, "content": msg[1]})
return context
步骤 5:Agent 处理
class AgentCore:
async def process(self, message: dict) -> str:
# 构建上下文
context = self.memory.get_context(message['sender'], message['room_id'])
messages = context + [{"role": "user", "content": message['text']}]
# 调用 LLM
response = await self.call_llm(messages)
# 检查是否需要调用工具
if self.needs_tool_call(response):
tool_result = await self.execute_tool(response)
response = await self.call_llm(messages + [{"role": "assistant", "content": tool_result}])
return response
步骤 6:响应发送
class MatrixClient:
async def send_message(self, room_id: str, text: str):
url = f"{self.homeserver}/_matrix/client/r0/rooms/{room_id}/send/m.room.message"
payload = {"msgtype": "m.text", "body": text}
headers = {"Authorization": f"Bearer {self.token}"}
async with self.session.post(url, json=payload, headers=headers) as resp:
return await resp.json()
3.3 消息路由策略
OpenClaw 支持 4 种消息路由模式:
| 模式 | 触发条件 | 路由逻辑 | 适用场景 |
|---|---|---|---|
| @提及路由 | 消息包含@agent | 发送到指定 Agent | 明确指定 Agent |
| 关键词路由 | 消息包含特定关键词 | 根据关键词匹配 Agent | 基于任务类型自动分配 |
| 上下文路由 | 基于对话历史 | 延续上一次 Agent | 多轮对话 |
| 广播路由 | 特殊命令(如@all) | 发送到所有 Agent | 多 Agent 协作 |
路由配置示例:
routing:
mention:
enabled: true
pattern: "@(\\w+)"
keyword:
enabled: true
rules:
- keywords: ["代码", "编程", "debug"]
agent: coding-assistant
- keywords: ["搜索", "调研", "查资料"]
agent: research-assistant
context:
enabled: true
lookback: 5
broadcast:
enabled: true
trigger: "@all"

四、多 Agent 协作模式:4 种架构详解
4.1 星型模式(Star Topology)
架构:一个中心 Agent 协调多个专业 Agent
┌─────────────────┐
│ 中心 Agent │
│ Coordinator │
└────────┬────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 编码 Agent │ │ 调研 Agent │ │ 文档 Agent │
│ Coding │ │ Research │ │ Documentation│
└───────────────┘ └───────────────┘ └───────────────┘
工作流程:
1. 用户发送任务给中心 Agent
2. 中心 Agent 分解任务,分配给专业 Agent
3. 专业 Agent 执行子任务,返回结果
4. 中心 Agent 整合结果,返回用户
配置示例:
mode: star
coordinator:
name: 戴蒙
role: coordinator
model: aliyun/qwen3-max-thinking
workers:
- name: 代码助手
role: coding
model: qwen3-coder-plus
skills: [coding-agent, git-suite]
- name: 调研助手
role: research
model: aliyun/qwen3.5-plus
skills: [tech-research-sop, web_search]
- name: 文档助手
role: documentation
model: aliyun/qwen3.5-plus
skills: [humanize-ai-text, markdown-converter]
适用场景:复杂项目,需要多领域专业知识
4.2 流水线模式(Pipeline Topology)
架构:任务按顺序流经多个 Agent,每个 Agent 处理一个环节
用户需求 → [需求分析] → [技术调研] → [方案设计] → [代码实现] → [测试验证] → [文档编写] → 最终交付
Agent A Agent B Agent C Agent D Agent E Agent F
工作流程:
1. Agent A 分析需求,输出需求文档
2. Agent B 基于需求做技术调研
3. Agent C 基于调研结果设计方案
4. Agent D 基于方案实现代码
5. Agent E 测试验证代码
6. Agent F 编写文档
配置示例:
mode: pipeline
stages:
- name: 需求分析
agent: analyst
input: user_request
output: requirements_doc
timeout: 300
- name: 技术调研
agent: researcher
input: requirements_doc
output: research_report
timeout: 600
- name: 代码实现
agent: developer
input: research_report
output: source_code
timeout: 1800
- name: 测试验证
agent: tester
input: source_code
output: test_report
timeout: 900
适用场景:标准化流程,环节固定
4.3 广播模式(Broadcast Topology)
架构:一个消息同时发送给多个 Agent,各自独立响应
用户消息
│
▼
┌─────────┐
│ 路由器 │
└────┬────┘
│
┌─────────────┼─────────────┐
│ │ │
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│Agent A │ │Agent B │ │Agent C │
└───┬────┘ └───┬────┘ └───┬────┘
│ │ │
└────────────┼────────────┘
│
▼
┌──────────┐
│ 结果汇总 │
└────┬─────┘
│
▼
返回用户
工作流程:
1. 用户发送消息到广播地址
2. 路由器复制消息,发送给所有订阅的 Agent
3. 每个 Agent 独立处理,返回结果
4. 汇总器整合所有结果(去重、排序、合并)
5. 返回整合结果给用户
配置示例:
mode: broadcast
channel: "!broadcast:jzhix.com"
subscribers:
- agent: coding-assistant
topics: ["代码", "编程", "debug"]
- agent: research-assistant
topics: ["调研", "搜索", "对比"]
- agent: architecture-assistant
topics: ["架构", "设计", "选型"]
merger:
strategy: ranked_merge
max_results: 5
timeout: 30
适用场景:不确定哪个 Agent 最适合,需要多视角回答
4.4 混合模式(Hybrid Topology)
架构:结合以上多种模式,根据任务动态选择
用户任务
│
▼
┌──────────┐
│ 分类器 │
└────┬─────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│星型模式 │ │流水线 │ │广播模式│
│复杂项目 │ │标准流程│ │开放问题│
└───┬────┘ └───┬────┘ └───┬────┘
│ │ │
└─────────────┼─────────────┘
│
▼
结果返回
分类器配置:
mode: hybrid
classifier:
model: aliyun/qwen3.5-plus
rules:
- condition: "contains_keyword(['项目', '系统']) AND length > 100"
mode: star
reason: "复杂项目,需要多 Agent 协作"
- condition: "contains_keyword(['教程', '文章'])"
mode: pipeline
reason: "标准化内容创作流程"
- condition: "contains_keyword(['怎么选', '对比'])"
mode: broadcast
reason: "开放问题,需要多视角"
- condition: "length < 50"
mode: direct
reason: "简单任务,直接执行"
适用场景:任务类型多样,需要灵活应对
五、10 分钟快速配置指南
5.1 前置条件检查
| 条件 | 检查命令 | 预期结果 |
|---|---|---|
| Docker 已安装 | docker --version |
Docker version 20.x+ |
| Docker Compose 已安装 | docker compose version |
Docker Compose version 2.x+ |
| 域名已解析 | dig matrix.jzhix.com |
返回服务器 IP |
| 80/443 端口开放 | nc -zv matrix.jzhix.com 443 |
Connection succeeded |
| 至少 2GB 内存 | free -h |
Available > 2GB |
| 至少 10GB 磁盘 | df -h / |
Available > 10GB |
5.2 步骤 1:创建目录结构(1 分钟)
mkdir -p /opt/openclaw/{conduit,openclaw,nginx,certs}
cd /opt/openclaw
mkdir -p conduit/config openclaw/config nginx/conf.d
5.3 步骤 2:配置 Conduit(2 分钟)
cat > conduit/config/conduit.toml << 'EOF'
[global]
name = "jzhix.com"
url = "https://matrix.jzhix.com"
address = "0.0.0.0"
port = 6167
max_request_size = 20000000
[database]
engine = "sqlite"
path = "/var/lib/conduit/db"
[webhook]
enabled = true
url = "http://openclaw:8080/api/v1/matrix/webhook"
secret = "your_webhook_secret_change_this"
events = ["m.room.message"]
EOF
5.4 步骤 3:配置 OpenClaw(2 分钟)
cat > openclaw/config/config.yaml << 'EOF'
server:
host: 0.0.0.0
port: 8080
matrix:
homeserver: "https://matrix.jzhix.com"
webhook_secret: "your_webhook_secret_change_this"
bot_user_id: "@damon:jzhix.com"
access_token: "CHANGE_THIS_LATER"
agents:
- name: 戴蒙
id: damon
model: aliyun/qwen3.5-plus
skills:
- coding-agent
- tech-research-sop
- memory-update-sop
logging:
level: info
file: /var/log/openclaw/openclaw.log
EOF
5.5 步骤 4:配置 Nginx(2 分钟)
cat > nginx/conf.d/matrix.conf << 'EOF'
server {
listen 80;
server_name matrix.jzhix.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl http2;
server_name matrix.jzhix.com;
ssl_certificate /etc/letsencrypt/live/jzhix.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jzhix.com/privkey.pem;
location / {
proxy_pass http://conduit:6167;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /openclaw/ {
proxy_pass http://openclaw:8080;
}
}
EOF
5.6 步骤 5:创建 Docker Compose(2 分钟)
version: '3.8'
services:
conduit:
image: matrixconduit/conduit:latest
container_name: conduit
restart: unless-stopped
volumes:
- ./conduit/config:/etc/conduit
- conduit_data:/var/lib/conduit
networks:
- openclaw_net
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
restart: unless-stopped
volumes:
- ./openclaw/config:/root/.openclaw/config
- openclaw_data:/root/.openclaw/workspace
environment:
- SILICONFLOW_API_KEY=${SILICONFLOW_API_KEY}
- ARK_API_KEY=${ARK_API_KEY}
depends_on:
- conduit
networks:
- openclaw_net
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./certs:/etc/letsencrypt
- ./www:/var/www/certbot
depends_on:
- conduit
- openclaw
networks:
- openclaw_net
volumes:
conduit_data:
openclaw_data:
networks:
openclaw_net:
driver: bridge
5.7 步骤 6:申请 SSL 证书(1 分钟)
mkdir -p /opt/openclaw/certs /opt/openclaw/www/certbot
docker run --rm \
-v /opt/openclaw/certs:/etc/letsencrypt \
-v /opt/openclaw/www:/var/www/certbot \
certbot/certbot \
certonly --webroot \
--webroot-path=/var/www/certbot \
--email your@email.com \
--domain matrix.jzhix.com \
--agree-tos
5.8 步骤 7:启动服务(1 分钟)
cd /opt/openclaw
export SILICONFLOW_API_KEY="your_api_key_here"
export ARK_API_KEY="your_ark_api_key_here"
docker compose up -d
docker compose logs -f
5.9 步骤 8:验证部署(1 分钟)
# 检查服务状态
docker compose ps
# 测试 Conduit
curl https://matrix.jzhix.com/_matrix/client/versions
# 测试 OpenClaw
curl http://localhost:8080/api/v1/health
5.10 快速诊断脚本
#!/bin/bash
# diagnose.sh
echo "=== OpenClaw Matrix 诊断工具 ==="
echo "1. 检查 Docker 服务..."
docker compose ps
echo "2. 检查 Conduit..."
curl -s https://matrix.jzhix.com/_matrix/client/versions | head -c 100
echo "3. 检查 OpenClaw..."
curl -s http://localhost:8080/api/v1/health
echo "4. 检查 SSL 证书..."
echo | openssl s_client -connect matrix.jzhix.com:443 2>/dev/null | openssl x509 -noout -dates
echo "5. 检查磁盘空间..."
df -h /opt/openclaw
echo "6. 检查内存使用..."
docker stats --no-stream --format "table {{.Container}}\t{{.MemUsage}}"
echo "=== 诊断完成 ==="
六、5 个实战场景案例
场景 1:私聊问答机器人
需求:用户私聊提问,Agent 即时回答
配置:
scenario: private_chat
trigger:
type: direct_message
from: "@jiangshen:jzhix.com"
response:
mode: immediate
context_length: 10
model: aliyun/qwen3.5-plus
测试步骤:
1. 在 Element 中搜索 @damon:jzhix.com
2. 发起私聊
3. 发送消息:"Python 中如何实现单例模式?"
4. 等待响应(通常 3-5 秒)
预期输出:
Python 实现单例模式有几种常见方法:
1. 使用装饰器:
```python
def singleton(cls):
instances = {}
def get_instance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return get_instance
- 使用元类:
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
推荐使用装饰器方式,更简洁易读。
---
### 场景 2:群聊多 Agent 协作
**需求**:在群聊中,多个 Agent 协作完成复杂任务
**配置**:
```yaml
scenario: group_collaboration
room_id: "!project-team:jzhix.com"
mode: star
coordinator:
name: 戴蒙
id: damon
workers:
- name: 代码助手
trigger: ["代码", "实现", "写个"]
- name: 调研助手
trigger: ["查一下", "调研", "对比"]
- name: 文档助手
trigger: ["文档", "说明", "注释"]
测试步骤:
1. 创建群聊房间 #project-team:jzhix.com
2. 邀请 @damon:jzhix.com、@coder:jzhix.com、@researcher:jzhix.com
3. 发送消息:"@damon 我们要开发一个 API 网关,需要技术选型调研和代码框架"
预期流程:
1. 戴蒙(Coordinator)接收任务,分解为技术调研和代码框架
2. 调研助手返回:Kong、Apisix、Traefik 对比分析
3. 代码助手返回:基于 FastAPI 的代码框架
4. 戴蒙整合结果,返回完整方案
场景 3:定时任务自动执行
需求:每天定时执行任务(如晨间简报、数据备份)
配置:
scenario: scheduled_tasks
tasks:
- name: morning_briefing
cron: "0 8 * * *"
action: send_message
target: "!team:jzhix.com"
content: |
大家早!今天是 {{date}}
📅 今日日程:{{calendar_events}}
🌤️ 天气:{{weather}}
📰 技术新闻:{{tech_news}}
- name: backup_database
cron: "0 2 * * *"
action: exec_command
command: "pg_dump openclaw > /backup/db_{{date}}.sql"
- name: cleanup_logs
cron: "0 3 * * 0"
action: exec_command
command: "find /var/log -name '*.log' -mtime +30 -delete"
测试步骤:
# 手动触发测试
curl -X POST http://localhost:8080/api/v1/tasks/morning_briefing/trigger
# 查看状态
curl http://localhost:8080/api/v1/tasks/status
场景 4:网文创作工作流
需求:多 Agent 协作创作网络小说
配置:
scenario: novel_writing
mode: pipeline
stages:
- name: 大纲设计
agent: outline-agent
prompt: |
根据主题"{{theme}}",设计小说大纲:
1. 世界观设定
2. 主要角色
3. 剧情主线
4. 分卷规划
- name: 章节创作
agent: writer-agent
prompt: |
根据大纲,创作第{{chapter}}章:
- 字数:3000-5000 字
- 风格:{{style}}
- name: 润色优化
agent: editor-agent
prompt: |
润色以下文本:
1. 消除 AI 味道
2. 增强画面感
3. 优化对话节奏
- name: 封面生成
agent: artist-agent
prompt: |
生成章节封面图:
- 风格:手绘风
- 元素:{{key_elements}}
- 尺寸:1920x1080
使用示例:
# 创建新书
curl -X POST http://localhost:8080/api/v1/novel/create \
-d '{"title": "AI 纪元", "theme": "赛博朋克"}'
# 创作第一章
curl -X POST http://localhost:8080/api/v1/novel/chapter/1/generate
# 查看进度
curl http://localhost:8080/api/v1/novel/status
场景 5:心跳检查 + 异常告警
需求:监控系统健康,异常时发送告警
配置:
scenario: health_monitor
checks:
- name: conduit_health
type: http
url: "https://matrix.jzhix.com/_matrix/client/versions"
interval: 60
timeout: 10
expected_status: 200
- name: openclaw_health
type: http
url: "http://localhost:8080/api/v1/health"
interval: 60
timeout: 10
expected_status: 200
- name: disk_usage
type: command
command: "df / | tail -1 | awk '{print $5}' | sed 's/%//'"
interval: 300
threshold: 90
- name: memory_usage
type: command
command: "free | grep Mem | awk '{print int($3/$2*100)}'"
interval: 300
threshold: 90
alerts:
channel: "!ops-alerts:jzhix.com"
mention: ["@ops:jzhix.com"]
告警消息示例:
🚨 严重告警
服务:Conduit
状态:❌ 不可用
时间:2026-03-04 10:26:15
错误:HTTP 503 Service Unavailable
@ops 请立即处理!
七、生产环境最佳实践
7.1 配置管理
原则:配置与代码分离,环境隔离
目录结构:
/opt/openclaw/
├── config/
│ ├── base.yaml # 基础配置
│ ├── production.yaml # 生产环境
│ ├── staging.yaml # 测试环境
│ └── development.yaml # 开发环境
├── secrets/
│ ├── api_keys.yaml # API 密钥(加密存储)
│ └── certificates/ # SSL 证书
└── logs/
├── openclaw/
└── conduit/
7.2 安全加固
1. 防火墙配置:
ufw default deny incoming
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw enable
2. SSH 加固:
# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
3. Matrix 安全配置:
[security]
allow_registration = false
captcha_enabled = true
recaptcha_secret = "your_secret"
[federation]
allow = ["*"]
deny = ["spam-server.com"]
4. API 密钥管理:
export SILICONFLOW_API_KEY="sk-..."
export ARK_API_KEY="..."
7.3 性能优化
1. Conduit 优化:
[performance]
cache_size = 1024
max_connections = 100
thread_pool_size = 8
[database]
prune_interval = 3600
retention_days = 90
2. Nginx 优化:
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
http {
gzip on;
gzip_types text/plain application/json;
keepalive_timeout 65;
}
3. OpenClaw 优化:
performance:
worker_threads: 4
max_concurrent_requests: 20
request_timeout: 30
cache:
enabled: true
type: redis
ttl: 3600
7.4 监控告警
Prometheus + Grafana 配置:
# docker-compose.monitoring.yml
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=your_password
node_exporter:
image: prom/node-exporter:latest
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
告警规则:
groups:
- name: openclaw_alerts
rules:
- alert: ConduitDown
expr: up{job="conduit"} == 0
for: 1m
annotations:
summary: "Conduit 服务不可用"
- alert: HighMemoryUsage
expr: node_memory_MemUsed_bytes / node_memory_MemTotal_bytes > 0.9
for: 5m
annotations:
summary: "内存使用超过 90%"
7.5 高可用部署
多实例部署:
services:
conduit1:
image: matrixconduit/conduit:latest
volumes:
- conduit_data1:/var/lib/conduit
conduit2:
image: matrixconduit/conduit:latest
volumes:
- conduit_data2:/var/lib/conduit
nginx:
image: nginx:alpine
volumes:
- ./nginx/haproxy.conf:/etc/nginx/nginx.conf
负载均衡配置:
upstream conduit_backend {
server conduit1:6167 weight=1;
server conduit2:6167 weight=1;
}
server {
location / {
proxy_pass http://conduit_backend;
}
}
数据备份策略:
#!/bin/bash
# backup.sh
BACKUP_DIR="/backup/openclaw"
DATE=$(date +%Y%m%d_%H%M%S)
# 备份 Conduit 数据
docker cp conduit:/var/lib/conduit $BACKUP_DIR/conduit_$DATE
# 备份 OpenClaw 配置
docker cp openclaw:/root/.openclaw/config $BACKUP_DIR/openclaw_config_$DATE
# 备份到远程
rsync -avz $BACKUP_DIR/conduit_$DATE backup@remote:/backups/
# 清理 30 天前的备份
find $BACKUP_DIR -mtime +30 -delete
八、10 个常见问题排查
问题 1:Conduit 无法启动
症状:
docker compose ps
# conduit Exited (1)
排查步骤:
# 1. 查看日志
docker compose logs conduit
# 2. 检查端口占用
netstat -tlnp | grep 6167
# 3. 检查配置文件
cat conduit/config/conduit.toml
# 4. 修复权限
chown -R 1000:1000 conduit/data
解决方案:
- 端口占用:修改端口或停止占用进程
- 权限问题:chown -R 1000:1000 conduit/
- 配置错误:修正 conduit.toml 语法
问题 2:Matrix 客户端无法连接
症状:Element 显示"无法连接到服务器"
排查步骤:
# 1. 检查 Nginx 状态
docker compose ps nginx
# 2. 查看 Nginx 日志
docker compose logs nginx
# 3. 测试 HTTPS
curl -v https://matrix.jzhix.com/_matrix/client/versions
# 4. 检查 SSL 证书
echo | openssl s_client -connect matrix.jzhix.com:443 | openssl x509 -noout -dates
# 5. 检查 DNS 解析
dig matrix.jzhix.com
解决方案:
- SSL 证书过期:certbot renew
- DNS 问题:检查域名解析
- Nginx 配置错误:修正 nginx.conf
问题 3:OpenClaw 无法接收消息
症状:用户发送消息,OpenClaw 无响应
排查步骤:
# 1. 检查 Webhook 配置
cat conduit/config/conduit.toml | grep webhook
# 2. 测试 Webhook 连通性
curl -X POST http://openclaw:8080/api/v1/matrix/webhook \
-H "Content-Type: application/json" \
-d '{"test": true}'
# 3. 查看 OpenClaw 日志
docker compose logs openclaw | grep webhook
# 4. 检查 Access Token
docker compose exec openclaw cat /root/.openclaw/config/config.yaml | grep access_token
解决方案:
- Webhook URL 错误:修正 conduit.toml 中的 URL
- Access Token 过期:重新获取 token
- 网络问题:检查 Docker 网络
问题 4:Agent 响应缓慢
症状:消息发送后,等待超过 30 秒才有响应
排查步骤:
# 1. 检查 LLM API 延迟
curl -w "@curl-format.txt" -o /dev/null -s \
-X POST https://api.siliconflow.cn/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-d '{"model": "qwen3.5-plus", "messages": [{"role": "user", "content": "test"}]}'
# 2. 检查系统资源
docker stats --no-stream
# 3. 查看 Agent 日志
docker compose logs openclaw | grep "processing time"
# 4. 检查网络延迟
ping api.siliconflow.cn
解决方案:
- API 延迟:切换到更快的模型或增加超时
- 资源不足:增加服务器配置
- 网络问题:使用国内 API 端点
问题 5:消息路由错误
症状:消息发送到错误的 Agent
排查步骤:
# 1. 检查路由配置
cat /root/.openclaw/config/routing.yaml
# 2. 启用调试日志
export LOG_LEVEL=debug
docker compose restart openclaw
# 3. 查看路由日志
docker compose logs openclaw | grep "routing"
# 4. 测试路由规则
curl -X POST http://localhost:8080/api/v1/router/test \
-d '{"text": "@damon 帮我查一下 React"}'
解决方案:
- 路由规则错误:修正 routing.yaml
- 关键词匹配问题:调整正则表达式
问题 6:内存泄漏
症状:内存使用持续增长,最终 OOM
排查步骤:
# 1. 监控内存使用
watch -n 1 'docker stats --no-stream'
# 2. 检查内存泄漏
docker compose exec openclaw py-spy dump --pid 1
# 3. 查看 GC 日志
docker compose logs openclaw | grep "garbage collection"
# 4. 检查缓存大小
docker compose exec openclaw redis-cli INFO memory
解决方案:
# 限制容器内存
services:
openclaw:
deploy:
resources:
limits:
memory: 2G
# 定期重启服务
# 每天凌晨 3 点
docker compose restart openclaw
问题 7:数据库损坏
症状:Conduit 报错"database disk image is malformed"
排查步骤:
# 1. 停止服务
docker compose stop conduit
# 2. 检查数据库
sqlite3 /opt/openclaw/conduit/data/conduit.db "PRAGMA integrity_check;"
# 3. 查看错误日志
docker compose logs conduit | grep "database"
解决方案:
# 从备份恢复
cp /backup/conduit/conduit.db /opt/openclaw/conduit/data/
# 或重建数据库
rm /opt/openclaw/conduit/data/conduit.db
docker compose start conduit
问题 8:SSL 证书续期失败
症状:HTTPS 访问报错"证书已过期"
排查步骤:
# 1. 检查证书有效期
echo | openssl s_client -connect matrix.jzhix.com:443 | openssl x509 -noout -dates
# 2. 手动续期
docker run --rm \
-v /opt/openclaw/certs:/etc/letsencrypt \
-v /opt/openclaw/www:/var/www/certbot \
certbot/certbot renew
# 3. 查看 Certbot 日志
docker compose logs certbot
解决方案:
# 添加定时任务
crontab -e
# 0 0 1 * * docker run --rm -v ... certbot renew
# 重启 Nginx 加载新证书
docker compose restart nginx
问题 9:联邦通信失败
症状:无法与其他 Matrix 服务器用户通信
排查步骤:
# 1. 检查联邦配置
cat conduit/config/conduit.toml | grep federation
# 2. 测试联邦连接
curl https://matrix.jzhix.com/_matrix/federation/v1/version/1
# 3. 检查 DNS SRV 记录
dig _matrix._tcp.jzhix.com SRV
# 4. 查看联邦日志
docker compose logs conduit | grep "federation"
解决方案:
# 开放 8448 端口(联邦通信)
ufw allow 8448/tcp
# 添加 DNS SRV 记录
_matrix._tcp.jzhix.com. 300 IN SRV 10 10 443 matrix.jzhix.com.
问题 10:Agent 技能加载失败
症状:Agent 启动时报错"Skill not found"
排查步骤:
# 1. 检查技能目录
ls -la /root/.openclaw/skills/
# 2. 查看技能配置
cat /root/.openclaw/config/agents/damon.yaml | grep skills
# 3. 测试技能加载
docker compose exec openclaw \
python3 -c "from openclaw.skills import load; load('coding-agent')"
# 4. 查看加载日志
docker compose logs openclaw | grep "skill"
解决方案:
# 技能文件缺失:重新克隆
git clone https://github.com/openclaw/skills.git /root/.openclaw/skills
# 权限问题
chown -R 1000:1000 /root/.openclaw/skills
# 依赖缺失
docker compose exec openclaw pip install -r requirements.txt
九、总结与下一步
9.1 核心要点回顾
本文详细介绍了 OpenClaw 配置 Matrix 的完整流程,涵盖:
- 技术选型:通过决策矩阵选择 Matrix 协议
- 系统架构:5 层架构设计(访问层→代理层→服务层→执行层→存储层)
- 消息路由:从用户到 Agent 的完整链路,4 种路由策略
- 多 Agent 协作:4 种模式(星型、流水线、广播、混合)
- 快速配置:10 分钟部署指南,一键诊断脚本
- 实战案例:5 个完整场景(私聊、群聊、定时任务、网文创作、监控告警)
- 最佳实践:配置管理、安全加固、性能优化、监控告警、高可用
- 问题排查:10 个常见问题详细解决方案
9.2 推荐学习路径
初学者:
1. 先完成 10 分钟快速配置
2. 测试私聊问答场景
3. 阅读问题排查章节
进阶用户:
1. 配置多 Agent 协作
2. 实现自定义技能
3. 部署监控告警
生产环境:
1. 实施高可用部署
2. 配置备份策略
3. 性能调优
9.3 相关资源
官方文档:
- Matrix 协议规范
- Conduit 文档
- OpenClaw 文档
社区资源:
- Matrix 中文社区
- Element 客户端
- OpenClaw GitHub
延伸阅读:
- Matrix Conduit 部署实战
- 2026 年 AI Agent 框架选型指南
最后更新: 2026-03-04
作者: 江神
许可: CC BY-NC-SA 4.0
如果本文对你有帮助,欢迎分享给更多开发者!