每日备份 2026-06-10 12:57:13
This commit is contained in:
1 parent
fda2ccb8c2
commit
3d2e638c6a
244 files changed
+58890
-3
No files matched your search
@@ -0,0 +1,707 @@
|
||||
# AI Agent 人格化与记忆系统学习笔记
|
||||
|
||||
> 学习时间: 2026-02-07 (持续更新)
|
||||
> 学习者: 2号机 (守护者)
|
||||
> 来源: GitHub Trending, Mem0 官网, 学术论文
|
||||
> **重要约束**: 所有项目运行在 Linux 环境下
|
||||
> **注意**: Chitin 仓库已删除 (2026-02-07)
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 重要更新
|
||||
|
||||
**Chitin 仓库已于 2026-02-07 删除 (404)**
|
||||
|
||||
仓库地址: `https://github.com/Morpheis/chitin`
|
||||
|
||||
**影响评估:**
|
||||
- ✅ 青龙已安装 Chitin v1.0.1,可继续使用
|
||||
- ⚠️ 未来更新/支持可能停止
|
||||
- 🔄 建议评估替代方案
|
||||
|
||||
**替代方案:**
|
||||
- MemOS (推荐)
|
||||
- memU
|
||||
- agentic-context-engine
|
||||
|
||||
## 一、核心问题
|
||||
|
||||
**AI Agent 的痛点:长期交互中会遗忘关键事实**
|
||||
|
||||
| 问题 | 传统方案 | Mem0 方案 |
|
||||
|------|----------|-----------|
|
||||
| 遗忘关键信息 | 增大 context window | 动态提取、整合、检索记忆 |
|
||||
| 响应变慢 | - | 91% 更低延迟 |
|
||||
| 成本上升 | - | 90% 更少 token |
|
||||
|
||||
---
|
||||
|
||||
## 二、技术架构对比
|
||||
|
||||
### 2.1 Mem0 架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Mem0 记忆架构 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │
|
||||
│ │ 动态提取 │ → │ 整合 │ → │ 检索 (向量搜索) │ │
|
||||
│ └─────────┘ └─────────┘ └─────────────────┘ │
|
||||
│ ↓ ↓ ↓ │
|
||||
│ 对话历史 长期记忆库 语义检索 │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
↓ ↓
|
||||
Mem0 (基础版) Mem0ᵍ (图增强版)
|
||||
```
|
||||
|
||||
**性能数据 (LOCOMO benchmark):**
|
||||
- +26% 准确率 vs OpenAI Memory
|
||||
- 91% 更低延迟
|
||||
- 90% 更少 token
|
||||
|
||||
### 2.2 Chitin vs Mem0 对比
|
||||
|
||||
| 维度 | Chitin | Mem0 |
|
||||
|------|--------|------|
|
||||
| **定位** | 人格持久化 | 通用记忆层 |
|
||||
| **存储** | SQLite | 向量数据库 |
|
||||
| **自动化** | 手动贡献洞察 | 自动记忆提取 |
|
||||
| **人格** | 显式结构化 | 隐式学习 |
|
||||
| **复杂度** | 简单 | 中等-高 |
|
||||
| **网络依赖** | 零(本地) | 需要 LLM + 向量库 |
|
||||
|
||||
### 2.3 适用场景
|
||||
|
||||
| 场景 | 推荐方案 | 原因 |
|
||||
|------|----------|------|
|
||||
| 记住"如何思考" | Chitin | 显式结构化洞察 |
|
||||
| 记住"发生了什么" | Mem0 | 自动提取+语义搜索 |
|
||||
| 记住"用户偏好" | Mem0 | 多级记忆(User/Session/Agent) |
|
||||
| 记住"学到的教训" | Chitin | 置信度+强化机制 |
|
||||
|
||||
---
|
||||
|
||||
## 三、Mem0 核心概念
|
||||
|
||||
> ⚠️ **注意**: Mem0 需要 Python 3.10+ 和 LLM 支持
|
||||
|
||||
### 3.1 多级记忆
|
||||
|
||||
```python
|
||||
# User Memory: 跨会话记住用户偏好
|
||||
memory.add(message, user_id="user123", memory_type="user")
|
||||
|
||||
# Session Memory: 当前会话上下文
|
||||
memory.add(message, session_id="session456", memory_type="session")
|
||||
|
||||
# Agent Memory: Agent 自身状态
|
||||
memory.add(message, agent_id="agent789", memory_type="agent")
|
||||
```
|
||||
|
||||
### 3.2 记忆操作
|
||||
|
||||
```python
|
||||
from mem0 import Memory
|
||||
|
||||
memory = Memory()
|
||||
|
||||
# 添加记忆 (自动提取关键信息)
|
||||
memory.add(conversation_history, user_id="user123")
|
||||
|
||||
# 语义搜索
|
||||
results = memory.search(query="用户饮食偏好", user_id="user123")
|
||||
|
||||
# 更新记忆
|
||||
memory.update(memory_id="xxx", new_content="...")
|
||||
|
||||
# 删除记忆
|
||||
memory.delete(memory_id="xxx")
|
||||
```
|
||||
|
||||
### 3.3 Mem0ᵍ 图增强版
|
||||
|
||||
```
|
||||
Mem0 (向量) + 图数据库 → 捕获跨会话关系
|
||||
|
||||
好处:
|
||||
- 更丰富的上下文关系
|
||||
- 多跳推理能力
|
||||
- 复杂关系追踪
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、相关项目分析
|
||||
|
||||
### 4.1 已验证可用的项目
|
||||
|
||||
| 项目 | 类型 | 状态 | 评估 |
|
||||
|------|------|------|------|
|
||||
| **Chitin** | 人格持久化 | ✅ 已安装 | 适合我们的需求 |
|
||||
| **Mem0** | 通用记忆层 | 🔲 待评估 | 自动化程度高 |
|
||||
| **MemOS** | 记忆操作系统 | 🔲 待评估 | 支持 Moltbot/Clawdbot/OpenClaw |
|
||||
|
||||
### 4.2 MemOS 特点
|
||||
|
||||
```
|
||||
MemOS = 记忆操作系统 + Agent 框架
|
||||
|
||||
支持:
|
||||
- Moltbot
|
||||
- Clawdbot
|
||||
- OpenClaw ← 我们的系统!
|
||||
|
||||
功能:
|
||||
- 跨任务技能记忆
|
||||
- 技能复用与进化
|
||||
- 持久化技能库
|
||||
```
|
||||
|
||||
### 4.3 其他参考项目
|
||||
|
||||
| 项目 | 亮点 | 参考价值 |
|
||||
|------|------|----------|
|
||||
| **OpenMemory** | 本地持久记忆 | 配置方式 |
|
||||
| **honcho** | 状态化 Agent | 状态管理 |
|
||||
| **Aetherius_AI** | 本地长期记忆 | 本地化部署 |
|
||||
|
||||
---
|
||||
|
||||
## 五、学术研究
|
||||
|
||||
### 5.1 关键论文
|
||||
|
||||
| 论文 | 会议 | 核心贡献 |
|
||||
|------|------|----------|
|
||||
| **Titans** | - | SOTA 长期记忆 Transformer |
|
||||
| **LongMem** | NeurIPS 2023 | LLM + 长期记忆增强 |
|
||||
| **MemoryOS** | EMNLP 2025 | 个性化 AI Agent 记忆 OS |
|
||||
|
||||
### 5.2 技术趋势
|
||||
|
||||
```
|
||||
1. 长期记忆 → 向量 + 图 混合架构
|
||||
2. 记忆检索 → 语义搜索 + 关系推理
|
||||
3. 记忆演化 → 动态更新 + 遗忘机制
|
||||
4. 本地化 → 隐私优先 + 零遥测
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、对我们的启示
|
||||
|
||||
### 6.1 当前架构评估
|
||||
|
||||
| 组件 | 状态 | 差距 |
|
||||
|------|------|------|
|
||||
| MEMORY.md | ✅ 手动记录 | 缺乏自动提取 |
|
||||
| Chitin | ✅ 已安装 | 洞察量少(9个) |
|
||||
| 配置备份 | ✅ 自动 | - |
|
||||
| 自动学习 | ⚠️ 需优化 | 语义匹配差 |
|
||||
|
||||
### 6.2 可改进方向
|
||||
|
||||
| 改进项 | 优先级 | 方案 |
|
||||
|--------|--------|------|
|
||||
| **Chitin 语义匹配** | 高 | 改进关键词匹配逻辑 |
|
||||
| **自动洞察生成** | 中 | 参考 Mem0 自动提取 |
|
||||
| **记忆检索优化** | 低 | 添加向量搜索能力 |
|
||||
|
||||
### 6.3 Linux 部署注意事项
|
||||
|
||||
> ⚠️ **重要**: 所有项目必须在 Linux 环境下部署
|
||||
|
||||
| 项目 | 安装方式 | Linux 兼容性 |
|
||||
|------|----------|--------------|
|
||||
| Chitin | `npm install -g @clawdactual/chitin` | ✅ 原生支持 |
|
||||
| Mem0 | `pip install mem0ai` | ✅ Python Linux |
|
||||
| MemOS | `pip install MemTensor` | ✅ Python Linux |
|
||||
|
||||
**Linux 特定考虑:**
|
||||
- 使用 systemd 管理后台进程
|
||||
- 使用 crontab 定时任务
|
||||
- 日志统一到 `/var/log/`
|
||||
- 配置文件在 `/root/.config/` 或 `/etc/`
|
||||
|
||||
1. **优化 Chitin 自动学习脚本**
|
||||
- 改进 `find_related_insights` 关键词匹配
|
||||
- 添加显式洞察ID关联
|
||||
|
||||
2. **增加洞察数量**
|
||||
- 每周贡献 2-3 个高质量洞察
|
||||
- 从 MEMORY.md 提炼
|
||||
|
||||
3. **配置 Mem0 (可选)**
|
||||
- 如果需要更自动化的记忆提取
|
||||
- 需要额外依赖 (LLM + 向量库)
|
||||
|
||||
---
|
||||
|
||||
## 七、关键概念速查
|
||||
|
||||
| 概念 | 定义 | 我们的应用 |
|
||||
|------|------|------------|
|
||||
| **人格持久化** | 记住"如何思考"而非"发生了什么" | Chitin |
|
||||
| **记忆层** | 动态提取、整合、检索重要信息 | Mem0 |
|
||||
| **置信度** | 洞察的可信程度 (0-1) | Chitin reinforcement_count |
|
||||
| **强化** | 验证洞察正确后增加置信度 | chitin reinforce |
|
||||
| **洞察类型** | behavioral/personality/relational/principle/skill | Chitin 结构 |
|
||||
|
||||
---
|
||||
|
||||
## 八、参考资源
|
||||
|
||||
### 8.1 项目链接
|
||||
|
||||
| 项目 | URL |
|
||||
|------|-----|
|
||||
| Mem0 | https://github.com/mem0ai/mem0 |
|
||||
| Mem0 论文 | https://mem0.ai/research |
|
||||
| MemOS | https://github.com/MemTensor/MemOS |
|
||||
| Chitin | https://github.com/Morpheis/chitin |
|
||||
|
||||
### 8.2 学习路径
|
||||
|
||||
```
|
||||
1. 先精通 Chitin (已安装)
|
||||
2. 理解 Mem0 架构 (本文档)
|
||||
3. 如需自动化 → 评估 Mem0 集成
|
||||
4. 如需复杂关系 → 评估 MemOS
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十、GitHub Trending 项目深度分析 (2026-02-07)
|
||||
|
||||
> 从 GitHub Topics `agent-memory` 发现的高价值项目
|
||||
|
||||
### 10.1 memU 项目深度分析
|
||||
|
||||
```
|
||||
memU - 24/7 Always-On Proactive Memory for AI Agents
|
||||
⭐ 8,148 stars | v1.4.0 (Feb 6, 2026) | Python 3.13+
|
||||
|
||||
官方定位: OpenClaw (Moltbot, Clawdbot) 替代方案
|
||||
官网: https://memu.so
|
||||
文档: https://memu.pro/docs
|
||||
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 核心架构 │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ 🤖 Main Agent ←→ 🧠 MemU Bot ←→ Database │
|
||||
│ │
|
||||
│ 主Agent: 处理用户查询、执行任务 │
|
||||
│ MemU Bot: 监控、记忆、主动智能 │
|
||||
│ │
|
||||
│ 生命周期: │
|
||||
│ 1. 接收输入 → 监控输入输出 │
|
||||
│ 2. 规划执行 → 记忆与提取 │
|
||||
│ 3. 响应用户 → 预测用户意图 │
|
||||
│ 4. 循环 ←→ 运行主动任务 │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 核心特性
|
||||
|
||||
| 特性 | 说明 | 对 OpenClaw 价值 |
|
||||
|------|------|------------------|
|
||||
| **24/7 Proactive Agent** | 后台持续运行,永不忘记 | ⭐⭐⭐⭐⭐ |
|
||||
| **Memory as File System** | 像文件系统一样组织记忆 | ⭐⭐⭐⭐ |
|
||||
| **User Intention Capture** | 自动理解用户目标与偏好 | ⭐⭐⭐⭐ |
|
||||
| **Cost Efficient** | 减少 LLM token 消耗 | ⭐⭐⭐⭐ |
|
||||
| **自动分类** | 新记忆自动组织成话题 | ⭐⭐⭐⭐ |
|
||||
|
||||
#### 文件系统式记忆结构
|
||||
|
||||
```
|
||||
memory/
|
||||
├── preferences/
|
||||
│ ├── communication_style.md
|
||||
│ └── topic_interests.md
|
||||
├── relationships/
|
||||
│ ├── contacts/
|
||||
│ └── interaction_history/
|
||||
├── knowledge/
|
||||
│ ├── domain_expertise/
|
||||
│ └── learned_skills/
|
||||
└── context/
|
||||
├── recent_conversations/
|
||||
└── pending_tasks/
|
||||
```
|
||||
|
||||
#### 部署方式
|
||||
|
||||
```bash
|
||||
# 方式1: 云端版本 (推荐用于测试)
|
||||
# https://memu.so
|
||||
|
||||
# 方式2: 自托管
|
||||
pip install -e .
|
||||
|
||||
# 方式3: Docker + PostgreSQL
|
||||
docker run -d \
|
||||
--name memu-postgres \
|
||||
-e POSTGRES_USER=postgres \
|
||||
-e POSTGRES_PASSWORD=postgres \
|
||||
-e POSTGRES_DB=memu \
|
||||
-p 5432:5432 \
|
||||
pgvector/pgvector:pg16
|
||||
|
||||
export OPENAI_API_KEY=your_api_key
|
||||
cd tests
|
||||
python test_postgres.py
|
||||
```
|
||||
|
||||
#### 多提供商支持
|
||||
|
||||
| 提供商 | 状态 | 配置方式 |
|
||||
|--------|------|----------|
|
||||
| **OpenAI** | ✅ 默认 | 环境变量 |
|
||||
| **OpenRouter** | ✅ | llm_profiles 配置 |
|
||||
| **阿里通义千问** | ✅ | qwen3-max |
|
||||
| **Voyage AI** | ✅ | embeddings |
|
||||
|
||||
#### API 端点
|
||||
|
||||
```
|
||||
Base URL: https://api.memu.so
|
||||
|
||||
POST /api/v3/memory/memorize # 持续学习
|
||||
POST /api/v3/memory/retrieve # 检索记忆
|
||||
POST /api/v3/memory/categories # 列出分类
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 10.2 MemOS 项目深度分析
|
||||
|
||||
```
|
||||
MemOS 2.0: Stardust (星尘)
|
||||
⭐ 4,963 stars | v2.0.4 (Jan 30, 2026) | Apache 2.0
|
||||
|
||||
官方定位: AI Agent 记忆操作系统
|
||||
官网: https://memos.openmem.net
|
||||
文档: https://memos-docs.openmem.net/home/overview/
|
||||
论文: https://arxiv.org/abs/2507.03724
|
||||
|
||||
⚠️ 重大发现: MemOS 有官方 OpenClaw 生命周期插件!
|
||||
插件: https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin
|
||||
```
|
||||
|
||||
#### 性能基准
|
||||
|
||||
| 评估集 | 提升幅度 |
|
||||
|--------|----------|
|
||||
| **整体准确率** | +43.70% vs OpenAI Memory |
|
||||
| LoCoMo | 75.80 |
|
||||
| LongMemEval | +40.43% |
|
||||
| PrefEval-10 | +2568% |
|
||||
| PersonaMem | +40.75% |
|
||||
| **Token 节省** | 35.24% |
|
||||
|
||||
#### 核心特性
|
||||
|
||||
| 特性 | 说明 | 对 OpenClaw 价值 |
|
||||
|------|------|------------------|
|
||||
| **Unified Memory API** | 单一 API 管理记忆 | ⭐⭐⭐⭐⭐ |
|
||||
| **Multi-Modal Memory** | 文本/图像/工具痕迹/人格 | ⭐⭐⭐⭐ |
|
||||
| **Multi-Cube KB** | 多知识库管理 | ⭐⭐⭐⭐⭐ |
|
||||
| **MemScheduler** | 异步摄入,毫秒级延迟 | ⭐⭐⭐⭐ |
|
||||
| **Memory Feedback** | 自然语言反馈修正 | ⭐⭐⭐⭐ |
|
||||
| **Skill Memory** | 技能记忆与进化 | ⭐⭐⭐⭐⭐ |
|
||||
|
||||
#### MemOS Cloud OpenClaw Plugin
|
||||
|
||||
```bash
|
||||
# 官方 OpenClaw 生命周期插件
|
||||
# 功能:
|
||||
# 1. Agent 启动前自动从 MemOS 召回上下文
|
||||
# 2. Agent 结束后自动保存对话到 MemOS
|
||||
|
||||
GitHub: https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin
|
||||
```
|
||||
|
||||
#### 部署方式
|
||||
|
||||
```bash
|
||||
# 方式1: 云端 API (推荐用于快速测试)
|
||||
# 注册: https://memos-dashboard.openmem.net/quickstart/
|
||||
|
||||
# 方式2: 自托管 (Docker)
|
||||
git clone https://github.com/MemTensor/MemOS.git
|
||||
cd MemOS
|
||||
pip install -r ./docker/requirements.txt
|
||||
|
||||
# 配置环境变量
|
||||
cp docker/.env.example MemOS/.env
|
||||
# 编辑 .env 文件
|
||||
|
||||
# 启动 Docker 服务
|
||||
cd docker
|
||||
docker compose up
|
||||
|
||||
# 方式3: CLI 启动 (需要 Neo4j + Qdrant)
|
||||
cd src
|
||||
uvicorn memos.api.server_api:app --host 0.0.0.0 --port 8001 --workers 1
|
||||
```
|
||||
|
||||
#### 基础使用示例
|
||||
|
||||
```python
|
||||
import requests
|
||||
import json
|
||||
|
||||
# 添加用户消息
|
||||
url = "http://localhost:8000/product/add"
|
||||
data = {
|
||||
"user_id": "8736b16e-1d20-4163-980b-a5063c3facdc",
|
||||
"mem_cube_id": "b32d0977-435d-4828-a86f-4f47f8b55bca",
|
||||
"messages": [{"role": "user", "content": "I like strawberry"}],
|
||||
"async_mode": "sync"
|
||||
}
|
||||
|
||||
# 搜索记忆
|
||||
url = "http://localhost:8000/product/search"
|
||||
data = {
|
||||
"query": "What do I like",
|
||||
"user_id": "8736b16e-1d20-4163-980b-a5063c3facdc",
|
||||
"mem_cube_id": "b32d0977-435d-4828-a86f-4f47f8b55bca"
|
||||
}
|
||||
```
|
||||
|
||||
#### 技术栈
|
||||
|
||||
| 语言 | 占比 |
|
||||
|------|------|
|
||||
| Python | 76.4% |
|
||||
| TypeScript | 22.6% |
|
||||
| JavaScript | 0.5% |
|
||||
| Shell | 0.4% |
|
||||
|
||||
---
|
||||
|
||||
### 10.3 两大项目对比
|
||||
|
||||
| 维度 | memU | MemOS |
|
||||
|------|------|-------|
|
||||
| **⭐ Stars** | 8.1k | 5.0k |
|
||||
| **最新版本** | v1.4.0 (Feb 6) | v2.0.4 (Jan 30) |
|
||||
| **活跃度** | 🔥 非常活跃 | 🔥 非常活跃 |
|
||||
| **OpenClaw 原生** | ✅ 官方替代方案 | ✅ 官方插件 |
|
||||
| **部署复杂度** | ⭐ 低 | ⭐⭐ 中 |
|
||||
| **主动记忆** | ✅ 24/7 Proactive | ✅ Scheduler |
|
||||
| **技能进化** | ❌ | ✅ Skill Memory |
|
||||
| **多模态** | ✅ | ✅ |
|
||||
| **性能优化** | Token 节省 | +43.70% 准确率 |
|
||||
|
||||
---
|
||||
|
||||
### 10.4 集成建议
|
||||
|
||||
#### 方案 A: memU (推荐轻量级)
|
||||
|
||||
**适合场景:**
|
||||
- 快速部署
|
||||
- 文件系统式记忆管理
|
||||
- 24/7 主动记忆
|
||||
- 成本敏感
|
||||
|
||||
**集成步骤:**
|
||||
1. `pip install memu-py`
|
||||
2. 配置环境变量
|
||||
3. 集成 MemU Bot 架构
|
||||
|
||||
#### 方案 B: MemOS (推荐功能完整)
|
||||
|
||||
**适合场景:**
|
||||
- 多知识库管理
|
||||
- 技能记忆与进化
|
||||
- 需要官方 OpenClaw 插件
|
||||
- 企业级部署
|
||||
|
||||
**集成步骤:**
|
||||
1. 使用官方 OpenClaw 插件
|
||||
2. 配置 MemOS Cloud API
|
||||
3. 或自托管 Docker 部署
|
||||
|
||||
---
|
||||
|
||||
## 十一、技术趋势分析
|
||||
|
||||
### 11.1 记忆系统演进
|
||||
|
||||
| 阶段 | 特征 | 代表项目 |
|
||||
|------|------|----------|
|
||||
| **v1.0** | 简单向量存储 | 传统 RAG |
|
||||
| **v2.0** | 图结构记忆 | MemOS |
|
||||
| **v3.0** | 主动记忆 + 技能进化 | memU, MemOS 2.0 |
|
||||
|
||||
### 11.2 核心技术方向
|
||||
|
||||
1. **主动记忆 (Proactive Memory)**
|
||||
- 24/7 持续学习
|
||||
- 用户意图预测
|
||||
- 主动上下文加载
|
||||
|
||||
2. **技能进化 (Skill Evolution)**
|
||||
- 跨任务技能复用
|
||||
- 技能记忆存储
|
||||
- 自动化技能提升
|
||||
|
||||
3. **多模态统一**
|
||||
- 文本/图像/工具痕迹
|
||||
- 人格化记忆
|
||||
- 知识图谱集成
|
||||
|
||||
### 11.3 OpenClaw 生态位置
|
||||
|
||||
```
|
||||
OpenClaw 生态
|
||||
├── Core: 对话管理、工具调用
|
||||
├── Memory: memU / MemOS ← 人格化/记忆
|
||||
├── Skills: MCP 协议
|
||||
└── Channels: 多平台接入
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十二、学习与实践计划
|
||||
|
||||
### 12.1 短期计划 (1-2周)
|
||||
|
||||
| 任务 | 目标 | 优先级 |
|
||||
|------|------|--------|
|
||||
| 测试 memU 云端版 | 理解主动记忆机制 | P0 |
|
||||
| 申请 MemOS Cloud API | 评估多知识库功能 | P0 |
|
||||
| 阅读 MemOS 论文 | 理解架构设计 | P1 |
|
||||
| 评估 Chitin 迁移 | 准备备选方案 | P2 |
|
||||
|
||||
### 12.2 中期计划 (1-3月)
|
||||
|
||||
| 任务 | 目标 | 优先级 |
|
||||
|------|------|--------|
|
||||
| 集成 memU 自托管版 | 替换/增强 Chitin | P0 |
|
||||
| 测试 MemOS OpenClaw 插件 | 官方集成方案 | P1 |
|
||||
| 实现技能记忆 | 跨会话技能进化 | P2 |
|
||||
|
||||
### 12.3 长期计划 (3-6月)
|
||||
|
||||
| 任务 | 目标 | 优先级 |
|
||||
|------|------|--------|
|
||||
| 多模态记忆集成 | 支持图像/文档 | P1 |
|
||||
| 企业级部署 | Docker/K8s 优化 | P2 |
|
||||
| 性能调优 | Token/延迟优化 | P2 |
|
||||
|
||||
---
|
||||
|
||||
## 十三、持续学习资源
|
||||
|
||||
### 13.1 官方资源
|
||||
|
||||
| 资源 | memU | MemOS |
|
||||
|------|------|-------|
|
||||
| **GitHub** | github.com/NevaMind-AI/memU | github.com/MemTensor/MemOS |
|
||||
| **官网** | memu.so | memos.openmem.net |
|
||||
| **文档** | memu.pro/docs | memos-docs.openmem.net |
|
||||
| **Discord** | discord.gg/memu | discord.gg/Txbx3gebZR |
|
||||
| **论文** | - | arxiv.org/abs/2507.03724 |
|
||||
|
||||
### 13.2 Awesome 资源
|
||||
|
||||
| 集合 | Stars | 内容 |
|
||||
|------|-------|------|
|
||||
| Awesome-AI-Memory | 292 | AI 记忆知识库 |
|
||||
| Awesome-Agent-Memory | 222 | Agent Memory 论文与系统 |
|
||||
|
||||
### 13.3 监控项目
|
||||
|
||||
| 项目 | Stars | 最后更新 | 关注理由 |
|
||||
|------|-------|----------|----------|
|
||||
| memU | 8.1k | Feb 6, 2026 | OpenClaw 替代 |
|
||||
| MemOS | 5.0k | Jan 30, 2026 | 官方 OpenClaw 插件 |
|
||||
| agentic-context-engine | 1.8k | Feb 6, 2026 | ACE 框架 |
|
||||
|
||||
---
|
||||
|
||||
## 十四、风险与对策
|
||||
|
||||
### 14.1 Chitin 风险
|
||||
|
||||
| 风险 | 等级 | 对策 |
|
||||
|------|------|------|
|
||||
| 仓库删除 | 🔴 高 | 评估 memU/MemOS 替代 |
|
||||
| 无官方更新 | 🟡 中 | 准备迁移方案 |
|
||||
| 功能有限 | 🟡 中 | 增强其他组件 |
|
||||
|
||||
### 14.2 新项目风险
|
||||
|
||||
| 风险 | 等级 | 对策 |
|
||||
|------|------|------|
|
||||
| 依赖外部服务 | 🟡 中 | 优先自托管 |
|
||||
| 复杂度增加 | 🟡 中 | 渐进式集成 |
|
||||
| 性能开销 | 🟢 低 | 监控与优化 |
|
||||
|
||||
### 14.3 备选方案
|
||||
|
||||
| 方案 | 优先级 | 切换条件 |
|
||||
|------|--------|----------|
|
||||
| 继续用 Chitin | 短期 | 新项目不稳定 |
|
||||
| 迁移到 memU | 中期 | 完成测试验证 |
|
||||
| 迁移到 MemOS | 长期 | 官方插件成熟 |
|
||||
|
||||
---
|
||||
|
||||
## 十五、Chitin 替代方案评估
|
||||
|
||||
### 15.1 为什么需要替代?
|
||||
|
||||
| 原因 | 影响 |
|
||||
|------|------|
|
||||
| Chitin 仓库删除 | 不再有官方更新 |
|
||||
| 功能有限 | 只能手动贡献洞察 |
|
||||
| 自动化程度低 | 需要额外脚本 |
|
||||
|
||||
### 15.2 替代方案对比
|
||||
|
||||
| 维度 | Chitin (当前) | memU | MemOS |
|
||||
|------|---------------|------|-------|
|
||||
| **开源状态** | 已删除 | ✅ 活跃 | ✅ 活跃 |
|
||||
| **OpenClaw 支持** | ✅ 原生 | ✅ 原生 | ✅ 原生 |
|
||||
| **自动化记忆** | ❌ 手动 | ✅ 自动 | ✅ 自动 |
|
||||
| **技能进化** | ❌ | ❌ | ✅ Skill Memory |
|
||||
| **部署复杂度** | 低 | 中 | 中 |
|
||||
| **Linux 兼容** | ✅ | ✅ | ✅ |
|
||||
| **主动记忆** | ❌ | ✅ 24/7 | ✅ Scheduler |
|
||||
| **多模态** | ❌ | ✅ | ✅ |
|
||||
|
||||
### 15.3 迁移建议
|
||||
|
||||
| 时间线 | 行动 | 优先级 |
|
||||
|--------|------|--------|
|
||||
| **短期 (1周)** | 测试 memU/MemOS 云端版 | P0 |
|
||||
| **中期 (1-3月)** | 集成 memU 自托管版 | P1 |
|
||||
| **长期 (3-6月)** | 评估 MemOS 官方插件 | P2 |
|
||||
|
||||
---
|
||||
|
||||
## 十六、持续学习计划
|
||||
|
||||
### 16.1 每月任务
|
||||
|
||||
- [ ] 检查 GitHub Trending (`agent-memory` topic)
|
||||
- [ ] 评估新项目是否值得尝试
|
||||
- [ ] 更新本文档
|
||||
- [ ] 贡献 2-3 个新洞察
|
||||
|
||||
### 16.2 关注项目
|
||||
|
||||
| 项目 | URL | 关注理由 |
|
||||
|------|-----|----------|
|
||||
| memU | github.com/NevaMind-AI/memU | OpenClaw 原生支持 |
|
||||
| MemOS | github.com/MemTensor/MemOS | 官方 OpenClaw 插件 |
|
||||
| ACE | github.com/kayba-ai/agentic-context-engine | 从经验学习 |
|
||||
|
||||
---
|
||||
|
||||
*笔记版本: v2.0 (2026-02-07) - 重大更新: memU/MemOS 深度分析*
|
||||
*维护者: 2号机 (守护者)*
|
||||
+245
@@ -0,0 +1,245 @@
|
||||
# 1号机 (青龙) 资料库
|
||||
|
||||
## 基本信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| **代号** | 青龙 🐉 |
|
||||
| **编号** | 1号机 |
|
||||
| **主机名** | yhh6788-B150-HD3 |
|
||||
| **IP 地址** | 192.168.0.31 |
|
||||
| **系统** | Ubuntu 25.10 (Questing Quokka) |
|
||||
| **内核** | Linux 6.17.0-12-generic |
|
||||
| **SSH 访问** | root@192.168.0.31 (密码: 3efvVGY&) |
|
||||
|
||||
---
|
||||
|
||||
## OpenClaw 配置
|
||||
|
||||
### 版本信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| **版本** | v2026.2.1 (落后 94 提交) |
|
||||
| **Gateway** | ws://127.0.0.1:18789 |
|
||||
| **Gateway Token** | yhh6788-B150-HD3 |
|
||||
| **更新状态** | 需要执行 `openclaw update` |
|
||||
|
||||
### 模型配置
|
||||
|
||||
| Provider | API | 模型 | 备注 |
|
||||
|----------|-----|------|------|
|
||||
| minimax | https://api.minimaxi.com/v1 | minimax-m2.1, embo-01 | 主力模型 |
|
||||
| deepseek | https://api.deepseek.com/v1 | deepseek-chat | 备用模型 |
|
||||
|
||||
### 通道配置
|
||||
|
||||
| 通道 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| Telegram | ✅ OK | @dctc_01_bot |
|
||||
|
||||
### 内存配置
|
||||
|
||||
| 项目 | 状态 |
|
||||
|------|------|
|
||||
| Plugin | memory-core |
|
||||
| Vector | ⚠️ 正在配置 |
|
||||
| FTS | ✅ Ready |
|
||||
| Cache | ✅ On |
|
||||
|
||||
---
|
||||
|
||||
## Ollama 配置
|
||||
|
||||
### 服务状态
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| **版本** | 0.15.4 |
|
||||
| **监听地址** | [::]:11434 |
|
||||
| **服务状态** | ✅ 运行中 |
|
||||
| **启动时间** | 2026-02-05 00:01 |
|
||||
|
||||
### 模型列表
|
||||
|
||||
| 模型 | 状态 | 大小 | 用途 |
|
||||
|------|------|------|------|
|
||||
| mxbai-embed-large:latest | ⏳ 下载中 | ~669MB | 向量化搜索 |
|
||||
|
||||
### 启动命令
|
||||
|
||||
```bash
|
||||
export OLLAMA_HOST=0.0.0.0:11434
|
||||
nohup ollama serve > /tmp/ollama.log 2>&1 &
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 功能清单
|
||||
|
||||
### 核心功能
|
||||
|
||||
- ✅ CLI 命令执行
|
||||
- ✅ 文件读写
|
||||
- ✅ 记忆管理
|
||||
- ✅ 定时任务
|
||||
- ✅ 消息发送
|
||||
- ✅ Telegram 机器人
|
||||
|
||||
### 当前状态
|
||||
|
||||
| 功能 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| 向量化服务 | ⚠️ 配置中 | 正在安装 Ollama |
|
||||
| Gateway 更新 | ❌ 需更新 | 落后 94 提交 |
|
||||
|
||||
---
|
||||
|
||||
## 程序架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ OpenClaw Gateway │
|
||||
│ - WebSocket 控制平面 (端口 18789) │
|
||||
│ - 通道连接管理 │
|
||||
└────────────────────────┬────────────────────────────────┘
|
||||
│
|
||||
┌────────────────┼────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌─────────┐ ┌─────────┐ ┌─────────┐
|
||||
│Telegram │ │ Ollama │ │ Memory │
|
||||
│ Bot │ │ :11434 │ │ Plugin │
|
||||
└─────────┘ └─────────┘ └─────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 维护记录
|
||||
|
||||
### 2026-02-05
|
||||
|
||||
| 时间 | 操作者 | 操作 | 说明 |
|
||||
|------|--------|------|------|
|
||||
| 00:01 | 2号机 | 启动 Ollama | 解决崩溃问题 |
|
||||
| 00:06 | 2号机 | 拉取 embedding 模型 | mxbai-embed-large |
|
||||
| 00:30 | 2号机 | 创建资料库 | 记录基本信息 |
|
||||
|
||||
### 已知问题
|
||||
|
||||
| 问题 | 严重度 | 说明 |
|
||||
|------|--------|------|
|
||||
| Git 落后 | 🔴 高 | 需要 `openclaw update` |
|
||||
| Gateway service stopped | 🟡 中 | pid 654909 (activating) |
|
||||
| Reverse proxy headers | 🟡 中 | 未配置 trustedProxies |
|
||||
| Gateway token 较短 | 🟡 中 | 建议更换更长 token |
|
||||
|
||||
---
|
||||
|
||||
## 机器人网络
|
||||
|
||||
| 机器 | 代号 | IP | 状态 |
|
||||
|------|------|-----|------|
|
||||
| 2号机 | 守护者 🛡️ | 192.168.0.32 | ✅ 在线 |
|
||||
| 1号机 | 青龙 🐉 | 192.168.0.31 | ✅ 在线 |
|
||||
|
||||
---
|
||||
|
||||
## 辅助系统
|
||||
|
||||
| 系统 | IP | 功能 |
|
||||
|------|-----|------|
|
||||
| auto | 192.168.0.99 | 自动化挂机定时执行程序 |
|
||||
| 共享文件夹 | /share/temp1/ | 文件交互 |
|
||||
|
||||
---
|
||||
|
||||
## 工作环境
|
||||
|
||||
| 设备 | IP | 角色 |
|
||||
|------|-----|------|
|
||||
| 阿拉蕾 👾 | 192.168.0.66 | Ollama/向量服务 |
|
||||
|
||||
| 机器 | 命令 |
|
||||
|------|------|
|
||||
| 1号机 (青龙) | `sshpass -p '3efvVGY&' ssh root@192.168.0.31` |
|
||||
|
||||
---
|
||||
|
||||
## 下一步维护
|
||||
|
||||
1. ✅ Ollama 服务 - 已启动
|
||||
2. ⏳ 向量模型 - 下载中
|
||||
3. ⏳ OpenClaw 更新 - 待执行
|
||||
4. ⏳ Gateway token - 待修复
|
||||
|
||||
---
|
||||
|
||||
## 资料库位置
|
||||
|
||||
| 类型 | 位置 |
|
||||
|------|------|
|
||||
| 运维文档 | ~/doc/ |
|
||||
| 本机资料 | ~/doc/BOTS/1号机.md |
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-05 00:22*
|
||||
*维护者: 2号机 (守护者)*
|
||||
|
||||
### 2026-02-05 - 向量化配置
|
||||
|
||||
| 时间 | 操作 | 说明 |
|
||||
|------|------|------|
|
||||
| 00:25 | 2号机 | 接管下载 mxbai-embed-large |
|
||||
| 00:26 | 2号机 | 模型下载完成 |
|
||||
| 00:30 | 2号机 | 配置 Ollama provider |
|
||||
| 00:38 | 2号机 | 重启 Gateway |
|
||||
| 00:46 | 2号机 | 向量服务 Ready |
|
||||
|
||||
### 经验教训
|
||||
|
||||
| 问题 | 教训 | 解决方案 |
|
||||
|------|------|----------|
|
||||
| Ollama 进程崩溃 | 后台运行需用 nohup | `nohup ollama serve > /tmp/ollama.log 2>&1 &` |
|
||||
| 模型下载中断 | 需检查下载状态 | `curl http://localhost:11434/api/tags` |
|
||||
| Gateway 启动超时 | systemd 服务配置问题 | 进程已启动,可继续使用 |
|
||||
| SSH 连接中断 | 长时间操作需监控 | 使用进程管理跟踪状态 |
|
||||
|
||||
### 2026-02-05 - Telegram 连接修复
|
||||
|
||||
| 时间 | 问题 | 修复 |
|
||||
|------|------|------|
|
||||
| 01:07 | 代理未运行导致 Telegram 无法连接 | 移除代理配置,改为直接连接 |
|
||||
|
||||
### 经验教训
|
||||
|
||||
| 问题 | 教训 | 解决方案 |
|
||||
|------|------|----------|
|
||||
| 代理配置导致 Telegram 不可用 | 青龙在国内网络可直接连接 Telegram,无需代理 | 移除 override.conf 中的代理配置 |
|
||||
|
||||
|
||||
### 本地模型用途定位
|
||||
|
||||
| 模型 | 用途 | 说明 |
|
||||
|------|------|------|
|
||||
| mxbai-embed-large | ✅ 向量化 | 本地 embedding 服务 |
|
||||
| (无对话模型) | - | 云端 MiniMax 负责对话 |
|
||||
|
||||
### 策略说明
|
||||
|
||||
- **向量化**: 青龙本地运行 mxbai-embed-large
|
||||
- **对话**: 统一使用云端 MiniMax (minimax-m2.1)
|
||||
- **优势**: 节省资源,专注向量化服务
|
||||
|
||||
|
||||
### 模型架构确认
|
||||
|
||||
| 功能 | 模型 | 来源 |
|
||||
|------|------|------|
|
||||
| 对话/分析 | minimax-m2.1 | minimax.com (云端) |
|
||||
| 向量化 | mxbai-embed-large | 本地 Ollama |
|
||||
|
||||
### 结论
|
||||
|
||||
✅ 青龙是综合性应用机器人,架构已完善
|
||||
✅ 无需添加额外模型
|
||||
@@ -0,0 +1,212 @@
|
||||
# 2号机 Telegram 机器人故障报告
|
||||
|
||||
## 基本信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| **日期** | 2026-02-05 |
|
||||
| **时间** | 08:15 - 08:50 (约35分钟) |
|
||||
| **故障现象** | Telegram 机器人 @dctc_02_bot 无响应 |
|
||||
| **严重程度** | 🔴 高 |
|
||||
|
||||
---
|
||||
|
||||
## 故障经过
|
||||
|
||||
### 08:15 - 首次报告
|
||||
- 用户报告 Telegram 机器人无响应
|
||||
- 检查发现配置错误:`memorySearch.provider: "ollama"`
|
||||
|
||||
### 08:21 - 第二次修复尝试
|
||||
- 移除 `noProxy` 配置键
|
||||
- 服务重启成功但仍未回复
|
||||
|
||||
### 08:28 - 深度诊断
|
||||
- SSH 登录 2号机深度分析
|
||||
- 发现 memory 系统尝试使用 OpenAI embeddings(中国不可用)
|
||||
|
||||
### 08:32 - 尝试切换 .31 向量化服务
|
||||
- 配置 `remote.baseUrl: "http://192.168.0.31:11434/v1"`
|
||||
- 触发新错误:`memorySearch.provider: Invalid input`
|
||||
|
||||
### 08:35 - 发现 2号机有本地 Ollama
|
||||
- `ollama list` 显示有 `nomic-embed-text:latest` 和 `mxbai-embed-large:latest`
|
||||
- 切换到本地服务
|
||||
|
||||
### 08:38 - 会话锁问题
|
||||
- 发现锁文件:`e93cef24-f3c1-4c4d-a874-8a9b227634bd.jsonl.lock`
|
||||
- 清理锁文件并重置会话状态
|
||||
|
||||
### 08:43 - Provider 根本原因
|
||||
- **发现核心问题**:OpenClaw 不支持 `provider: "ollama"`
|
||||
- **必须使用 `provider: "openai"`**
|
||||
|
||||
### 08:50 - 最终修复
|
||||
- 将 `provider` 改为 `"openai"`
|
||||
- 服务重启成功
|
||||
- ✅ 机器人恢复正常
|
||||
|
||||
---
|
||||
|
||||
## 根本原因
|
||||
|
||||
### 直接原因
|
||||
```
|
||||
agents.defaults.memorySearch.provider: "ollama" ← 无效值
|
||||
```
|
||||
|
||||
### 根本原因
|
||||
1. **OpenClaw 配置验证过于严格**
|
||||
- `memorySearch.provider` 只支持 `"openai"` 值
|
||||
- `"ollama"` 被标记为 "Invalid input"
|
||||
|
||||
2. **OpenClaw 自动重新生成配置**
|
||||
- 即使手动移除 memorySearch,OpenClaw 仍会重新生成
|
||||
- 使用旧值 `"ollama"` 导致持续报错
|
||||
|
||||
3. **1号机 vs 2号机 配置差异**
|
||||
- 1号机:`provider: "openai"` ✅ 正常工作
|
||||
- 2号机:`provider: "ollama"` ❌ 无效
|
||||
|
||||
---
|
||||
|
||||
## 解决过程
|
||||
|
||||
### 尝试1:移除 noProxy
|
||||
```bash
|
||||
python3 -c "c['models']['providers']['openai'].pop('noProxy', None)"
|
||||
systemctl --user restart openclaw-gateway.service
|
||||
```
|
||||
结果:❌ 无效
|
||||
|
||||
### 尝试2:移除 memorySearch
|
||||
```bash
|
||||
python3 -c "c['agents']['defaults'].pop('memorySearch', None)"
|
||||
systemctl --user restart openclaw-gateway.service
|
||||
```
|
||||
结果:❌ OpenClaw 重新生成
|
||||
|
||||
### 尝试3:切换 .31 向量化
|
||||
```bash
|
||||
c['agents']['defaults']['memorySearch']['remote']['baseUrl'] = 'http://192.168.0.31:11434/v1'
|
||||
```
|
||||
结果:❌ provider 错误
|
||||
|
||||
### 尝试4:清理会话锁
|
||||
```bash
|
||||
rm -f ~/.openclaw/agents/main/sessions/*.lock
|
||||
python3 -c "d['active'] = None; d['sessions'] = {}"
|
||||
```
|
||||
结果:✅ 清理成功,但未解决核心问题
|
||||
|
||||
### 尝试5:修复 Provider(最终方案)
|
||||
```bash
|
||||
c['agents']['defaults']['memorySearch']['provider'] = 'openai'
|
||||
systemctl --user restart openclaw-gateway.service
|
||||
```
|
||||
结果:✅ 成功
|
||||
|
||||
---
|
||||
|
||||
## 诊断命令
|
||||
|
||||
### 服务状态检查
|
||||
```bash
|
||||
systemctl --user status openclaw-gateway.service
|
||||
```
|
||||
|
||||
### 日志分析
|
||||
```bash
|
||||
tail -100 /tmp/openclaw/openclaw-2026-02-05.log
|
||||
```
|
||||
|
||||
### 配置检查
|
||||
```bash
|
||||
cat ~/.openclaw/openclaw.json | python3 -c "import sys,json; c=json.load(sys.stdin); print(json.dumps(c.get('agents',{}).get('defaults',{}).get('memorySearch', {}), indent=2))"
|
||||
```
|
||||
|
||||
### 会话锁检查
|
||||
```bash
|
||||
ls -la ~/.openclaw/agents/main/sessions/*.lock
|
||||
cat ~/.openclaw/agents/main/sessions/*.lock
|
||||
```
|
||||
|
||||
### Provider 修复
|
||||
```bash
|
||||
python3 -c "import json; c=json.load(open('/root/.openclaw/openclaw.json')); c['agents']['defaults']['memorySearch']['provider'] = 'openai'; open('/root/.openclaw/openclaw.json','w').write(json.dumps(c, indent=2))"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 经验教训
|
||||
|
||||
### 1. OpenClaw 配置验证严格
|
||||
- 很多常见配置键不受支持
|
||||
- 必须使用 `openclaw doctor --fix` 自动清理
|
||||
|
||||
### 2. Provider 值限制
|
||||
- `memorySearch.provider` 只支持 `"openai"`
|
||||
- `"ollama"` 不被识别为有效值
|
||||
|
||||
### 3. 1号机 vs 2号机 必须一致
|
||||
- 两台机器的配置应该保持一致
|
||||
- 发现问题时优先对比配置差异
|
||||
|
||||
### 4. 会话锁会导致死锁
|
||||
- 锁文件存在但会话未激活时需要清理
|
||||
- `rm -f *.lock` + 重置 sessions.json
|
||||
|
||||
### 5. 外部监控不会修改配置
|
||||
- Crontab、OpenClaw cron、Systemd timers 都不会修改配置
|
||||
- 配置变化来自 OpenClaw 内部行为
|
||||
|
||||
---
|
||||
|
||||
## 最终配置
|
||||
|
||||
```json
|
||||
{
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"memorySearch": {
|
||||
"provider": "openai",
|
||||
"model": "mxbai-embed-large:latest",
|
||||
"remote": {
|
||||
"baseUrl": "http://localhost:11434/v1",
|
||||
"apiKey": "ollama-local"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 相关文件
|
||||
|
||||
| 文件 | 路径 |
|
||||
|------|------|
|
||||
| 主配置 | ~/.openclaw/openclaw.json |
|
||||
| 机器人档案 | ~/doc/BOTS/2号机.md |
|
||||
| 故障记录 | ~/doc/BOTS/2号机-2026-02-05-Telegram故障.md |
|
||||
| 系统日志 | /tmp/openclaw/openclaw-2026-02-05.log |
|
||||
|
||||
---
|
||||
|
||||
## 后续建议
|
||||
|
||||
### 立即行动
|
||||
- [ ] 验证 2号机 Telegram 机器人稳定性
|
||||
- [ ] 检查其他配置是否也有类似问题
|
||||
|
||||
### 长期改进
|
||||
- [ ] 创建配置检查脚本,定期验证配置有效性
|
||||
- [ ] 文档化所有有效的 provider 值
|
||||
- [ ] 建立 1号机 vs 2号机 配置对比机制
|
||||
|
||||
---
|
||||
|
||||
*创建时间: 2026-02-05 09:10*
|
||||
*创建者: OpenClaw Assistant*
|
||||
*最后更新: 2026-02-05 09:10*
|
||||
+278
@@ -0,0 +1,278 @@
|
||||
# 2号机 (守护者) 资料库
|
||||
|
||||
## 基本信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| **代号** | 守护者 🛡️ |
|
||||
| **编号** | 2号机 |
|
||||
| **主机名** | yh6788-ThinkPad-X230 |
|
||||
| **IP 地址** | 192.168.0.32 |
|
||||
| **硬件** | ThinkPad X230 (Intel Core i5-3320M, 8GB RAM) |
|
||||
| **系统** | Ubuntu 25.10 (Questing Quokka) |
|
||||
| **内核** | Linux 6.17.0-12-generic |
|
||||
|
||||
---
|
||||
|
||||
## 向量服务连接
|
||||
|
||||
| 目标 | 地址 | 用途 |
|
||||
|------|------|------|
|
||||
| 本地 | localhost:11434 | Ollama 向量 (主力) |
|
||||
| 阿拉蕾 👾 | 192.168.0.66:11434 | Ollama 向量 (备用) |
|
||||
|
||||
---
|
||||
|
||||
## 机器人网络
|
||||
|
||||
| 机器 | 代号 | IP | 状态 |
|
||||
|------|------|-----|------|
|
||||
| 2号机 | 守护者 🛡️ | 192.168.0.32 | ✅ 在线 |
|
||||
| 1号机 | 青龙 🐉 | 192.168.0.31 | ✅ 在线 |
|
||||
|
||||
---
|
||||
|
||||
## 辅助系统
|
||||
|
||||
| 系统 | IP | 功能 |
|
||||
|------|-----|------|
|
||||
| auto | 192.168.0.99 | 自动化挂机定时执行程序 |
|
||||
| 共享文件夹 | /share/temp1/ | 文件交互 |
|
||||
|
||||
---
|
||||
|
||||
## 工作环境
|
||||
|
||||
| 设备 | IP | 角色 |
|
||||
|------|-----|------|
|
||||
| 阿拉蕾 👾 | 192.168.0.66 | Ollama/向量服务 |
|
||||
|
||||
---
|
||||
|
||||
## OpenClaw 配置
|
||||
|
||||
### 版本信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| **版本** | v2026.2.2-3 |
|
||||
| **Gateway** | ws://127.0.0.1:18789 |
|
||||
| **Gateway Token** | yh6788-ThinkPad-X230 |
|
||||
| **Channel** | stable (default) |
|
||||
|
||||
### 模型配置
|
||||
|
||||
| Provider | API | 模型 | 备注 |
|
||||
|----------|-----|------|------|
|
||||
| minimax | https://api.minimaxi.com/v1 | minimax-m2.1, embo-01 | 主力模型 |
|
||||
| deepseek | https://api.deepseek.com/v1 | deepseek-chat | 备用模型 |
|
||||
| ollama | http://localhost:11434/v1 | llama3:latest, mxbai-embed-large:latest | 本地模型 |
|
||||
|
||||
### 通道配置
|
||||
|
||||
| 通道 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| Telegram | ✅ OK | @dctc_02_bot |
|
||||
|
||||
### 内存配置
|
||||
|
||||
| 项目 | 状态 |
|
||||
|------|------|
|
||||
| Plugin | memory-core |
|
||||
| Vector | ✅ Ready (mxbai-embed-large) |
|
||||
| FTS | ✅ Ready |
|
||||
| Cache | ✅ On |
|
||||
|
||||
---
|
||||
|
||||
## 功能清单
|
||||
|
||||
### 核心功能
|
||||
|
||||
- ✅ CLI 命令执行
|
||||
- ✅ 文件读写
|
||||
- ✅ 记忆管理 (memory_search/memory_get)
|
||||
- ✅ 定时任务 (cron)
|
||||
- ✅ 消息发送 (message)
|
||||
- ✅ 浏览器控制 (browser)
|
||||
- ✅ Canvas 可视化
|
||||
- ✅ TTS 语音合成
|
||||
|
||||
### 通信能力
|
||||
|
||||
- Telegram 机器人
|
||||
- WebSocket Gateway
|
||||
|
||||
### 运维工具
|
||||
|
||||
- openclaw status (状态检查)
|
||||
- openclaw doctor (健康诊断)
|
||||
- openclaw logs (日志查看)
|
||||
- openclaw update (版本更新)
|
||||
|
||||
---
|
||||
|
||||
## 程序架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ OpenClaw Gateway │
|
||||
│ - WebSocket 控制平面 (端口 18789) │
|
||||
│ - 通道连接管理 │
|
||||
│ - 消息路由 │
|
||||
└────────────────────────┬────────────────────────────────┘
|
||||
│
|
||||
┌────────────────┼────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌─────────┐ ┌─────────┐ ┌─────────┐
|
||||
│Telegram │ │ Nodes │ │ Memory │
|
||||
│ Bot │ │ 管理 │ │ Plugin │
|
||||
└─────────┘ └─────────┘ └─────────┘
|
||||
```
|
||||
|
||||
### 目录结构
|
||||
|
||||
```
|
||||
~/.openclaw/
|
||||
├── openclaw.json # 主配置文件
|
||||
├── agents/
|
||||
│ └── main/
|
||||
│ └── agent/
|
||||
│ ├── models.json
|
||||
│ └── config.json
|
||||
├── workspace/ # 工作空间
|
||||
├── canvas/ # Canvas 文件
|
||||
└── extensions/ # 扩展插件
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 维护记录
|
||||
|
||||
### 2026-02-04
|
||||
|
||||
| 时间 | 操作 | 说明 |
|
||||
|------|------|------|
|
||||
| 11:05 | 配置初始化 | 完成 wizard 和 doctor |
|
||||
| 13:43 | 知识库整理 | 创建 ~/doc/ 资料库 |
|
||||
| 23:11 | 大任务整理 | 整理 ~/doc 资料库 |
|
||||
| 23:57 | 安装 sshpass | 用于 SSH 连接 |
|
||||
| 23:52 | 监控 1号机 | 接管安装 Ollama |
|
||||
|
||||
### 技术决策
|
||||
|
||||
| 决策 | 内容 | 理由 |
|
||||
|------|------|------|
|
||||
| 主力模型 | MiniMax | 速度快,适合日常任务 |
|
||||
| 备用模型 | DeepSeek | 推理能力强 |
|
||||
| 向量模型 | mxbai-embed-large | 本地运行,CPU 友好 |
|
||||
|
||||
---
|
||||
|
||||
## 已知问题
|
||||
|
||||
| 问题 | 严重度 | 说明 |
|
||||
|------|--------|------|
|
||||
| Reverse proxy headers | WARN | 未配置 trustedProxies |
|
||||
| Gateway token 长度 | INFO | 建议使用更长的 token |
|
||||
|
||||
---
|
||||
|
||||
## 资料库位置
|
||||
|
||||
| 类型 | 位置 |
|
||||
|------|------|
|
||||
| 运维文档 | ~/doc/ |
|
||||
| 记忆文件 | ~/.openclaw/workspace/memory/ |
|
||||
| 每日记录 | ~/.openclaw/workspace/memory/YYYY-MM-DD.md |
|
||||
| 长期记忆 | ~/.openclaw/workspace/MEMORY.md |
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-05 00:22*
|
||||
*维护者: 2号机 (守护者)*
|
||||
|
||||
### 2026-02-05 - 青龙向量配置
|
||||
|
||||
| 时间 | 操作 | 说明 |
|
||||
|------|------|------|
|
||||
| 00:21 | - | 网络结构更新 |
|
||||
| 00:25 | 2号机 | 接管青龙 Ollama 配置 |
|
||||
| 00:26 | 2号机 | mxbai-embed-large 下载完成 |
|
||||
| 00:30 | 2号机 | 添加 Ollama provider 配置 |
|
||||
| 00:38 | 2号机 | 重启青龙 Gateway |
|
||||
| 00:46 | 2号机 | 青龙向量服务 Ready |
|
||||
|
||||
### 经验教训
|
||||
|
||||
| 问题 | 教训 | 解决方案 |
|
||||
|------|------|----------|
|
||||
| Ollama 进程崩溃 | 后台运行需用 nohup | `nohup ollama serve > /tmp/ollama.log 2>&1 &` |
|
||||
| 模型下载中断 | 需检查下载状态 | `curl http://localhost:11434/api/tags` |
|
||||
| Gateway 启动超时 | systemd 服务配置问题 | 进程已启动,可继续使用 |
|
||||
| SSH 连接中断 | 长时间操作需监控 | 使用进程管理跟踪状态 |
|
||||
|
||||
---
|
||||
|
||||
## 知识沉淀
|
||||
|
||||
### Ollama 运维命令
|
||||
|
||||
```bash
|
||||
# 启动服务
|
||||
export OLLAMA_HOST=0.0.0.0:11434
|
||||
nohup ollama serve > /tmp/ollama.log 2>&1 &
|
||||
|
||||
# 检查状态
|
||||
curl http://localhost:11434/api/tags
|
||||
|
||||
# 下载模型
|
||||
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
|
||||
ollama pull mxbai-embed-large:latest
|
||||
|
||||
# 查看日志
|
||||
tail -f /tmp/ollama.log
|
||||
```
|
||||
|
||||
### SSH 运维命令
|
||||
|
||||
```bash
|
||||
# 连接青龙
|
||||
sshpass -p '3efvVGY&' ssh root@192.168.0.31
|
||||
|
||||
# 远程执行命令
|
||||
sshpass -p '3efvVGY&' ssh root@192.168.0.31 "openclaw status"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2026-02-05 Telegram 机器人故障
|
||||
|
||||
| 时间 | 操作 | 说明 |
|
||||
|------|------|------|
|
||||
| 08:15 | 故障报告 | Telegram 机器人 @dctc_02_bot 无响应 |
|
||||
| 08:21 | 移除 noProxy | 移除无效配置键 |
|
||||
| 08:28 | 深度诊断 | 发现 memory 系统使用 OpenAI embeddings |
|
||||
| 08:32 | 切换 .31 | 配置远程向量化服务 |
|
||||
| 08:35 | 本地 Ollama | 发现 2号机有本地向量模型 |
|
||||
| 08:38 | 清理锁文件 | 删除会话锁,重置状态 |
|
||||
| 08:43 | Provider 修复 | 发现核心问题:provider 值限制 |
|
||||
| 08:50 | ✅ 修复成功 | provider 改为 openai,机器人恢复 |
|
||||
|
||||
### 故障根因
|
||||
- **核心问题**: 只支持
|
||||
- **错误值**: 被标记为无效输入
|
||||
- **解决方案**:将 provider 改为
|
||||
|
||||
### 经验教训
|
||||
1. OpenClaw 配置验证非常严格
|
||||
2. 1号机 vs 2号机 必须配置一致
|
||||
3. 外部监控不会修改配置(来自 OpenClaw 内部行为)
|
||||
|
||||
### 相关文档
|
||||
- 详细记录:
|
||||
|
||||
### 2026-02-05 - nomic-embed-text 稳定性测试
|
||||
- 时间:09:32
|
||||
- 结果:✅ 测试通过,机器人反馈正常
|
||||
- 模型:nomic-embed-text:latest (274 MB)
|
||||
@@ -0,0 +1,208 @@
|
||||
# OpenClaw CLI 命令参考
|
||||
|
||||
## 常用命令速查
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `openclaw status` | 基本状态检查 |
|
||||
| `openclaw status --all` | 完整诊断(可分享) |
|
||||
| `openclaw status --deep` | 深度检测(探测通道) |
|
||||
| `openclaw doctor` | 健康检查 + 自动修复 |
|
||||
| `openclaw doctor --fix` | 自动修复配置问题 |
|
||||
| `openclaw logs --follow` | 实时日志 |
|
||||
| `openclaw gateway status` | Gateway 服务状态 |
|
||||
| `openclaw gateway restart` | 重启 Gateway |
|
||||
|
||||
## config - 配置管理
|
||||
|
||||
```bash
|
||||
# 获取配置
|
||||
openclaw config get agents.defaults.workspace
|
||||
openclaw config get agents.list[0].id
|
||||
|
||||
# 设置配置
|
||||
openclaw config set browser.executablePath "/usr/bin/google-chrome"
|
||||
openclaw config set agents.defaults.heartbeat.every "2h"
|
||||
openclaw config set gateway.port 19001 --json
|
||||
|
||||
# 删除配置
|
||||
openclaw config unset tools.web.search.apiKey
|
||||
```
|
||||
|
||||
## gateway - Gateway 管理
|
||||
|
||||
### 运行 Gateway
|
||||
```bash
|
||||
openclaw gateway # 前台运行
|
||||
openclaw gateway run # 前台运行(显式)
|
||||
openclaw gateway --verbose # 详细日志
|
||||
```
|
||||
|
||||
### 服务管理
|
||||
```bash
|
||||
openclaw gateway install # 安装服务
|
||||
openclaw gateway start # 启动服务
|
||||
openclaw gateway stop # 停止服务
|
||||
openclaw gateway restart # 重启服务
|
||||
openclaw gateway uninstall # 卸载服务
|
||||
```
|
||||
|
||||
### 查询状态
|
||||
```bash
|
||||
openclaw gateway status # 服务状态 + RPC 探测
|
||||
openclaw gateway health # 健康检查
|
||||
openclaw gateway probe # 发现所有 Gateway
|
||||
openclaw gateway discover # Bonjour 发现
|
||||
```
|
||||
|
||||
### 常用选项
|
||||
```bash
|
||||
--port <port> # WebSocket 端口(默认 18789)
|
||||
--bind <mode> # 绑定模式: loopback|lan|tailnet|auto|custom
|
||||
--token <token> # 认证 Token
|
||||
--verbose # 详细日志
|
||||
--allow-unconfigured # 允许无配置启动
|
||||
```
|
||||
|
||||
## status - 状态诊断
|
||||
|
||||
```bash
|
||||
openclaw status # 基本状态
|
||||
openclaw status --all # 完整诊断(可粘贴分享)
|
||||
openclaw status --deep # 深度检测(探测通道)
|
||||
openclaw status --usage # 显示模型用量
|
||||
```
|
||||
|
||||
## doctor - 健康检查
|
||||
|
||||
```bash
|
||||
openclaw doctor # 检查问题
|
||||
openclaw doctor --repair # 自动修复
|
||||
openclaw doctor --fix # 自动修复(别名)
|
||||
openclaw doctor --deep # 深度扫描
|
||||
```
|
||||
|
||||
## logs - 日志查看
|
||||
|
||||
```bash
|
||||
openclaw logs --follow # 实时日志
|
||||
openclaw logs --limit 200 # 最近 200 行
|
||||
openclaw logs --json # JSON 格式输出
|
||||
openclaw logs --plain # 纯文本格式
|
||||
openclaw logs --no-color # 禁用颜色
|
||||
```
|
||||
|
||||
## channels - 通道管理
|
||||
|
||||
```bash
|
||||
openclaw channels list # 列出已配置通道
|
||||
openclaw channels status # 通道状态
|
||||
openclaw channels status --probe # 深度探测
|
||||
openclaw channels logs # 通道日志
|
||||
openclaw channels login # 登录通道(WhatsApp)
|
||||
openclaw channels logout # 登出通道
|
||||
```
|
||||
|
||||
## models - 模型管理
|
||||
|
||||
```bash
|
||||
openclaw models list # 列出可用模型
|
||||
openclaw models status # 模型状态 + 认证信息
|
||||
openclaw models scan # 扫描新模型
|
||||
openclaw models set <model> # 设置默认模型
|
||||
```
|
||||
|
||||
## memory - 记忆管理
|
||||
|
||||
```bash
|
||||
openclaw memory status # 记忆索引状态
|
||||
openclaw memory index # 重新索引记忆文件
|
||||
openclaw memory search "<query>" # 语义搜索记忆
|
||||
```
|
||||
|
||||
## cron - 定时任务
|
||||
|
||||
```bash
|
||||
openclaw cron list # 列出定时任务
|
||||
openclaw cron add # 添加定时任务
|
||||
openclaw cron rm <id> # 删除定时任务
|
||||
openclaw cron enable <id> # 启用任务
|
||||
openclaw cron disable <id> # 禁用任务
|
||||
openclaw cron runs --id <id> # 查看任务运行记录
|
||||
```
|
||||
|
||||
## plugins - 插件管理
|
||||
|
||||
```bash
|
||||
openclaw plugins list # 列出插件
|
||||
openclaw plugins install <id> # 安装插件
|
||||
openclaw plugins enable <id> # 启用插件
|
||||
openclaw plugins disable <id> # 禁用插件
|
||||
openclaw plugins doctor # 插件诊断
|
||||
```
|
||||
|
||||
## skills - 技能管理
|
||||
|
||||
```bash
|
||||
openclaw skills list # 列出技能
|
||||
openclaw skills info <name> # 技能详情
|
||||
openclaw skills check # 检查技能就绪状态
|
||||
```
|
||||
|
||||
## pairing - 配对管理
|
||||
|
||||
```bash
|
||||
openclaw pairing list <channel> # 列出待配对请求
|
||||
openclaw pairing approve <channel> <code> # 批准配对
|
||||
```
|
||||
|
||||
## 完整命令树
|
||||
|
||||
```
|
||||
openclaw <command>
|
||||
setup # 初始化配置
|
||||
onboard # 向导式配置
|
||||
configure # 交互式配置
|
||||
config # 配置管理
|
||||
get/set/unset
|
||||
doctor # 健康检查
|
||||
reset # 重置本地状态
|
||||
uninstall # 卸载
|
||||
update # 更新
|
||||
channels # 通道管理
|
||||
skills # 技能管理
|
||||
plugins # 插件管理
|
||||
memory # 记忆管理
|
||||
message # 发送消息
|
||||
agent # 运行单次 agent
|
||||
agents # 多 agent 管理
|
||||
status # 状态诊断
|
||||
health # 健康检查
|
||||
sessions # 会话管理
|
||||
gateway # Gateway 管理
|
||||
logs # 日志查看
|
||||
system # 系统事件
|
||||
models # 模型管理
|
||||
cron # 定时任务
|
||||
nodes # 节点管理
|
||||
browser # 浏览器控制
|
||||
hooks # 钩子管理
|
||||
webhooks # Webhook 管理
|
||||
pairing # 配对管理
|
||||
sandbox # 沙箱管理
|
||||
tui # 终端 UI
|
||||
```
|
||||
|
||||
## 全局选项
|
||||
|
||||
| 选项 | 说明 |
|
||||
|------|------|
|
||||
| `--dev` | 开发模式(隔离状态) |
|
||||
| `--profile <name>` | 指定配置 profile |
|
||||
| `--json` | JSON 格式输出 |
|
||||
| `--no-color` | 禁用颜色 |
|
||||
| `-v`, `--version` | 显示版本 |
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-04*
|
||||
@@ -0,0 +1,434 @@
|
||||
# OpenClaw 协同部署指南
|
||||
|
||||
## 概述
|
||||
|
||||
协同部署涉及以下层面:
|
||||
1. **多 Gateway 部署** - 同一主机运行多个 Gateway 实例
|
||||
2. **多 Agent 部署** - 单 Gateway 管理多个隔离 Agent
|
||||
3. **节点(Nodes)管理** - 远程设备作为节点接入
|
||||
4. **远程访问** - SSH 隧道、Tailscale 等
|
||||
|
||||
---
|
||||
|
||||
## 一、多 Gateway 部署
|
||||
|
||||
### 何时需要多 Gateway
|
||||
|
||||
- 需要更强的隔离(如救援 Bot)
|
||||
- 需要冗余备份
|
||||
- 不同实例需要不同配置
|
||||
|
||||
### 隔离要求
|
||||
|
||||
| 配置项 | 说明 | 必需 |
|
||||
|--------|------|------|
|
||||
| `OPENCLAW_CONFIG_PATH` | 独立配置文件 | ✅ |
|
||||
| `OPENCLAW_STATE_DIR` | 独立状态目录 | ✅ |
|
||||
| `agents.defaults.workspace` | 独立工作目录 | ✅ |
|
||||
| `gateway.port` | 独立端口 | ✅ |
|
||||
|
||||
### 使用 Profile(推荐)
|
||||
|
||||
```bash
|
||||
# 主 Gateway
|
||||
openclaw --profile main setup
|
||||
openclaw --profile main gateway --port 18789
|
||||
openclaw --profile main gateway install
|
||||
|
||||
# 救援 Gateway
|
||||
openclaw --profile rescue setup
|
||||
openclaw --profile rescue gateway --port 19789
|
||||
openclaw --profile rescue gateway install
|
||||
```
|
||||
|
||||
### 手动配置示例
|
||||
|
||||
```bash
|
||||
# 主实例
|
||||
OPENCLAW_CONFIG_PATH=~/.openclaw/main.json \
|
||||
OPENCLAW_STATE_DIR=~/.openclaw-main \
|
||||
openclaw gateway --port 18789
|
||||
|
||||
# 救援实例
|
||||
OPENCLAW_CONFIG_PATH=~/.openclaw/rescue.json \
|
||||
OPENCLAW_STATE_DIR=~/.openclaw-rescue \
|
||||
openclaw gateway --port 19789
|
||||
```
|
||||
|
||||
### 端口映射(衍生端口)
|
||||
|
||||
基础端口 = `gateway.port`
|
||||
|
||||
| 服务 | 端口偏移 |
|
||||
|------|----------|
|
||||
| browser control | +2 |
|
||||
| canvas host | +4 |
|
||||
| CDP 端口范围 | +9 ~ +108 |
|
||||
|
||||
### 多 Gateway 状态检查
|
||||
|
||||
```bash
|
||||
openclaw --profile main status
|
||||
openclaw --profile rescue status
|
||||
openclaw --profile rescue browser status
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、多 Agent 部署
|
||||
|
||||
### 架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Gateway │
|
||||
│ - 消息路由 │
|
||||
│ - Agent 调度 │
|
||||
└────────────────────────┬────────────────────────────────┘
|
||||
│
|
||||
┌────────────────┼────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌─────────┐ ┌─────────┐ ┌─────────┐
|
||||
│ Agent 1 │ │ Agent 2 │ │ Agent 3 │
|
||||
│ 主助手 │ │ 家庭 Bot│ │ 工作 Bot│
|
||||
└─────────┘ └─────────┘ └─────────┘
|
||||
```
|
||||
|
||||
### 配置示例
|
||||
|
||||
```json5
|
||||
{
|
||||
"agents": {
|
||||
"list": [
|
||||
{
|
||||
"id": "main",
|
||||
"default": true,
|
||||
"name": "主助手",
|
||||
"workspace": "~/.openclaw/workspace",
|
||||
"sandbox": { "mode": "off" }
|
||||
},
|
||||
{
|
||||
"id": "family",
|
||||
"name": "家庭 Bot",
|
||||
"workspace": "~/.openclaw/workspace-family",
|
||||
"sandbox": {
|
||||
"mode": "all",
|
||||
"scope": "agent"
|
||||
},
|
||||
"tools": {
|
||||
"allow": ["read"],
|
||||
"deny": ["exec", "write", "edit"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "work",
|
||||
"name": "工作 Bot",
|
||||
"workspace": "~/.openclaw/workspace-work"
|
||||
}
|
||||
],
|
||||
"bindings": [
|
||||
{ "agentId": "main", "match": { "channel": "telegram" } },
|
||||
{ "agentId": "family", "match": { "channel": "whatsapp" } },
|
||||
{ "agentId": "work", "match": { "channel": "discord" } }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Agent 路由规则
|
||||
|
||||
匹配顺序:
|
||||
1. `match.peer`(具体对话)
|
||||
2. `match.guildId` / `match.teamId`
|
||||
3. `match.accountId`(具体账号)
|
||||
4. `match.accountId: "*"`(整个通道)
|
||||
5. 默认 Agent
|
||||
|
||||
### Agent 工具限制
|
||||
|
||||
```json5
|
||||
{
|
||||
"agents": {
|
||||
"list": [
|
||||
{
|
||||
"id": "public",
|
||||
"tools": {
|
||||
"profile": "read-only",
|
||||
"allow": ["read", "message"],
|
||||
"deny": ["exec", "write", "browser"]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 工具组速查
|
||||
|
||||
| 组名 | 包含工具 |
|
||||
|------|----------|
|
||||
| `group:runtime` | exec, bash, process |
|
||||
| `group:fs` | read, write, edit, apply_patch |
|
||||
| `group:sessions` | sessions_list, sessions_history, sessions_send |
|
||||
| `group:memory` | memory_search, memory_get |
|
||||
| `group:ui` | browser, canvas |
|
||||
| `group:messaging` | message |
|
||||
|
||||
---
|
||||
|
||||
## 三、节点(Nodes)管理
|
||||
|
||||
### 节点概念
|
||||
|
||||
**节点**是连接到 Gateway 的辅助设备(macOS/iOS/Android/无头主机),提供:
|
||||
- 屏幕截图(Canvas)
|
||||
- 摄像头拍照/录像
|
||||
- 位置信息
|
||||
- 系统命令执行
|
||||
- 通知推送
|
||||
|
||||
### 节点架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Gateway │
|
||||
│ - 接收消息 │
|
||||
│ - 运行 Agent │
|
||||
│ - 路由工具调用 │
|
||||
└────────────────────────┬────────────────────────────────┘
|
||||
│ WebSocket
|
||||
┌────────────────┼────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌─────────┐ ┌─────────┐ ┌─────────┐
|
||||
│ Mac │ │ iPhone │ │ Android │
|
||||
│ 节点 │ │ 节点 │ │ 节点 │
|
||||
└─────────┘ └─────────┘ └─────────┘
|
||||
```
|
||||
|
||||
### 节点配对
|
||||
|
||||
```bash
|
||||
# 1. 在节点设备上启动
|
||||
openclaw node run --host <gateway-host> --port 18789 --display-name "Mac Node"
|
||||
|
||||
# 2. 在 Gateway 主机上审批
|
||||
openclaw nodes pending
|
||||
openclaw nodes approve <requestId>
|
||||
|
||||
# 3. 查看节点状态
|
||||
openclaw nodes status
|
||||
openclaw nodes list
|
||||
```
|
||||
|
||||
### 节点命令
|
||||
|
||||
#### 屏幕截图
|
||||
|
||||
```bash
|
||||
openclaw nodes canvas snapshot --node <id> --format png
|
||||
openclaw nodes canvas snapshot --node <id> --format jpg --max-width 1200
|
||||
```
|
||||
|
||||
#### 摄像头拍照
|
||||
|
||||
```bash
|
||||
openclaw nodes camera list --node <id>
|
||||
openclaw nodes camera snap --node <id>
|
||||
openclaw nodes camera snap --node <id> --facing front
|
||||
```
|
||||
|
||||
#### 屏幕录制
|
||||
|
||||
```bash
|
||||
openclaw nodes screen record --node <id> --duration 10s --fps 10
|
||||
```
|
||||
|
||||
#### 位置信息
|
||||
|
||||
```bash
|
||||
openclaw nodes location get --node <id>
|
||||
openclaw nodes location get --node <id> --accuracy precise
|
||||
```
|
||||
|
||||
#### 系统命令(节点主机)
|
||||
|
||||
```bash
|
||||
openclaw nodes run --node <id> -- echo "Hello"
|
||||
openclaw nodes notify --node <id> --title "Title" --body "Message"
|
||||
```
|
||||
|
||||
### 节点绑定 Exec
|
||||
|
||||
```bash
|
||||
# 全局默认
|
||||
openclaw config set tools.exec.host node
|
||||
openclaw config set tools.exec.node "<node-id>"
|
||||
|
||||
# Agent 级别
|
||||
openclaw config set agents.list[0].tools.exec.node "<node-id>"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、远程访问
|
||||
|
||||
### SSH 隧道
|
||||
|
||||
#### 创建隧道
|
||||
|
||||
```bash
|
||||
# 本地 18789 -> 远程 127.0.0.1:18789
|
||||
ssh -N -L 18789:127.0.0.1:18789 user@gateway-host
|
||||
```
|
||||
|
||||
#### 隧道建立后的操作
|
||||
|
||||
```bash
|
||||
# 查看远程 Gateway 状态
|
||||
openclaw health
|
||||
openclaw status --deep
|
||||
|
||||
# 发送消息
|
||||
openclaw message send --target +15555550123 --message "Hi"
|
||||
```
|
||||
|
||||
### 远程 Gateway 配置
|
||||
|
||||
```json5
|
||||
{
|
||||
"gateway": {
|
||||
"mode": "remote",
|
||||
"remote": {
|
||||
"url": "ws://127.0.0.1:18789",
|
||||
"token": "your-token"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Tailscale 访问
|
||||
|
||||
```bash
|
||||
# 推荐:保持 loopback 绑定 + Tailscale Serve
|
||||
openclaw gateway --tailscale serve
|
||||
|
||||
# 查看状态
|
||||
openclaw gateway status
|
||||
```
|
||||
|
||||
### 远程访问模式
|
||||
|
||||
| 模式 | 说明 | 适用场景 |
|
||||
|------|------|----------|
|
||||
| SSH 隧道 | 通用方案 | 临时访问 |
|
||||
| Tailscale | 内网穿透 | 长期使用 |
|
||||
| VPN | 专用网络 | 企业环境 |
|
||||
|
||||
---
|
||||
|
||||
## 五、协同部署清单
|
||||
|
||||
### 部署前检查
|
||||
|
||||
- [ ] 确定 Gateway 数量和角色
|
||||
- [ ] 确定 Agent 数量和用途
|
||||
- [ ] 规划端口分配(间隔至少 20 端口)
|
||||
- [ ] 配置网络访问(SSH/Tailscale)
|
||||
- [ ] 准备各实例的认证信息
|
||||
|
||||
### 配置模板
|
||||
|
||||
#### 主 Gateway(主 Agent)
|
||||
|
||||
```json5
|
||||
{
|
||||
"gateway": { "port": 18789, "mode": "local", "bind": "loopback" },
|
||||
"agents": {
|
||||
"list": [{ "id": "main", "default": true, "workspace": "~/.openclaw/workspace" }],
|
||||
"bindings": [{ "agentId": "main", "match": { "channel": "telegram" } }]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 救援 Gateway(隔离 Agent)
|
||||
|
||||
```json5
|
||||
{
|
||||
"gateway": { "port": 19789, "mode": "local", "bind": "loopback" },
|
||||
"agents": {
|
||||
"list": [{ "id": "rescue", "workspace": "~/.openclaw/workspace-rescue" }],
|
||||
"bindings": [{ "agentId": "rescue", "match": { "channel": "telegram" } }]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 运维命令速查
|
||||
|
||||
| 任务 | 命令 |
|
||||
|------|------|
|
||||
| 查看所有 Gateway | `openclaw --profile <name> status` |
|
||||
| 查看节点 | `openclaw nodes status` |
|
||||
| 查看 Agent | `openclaw agents list --bindings` |
|
||||
| 重启 Gateway | `openclaw gateway restart` |
|
||||
| SSH 隧道 | `ssh -N -L 18789:127.0.0.1:18789 user@host` |
|
||||
|
||||
---
|
||||
|
||||
## 六、故障排查
|
||||
|
||||
### 常见问题
|
||||
|
||||
#### Gateway 无法连接
|
||||
|
||||
```bash
|
||||
# 检查本地隧道
|
||||
lsof -nP -iTCP:18789 -sTCP:LISTEN
|
||||
|
||||
# 检查远程 Gateway
|
||||
ssh user@host "openclaw gateway status"
|
||||
```
|
||||
|
||||
#### 节点不响应
|
||||
|
||||
```bash
|
||||
# 检查节点状态
|
||||
openclaw nodes status
|
||||
|
||||
# 检查节点连接日志
|
||||
openclaw logs | grep -i node
|
||||
```
|
||||
|
||||
#### Agent 路由错误
|
||||
|
||||
```bash
|
||||
# 查看绑定配置
|
||||
openclaw agents list --bindings
|
||||
|
||||
# 检查消息路由
|
||||
openclaw logs | grep -i routing
|
||||
```
|
||||
|
||||
#### 工具调用被拒绝
|
||||
|
||||
```bash
|
||||
# 检查工具限制
|
||||
openclaw sandbox explain
|
||||
|
||||
# 检查 Agent 工具配置
|
||||
openclaw config get agents.list
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、相关文档
|
||||
|
||||
- [CLI 命令参考](./CLI_COMMAND_REFERENCE.md)
|
||||
- [Gateway 配置详解](./GATEWAY_CONFIGURATION.md)
|
||||
- [故障排查指南](./TROUBLESHOOTING_GUIDE.md)
|
||||
- [日志配置指南](./LOGGING_GUIDE.md)
|
||||
- [系统架构](./SYSTEM.md)
|
||||
- [多机部署](./MULTI-MACHINE.md)
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-04*
|
||||
@@ -0,0 +1,349 @@
|
||||
# OpenClaw Gateway 配置详解
|
||||
|
||||
## 配置文件位置
|
||||
|
||||
- 默认位置: `~/.openclaw/openclaw.json`
|
||||
- 开发模式: `~/.openclaw-dev/openclaw.json`
|
||||
|
||||
## 根配置结构
|
||||
|
||||
```json5
|
||||
{
|
||||
// 元数据
|
||||
"meta": {},
|
||||
|
||||
// 模型提供者
|
||||
"models": {},
|
||||
|
||||
// Agent 配置
|
||||
"agents": {},
|
||||
|
||||
// 通道配置
|
||||
"channels": {},
|
||||
|
||||
// Gateway 配置
|
||||
"gateway": {},
|
||||
|
||||
// 插件配置
|
||||
"plugins": {},
|
||||
|
||||
// 日志配置
|
||||
"logging": {},
|
||||
|
||||
// 消息配置
|
||||
"messages": {},
|
||||
|
||||
// 环境变量
|
||||
"env": {},
|
||||
}
|
||||
```
|
||||
|
||||
## gateway - Gateway 配置
|
||||
|
||||
### 基础配置
|
||||
|
||||
```json5
|
||||
{
|
||||
"gateway": {
|
||||
"port": 18789, // WebSocket 端口
|
||||
"mode": "local", // 模式: local|remote
|
||||
"bind": "loopback", // 绑定: loopback|lan|tailnet|auto|custom
|
||||
"auth": {
|
||||
"mode": "token", // 认证模式: token|password
|
||||
"token": "your-token" // 认证 Token
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 远程 Gateway
|
||||
|
||||
```json5
|
||||
{
|
||||
"gateway": {
|
||||
"mode": "remote",
|
||||
"remote": {
|
||||
"url": "wss://gateway.example.com",
|
||||
"token": "remote-token"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 绑定模式说明
|
||||
|
||||
| 模式 | 说明 | 认证要求 |
|
||||
|------|------|----------|
|
||||
| `loopback` | 仅本地访问 | 可选 |
|
||||
| `lan` | 局域网访问 | 必须 |
|
||||
| `tailnet` | Tailscale 网络 | 必须 |
|
||||
| `auto` | 自动选择 | 取决于网络 |
|
||||
| `custom` | 自定义地址 | 必须 |
|
||||
|
||||
## logging - 日志配置
|
||||
|
||||
```json5
|
||||
{
|
||||
"logging": {
|
||||
"level": "info", // 文件日志级别: trace|debug|info|warn|error
|
||||
"file": "/tmp/openclaw/openclaw.log", // 日志文件路径
|
||||
"consoleLevel": "info", // 控制台日志级别
|
||||
"consoleStyle": "pretty", // 控制台样式: pretty|compact|json
|
||||
"redactSensitive": "tools", // 敏感信息脱敏: off|tools
|
||||
"redactPatterns": [ // 自定义脱敏规则
|
||||
"sk-.*"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 日志级别
|
||||
|
||||
- `trace` - 最详细
|
||||
- `debug` - 调试信息
|
||||
- `info` - 默认
|
||||
- `warn` - 警告
|
||||
- `error` - 错误
|
||||
|
||||
## agents - Agent 配置
|
||||
|
||||
### 全局默认配置
|
||||
|
||||
```json5
|
||||
{
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"workspace": "~/.openclaw/workspace", // 工作目录
|
||||
"model": {
|
||||
"primary": "deepseek/deepseek-chat" // 默认模型
|
||||
},
|
||||
"sandbox": {
|
||||
"mode": "all", // 沙箱模式: off|non-main|all
|
||||
"scope": "session", // 沙箱范围: session|agent|shared
|
||||
"workspaceAccess": "rw" // 工作目录访问: none|ro|rw
|
||||
},
|
||||
"groupChat": {
|
||||
"mentionPatterns": ["@openclaw"] // 群聊触发词
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 多 Agent 配置
|
||||
|
||||
```json5
|
||||
{
|
||||
"agents": {
|
||||
"list": [
|
||||
{
|
||||
"id": "main",
|
||||
"name": "主 Agent",
|
||||
"workspace": "~/.openclaw/workspace",
|
||||
"model": {
|
||||
"primary": "deepseek/deepseek-chat",
|
||||
"fallbacks": ["minimax/minimax-m2.1"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "guardian",
|
||||
"name": "守护者",
|
||||
"workspace": "~/.openclaw/workspace-guardian"
|
||||
}
|
||||
],
|
||||
"bindings": [
|
||||
{ "agentId": "main", "match": { "channel": "telegram" } },
|
||||
{ "agentId": "guardian", "match": { "channel": "whatsapp" } }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## channels - 通道配置
|
||||
|
||||
### Telegram
|
||||
|
||||
```json5
|
||||
{
|
||||
"channels": {
|
||||
"telegram": {
|
||||
"enabled": true,
|
||||
"botToken": "your-bot-token",
|
||||
"dmPolicy": "pairing", // pairing|allowlist|open|disabled
|
||||
"allowFrom": ["tg:123456789"], // 允许发送者列表
|
||||
"groups": {
|
||||
"*": { "requireMention": true }
|
||||
},
|
||||
"replyToMode": "first", // off|first|all
|
||||
"linkPreview": true,
|
||||
"streamMode": "partial", // off|partial|block
|
||||
"actions": {
|
||||
"reactions": true,
|
||||
"sendMessage": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### WhatsApp
|
||||
|
||||
```json5
|
||||
{
|
||||
"channels": {
|
||||
"whatsapp": {
|
||||
"enabled": true,
|
||||
"dmPolicy": "pairing", // pairing|allowlist|open|disabled
|
||||
"allowFrom": ["+15555550123"],
|
||||
"groups": {
|
||||
"*": { "requireMention": true }
|
||||
},
|
||||
"textChunkLimit": 4000,
|
||||
"chunkMode": "length",
|
||||
"mediaMaxMb": 50
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Discord
|
||||
|
||||
```json5
|
||||
{
|
||||
"channels": {
|
||||
"discord": {
|
||||
"enabled": true,
|
||||
"token": "your-discord-token",
|
||||
"dm": {
|
||||
"enabled": true,
|
||||
"policy": "pairing"
|
||||
},
|
||||
"replyToMode": "off",
|
||||
"historyLimit": 20,
|
||||
"actions": {
|
||||
"reactions": true,
|
||||
"messages": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## models - 模型配置
|
||||
|
||||
### DeepSeek
|
||||
|
||||
```json5
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"deepseek": {
|
||||
"baseUrl": "https://api.deepseek.com/v1",
|
||||
"apiKey": "sk-xxx",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{ "id": "deepseek-chat", "name": "DeepSeek" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### MiniMax
|
||||
|
||||
```json5
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"minimax": {
|
||||
"baseUrl": "https://api.minimaxi.com/v1",
|
||||
"apiKey": "sk-api-xxx",
|
||||
"models": [
|
||||
{ "id": "minimax-m2.1", "name": "MiniMax M2.1" },
|
||||
{ "id": "embo-01", "name": "Embodied" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 配置验证
|
||||
|
||||
OpenClaw 使用严格的 JSON Schema 验证:
|
||||
|
||||
```bash
|
||||
# 检查配置
|
||||
openclaw doctor
|
||||
|
||||
# 自动修复
|
||||
openclaw doctor --fix
|
||||
```
|
||||
|
||||
### 常见验证错误
|
||||
|
||||
| 错误 | 解决 |
|
||||
|------|------|
|
||||
| Unknown key | 删除未知配置项 |
|
||||
| Invalid type | 检查类型是否匹配 |
|
||||
| Config invalid | 运行 `openclaw doctor --fix` |
|
||||
|
||||
## 配置包含 ($include)
|
||||
|
||||
支持拆分配置文件:
|
||||
|
||||
```json5
|
||||
// ~/.openclaw/openclaw.json
|
||||
{
|
||||
"gateway": { "port": 18789 },
|
||||
"agents": { "$include": "./agents.json5" },
|
||||
"channels": { "$include": "./channels.json5" }
|
||||
}
|
||||
```
|
||||
|
||||
## 环境变量
|
||||
|
||||
### 内联环境变量
|
||||
|
||||
```json5
|
||||
{
|
||||
"env": {
|
||||
"vars": {
|
||||
"OPENROUTER_API_KEY": "sk-or-..."
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 环境变量引用
|
||||
|
||||
```json5
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"custom": {
|
||||
"apiKey": "${CUSTOM_API_KEY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 敏感信息脱敏
|
||||
|
||||
```json5
|
||||
{
|
||||
"logging": {
|
||||
"redactSensitive": "tools",
|
||||
"redactPatterns": [
|
||||
"\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1",
|
||||
"/\\bsk-[A-Za-z0-9_-]{8,}\\b/gi"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-04*
|
||||
@@ -0,0 +1,268 @@
|
||||
# OpenClaw 配置健康稳定运营指南
|
||||
|
||||
> 文档版本: v1.0
|
||||
> 创建时间: 2026-02-07
|
||||
> 适用: 青龙 & 2号机
|
||||
|
||||
---
|
||||
|
||||
## 核心原则
|
||||
|
||||
### 优先级排序
|
||||
|
||||
| 优先级 | 原则 | 说明 |
|
||||
|--------|------|------|
|
||||
| **1** | **稳定 > 功能** | 宁可禁用功能,也不让系统崩溃 |
|
||||
| **2** | **简单 > 复杂** | 避免复杂的批量操作,单条处理更可靠 |
|
||||
| **3** | **监控 > 信任** | 关键操作要有日志和状态检查 |
|
||||
| **4** | **备份 > 自信** | 自动备份配置文件,防止灾难性错误 |
|
||||
|
||||
---
|
||||
|
||||
## 配置备份策略
|
||||
|
||||
### 自动备份脚本
|
||||
|
||||
```bash
|
||||
# 脚本位置
|
||||
/root/.openclaw/scripts/config-backup-monitor.sh
|
||||
|
||||
# 功能
|
||||
- 每60秒检查 openclaw.json 变化
|
||||
- 自动备份(带时间戳)
|
||||
- 最多保留10个版本
|
||||
```
|
||||
|
||||
### 使用方法
|
||||
|
||||
```bash
|
||||
# 启动监控
|
||||
nohup /root/.openclaw/scripts/config-backup-monitor.sh > /var/log/openclaw-config-backup.log 2>&1 &
|
||||
|
||||
# 查看日志
|
||||
tail -f /var/log/openclaw-config-backup.log
|
||||
|
||||
# 查看备份
|
||||
ls -la /root/.openclaw/backups/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 监控体系
|
||||
|
||||
### 系统级监控
|
||||
|
||||
| 监控项 | 脚本 | 频率 |
|
||||
|--------|------|------|
|
||||
| Gateway 状态 | system-monitor.sh | 每10分钟 |
|
||||
| 配置变更 | config-backup-monitor.sh | 每60秒 |
|
||||
| Telegram 连接 | telegram-watchdog.sh | 持续运行 |
|
||||
| 会话文件大小 | 内置监控 | 实时 |
|
||||
|
||||
### 告警阈值
|
||||
|
||||
| 指标 | 警告 | 危险 | 处理 |
|
||||
|------|------|------|------|
|
||||
| 内存使用 | >70% | >85% | 检查进程 |
|
||||
| 会话文件 | >5MB | >8MB | 建议新会话 |
|
||||
| Gateway 响应 | >30s | >60s | 重启 Gateway |
|
||||
| 磁盘空间 | <20% | <10% | 清理日志 |
|
||||
|
||||
---
|
||||
|
||||
## 问题排查清单
|
||||
|
||||
### 1. Gateway 无法连接
|
||||
|
||||
```bash
|
||||
# 排查步骤
|
||||
1. 检查 NO_PROXY 是否包含 Ollama 地址
|
||||
2. Gateway 是普通进程,需手动设置环境变量
|
||||
3. 执行: NO_PROXY="192.168.0.66" openclaw gateway restart
|
||||
```
|
||||
|
||||
### 2. Embedding 上下文超限
|
||||
|
||||
```bash
|
||||
# 症状
|
||||
input length exceeds the context length
|
||||
|
||||
# 解决方案
|
||||
sed -i 's/mxbai/nomic/' /root/.openclaw/openclaw.json
|
||||
|
||||
# 模型对比
|
||||
| 模型 | 大小 | 上下文 | 适用 |
|
||||
|------|------|--------|------|
|
||||
| mxbai-embed-large | 669MB | 短 (512) | 短文本 |
|
||||
| nomic-embed-text | 274MB | 长 (8192) | 长文档 |
|
||||
```
|
||||
|
||||
### 3. Ollama 批量上传 404
|
||||
|
||||
```bash
|
||||
# 症状
|
||||
batch file upload failed: 404
|
||||
|
||||
# 处理
|
||||
正常现象,OpenClaw 自动降级到非批量模式,无需干预
|
||||
```
|
||||
|
||||
### 4. Compaction 卡死 (重点!)
|
||||
|
||||
```bash
|
||||
# 症状
|
||||
- 系统无响应,会话中断
|
||||
- Gateway 无法关闭 (shutdown timed out)
|
||||
- 日志显示 compaction retry 反复出现
|
||||
|
||||
# 根因
|
||||
大会话文件 (9MB+) 导致 compaction 算法超时
|
||||
|
||||
# 解决方案
|
||||
# 1. 清理卡死的会话
|
||||
rm /root/.openclaw/agents/main/sessions/[session-id].jsonl
|
||||
|
||||
# 2. 重启 Gateway
|
||||
openclaw gateway restart
|
||||
|
||||
# 3. 预防
|
||||
# agents.defaults.compaction.enabled = false
|
||||
```
|
||||
|
||||
### 5. LLM 请求超时
|
||||
|
||||
```bash
|
||||
# 排查步骤
|
||||
1. 检查模型 API 是否正常
|
||||
2. 查看代理是否通畅
|
||||
3. 检查是否有会话文件过大
|
||||
4. 重启 Gateway 清理状态
|
||||
|
||||
# 日志关键词
|
||||
FailoverError: LLM request timed out
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 性能优化经验
|
||||
|
||||
### 青龙 (1号机) - 8GB 内存
|
||||
|
||||
| 场景 | 推荐配置 | 说明 |
|
||||
|------|----------|------|
|
||||
| 轻量服务 | 2-3并发 | Ollama / 监控脚本 |
|
||||
| 中等负载 | 1-2并发 | 可运行一个 Agent |
|
||||
| 本地模型 | qwen2.5:3b / llama3:8b | 注意内存占用 |
|
||||
| 向量化 | nomic-embed-text | 274MB,适合 SSD |
|
||||
|
||||
### 2号机 - 8GB 内存 + HDD
|
||||
|
||||
| 场景 | 推荐配置 | 说明 |
|
||||
|------|----------|------|
|
||||
| 避免大量 | 文件 I/O 操作 | HDD 读写慢 |
|
||||
| 本地模型 | qwen2.5:3b (2GB) | 流畅运行 |
|
||||
| 监控脚本 | 定期清理日志 | 防止磁盘满 |
|
||||
|
||||
---
|
||||
|
||||
## 技术决策记录
|
||||
|
||||
| 决策 | 选择 | 原因 |
|
||||
|------|------|------|
|
||||
| 向量模型 | nomic-embed-text | 长上下文适合文档索引 |
|
||||
| 批量写入 | 禁用 | Ollama 不稳定,单条更可靠 |
|
||||
| paths 配置 | symlink 替代 | OpenClaw 不支持自定义路径 |
|
||||
| compaction | 监控为主 | 大文件会卡死,需手动清理 |
|
||||
| 版本升级 | 稳定优先 | 不盲目追新,验证后再升级 |
|
||||
|
||||
---
|
||||
|
||||
## 配置修改流程
|
||||
|
||||
### 修改前
|
||||
|
||||
1. ✅ 确认修改必要性
|
||||
2. ✅ 备份当前配置
|
||||
3. ✅ 记录修改意图
|
||||
|
||||
### 修改中
|
||||
|
||||
1. ✅ 使用 `openclaw config.patch` 或手动编辑
|
||||
2. ✅ 修改后检查语法: `python3 -m json.tool openclaw.json > /dev/null`
|
||||
|
||||
### 修改后
|
||||
|
||||
1. ✅ 重启 Gateway: `openclaw gateway restart`
|
||||
2. ✅ 观察日志: `tail -f /tmp/openclaw/openclaw-*.log`
|
||||
3. ✅ 验证功能正常
|
||||
|
||||
---
|
||||
|
||||
## 常见问题速查
|
||||
|
||||
| 问题 | 快速解决 |
|
||||
|------|----------|
|
||||
| Gateway 无响应 | `openclaw gateway restart` |
|
||||
| Telegram 断开 | 检查代理,查看 telegram-watchdog.log |
|
||||
| 模型调用失败 | 检查 API Key,确认网络通畅 |
|
||||
| 内存占用过高 | 强制重启 Gateway |
|
||||
| 日志文件过大 | `> /tmp/openclaw/openclaw.log` |
|
||||
|
||||
---
|
||||
|
||||
## 经验教训
|
||||
|
||||
### 历史问题
|
||||
|
||||
| 日期 | 问题 | 教训 |
|
||||
|------|------|------|
|
||||
| 2026-02-04 | 内存管理器缺少 embedding 模型 | 需单独配置 provider + embedding |
|
||||
| 2026-02-05 | memorySearch.paths 配置无效 | OpenClaw 不支持自定义 paths,用 symlink 替代 |
|
||||
| 2026-02-05 | Gateway 反复重启 | 不要手动添加 agents.memorySearch 配置 |
|
||||
| 2026-02-06 | Compaction 卡死导致"死机" | 大会话需要分片或禁用 compaction |
|
||||
|
||||
### 核心认识
|
||||
|
||||
1. **Gateway 是普通进程** - 不继承 systemd 环境变量,需手动设置 NO_PROXY
|
||||
2. **memorySearch 是独立 plugin** - 不走 agents.defaults 配置
|
||||
3. **Symlink 解决路径问题** - OpenClaw 不支持 paths,用 `ln -s` 替代
|
||||
4. **Compaction 不是必须的** - 可以禁用,不会影响对话功能
|
||||
|
||||
---
|
||||
|
||||
## 维护命令速查
|
||||
|
||||
```bash
|
||||
# Gateway 管理
|
||||
openclaw gateway status
|
||||
openclaw gateway restart
|
||||
openclaw gateway stop
|
||||
|
||||
# 问题排查
|
||||
openclaw doctor --fix
|
||||
openclaw doctor
|
||||
|
||||
# 配置管理
|
||||
openclaw config.get
|
||||
openclaw config.patch
|
||||
|
||||
# 日志查看
|
||||
tail -f /tmp/openclaw/openclaw-$(date +%Y-%m-%d).log
|
||||
|
||||
# 内存清理
|
||||
rm /root/.openclaw/agents/main/sessions/*.jsonl
|
||||
openclaw gateway restart
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 参考文档
|
||||
|
||||
- `/root/doc/OPENCLAW_HEALTH_CHECK.md` - 健康检查指南
|
||||
- `/root/doc/TROUBLESHOOTING_GUIDE.md` - 故障排查
|
||||
- `/root/doc/MULTI-MACHINE.md` - 多机部署
|
||||
- `/root/doc/COORDINATION_DEPLOYMENT.md` - 协同部署
|
||||
|
||||
---
|
||||
|
||||
*文档维护: 2号机 (守护者)*
|
||||
@@ -0,0 +1,444 @@
|
||||
# 本地向量模型配置详细解说
|
||||
|
||||
> **思考时间**: 5.85s
|
||||
> **主题**: OpenClaw 本地向量化服务配置
|
||||
> **适用**: 需要本地运行嵌入模型的场景
|
||||
|
||||
---
|
||||
|
||||
## 文档概述
|
||||
|
||||
本文档详细记录了在 OpenClaw 中配置本地向量化服务的完整过程,包括:
|
||||
- 技术方案、实施步骤
|
||||
- 配置代码
|
||||
- 踩坑记录与解决方案
|
||||
|
||||
---
|
||||
|
||||
## 一、配置背景与目标
|
||||
|
||||
### 1.1 应用场景分析
|
||||
|
||||
| 需求 | 说明 |
|
||||
|------|------|
|
||||
| 数据隐私 | 敏感数据不出本地环境 |
|
||||
| 成本控制 | 本地部署无 API 费用 |
|
||||
| 网络稳定 | 本地服务更可靠 |
|
||||
| 离线使用 | 无外网环境必需 |
|
||||
|
||||
### 1.2 技术选型
|
||||
|
||||
选择 **Ollama** 作为本地向量化平台:
|
||||
|
||||
| 优势 | 说明 |
|
||||
|------|------|
|
||||
| 开箱即用 | mxbai-embed-large 可在 CPU 高效运行 |
|
||||
| OpenAI 兼容 | 与 OpenClaw "openai" provider 无缝对接 |
|
||||
| 便捷管理 | 简单命令完成模型下载/更新/卸载 |
|
||||
|
||||
**OpenClaw provider 类型:**
|
||||
- `local`: node-llama-cpp 直接运行
|
||||
- `openai`: OpenAI 兼容 API(Ollama 用这个)
|
||||
- `gemini`: Google Gemini 服务
|
||||
|
||||
---
|
||||
|
||||
## 二、系统环境与硬件要求
|
||||
|
||||
### 2.1 测试环境
|
||||
|
||||
| 组件 | 配置 |
|
||||
|------|------|
|
||||
| 设备 | ThinkPad X230 (2012年老旧笔记本) |
|
||||
| CPU | Intel Core i5-3320M 双核 2.6GHz |
|
||||
| 内存 | 8GB DDR3L (可用 7.7GB) |
|
||||
| 存储 | SSD |
|
||||
| OS | Ubuntu/Linux + systemd 用户服务 |
|
||||
|
||||
### 2.2 性能表现
|
||||
|
||||
| 模型 | mxbai-embed-large:latest |
|
||||
|------|--------------------------|
|
||||
| 参数 | 334M |
|
||||
| 大小 | 669MB (F16量化) |
|
||||
| 内存占用 | 58MB (峰值69MB) |
|
||||
| 响应时间 | < 1秒 |
|
||||
|
||||
**结论**: 老旧硬件完全可胜任本地向量化任务。
|
||||
|
||||
---
|
||||
|
||||
## 三、Ollama 服务部署详解
|
||||
|
||||
### 3.1 安装流程
|
||||
|
||||
```bash
|
||||
# 正常网络
|
||||
curl -fsSL https://ollama.ai/install.sh | sh
|
||||
|
||||
# 如果代理干扰,用这个
|
||||
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
|
||||
curl -k -fsSL https://ollama.ai/install.sh | sh
|
||||
```
|
||||
|
||||
安装后自动:
|
||||
- 下载二进制到 `/usr/local/bin/`
|
||||
- 创建 systemd 服务
|
||||
- 默认监听 `127.0.0.1:11434`
|
||||
|
||||
### 3.2 下载嵌入模型
|
||||
|
||||
```bash
|
||||
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
|
||||
ollama pull mxbai-embed-large:latest
|
||||
```
|
||||
|
||||
验证:
|
||||
```bash
|
||||
curl http://localhost:11434/api/tags
|
||||
```
|
||||
|
||||
### 3.3 服务管理
|
||||
|
||||
```bash
|
||||
# systemd 用户服务管理
|
||||
systemctl --user status ollama # 查看状态
|
||||
systemctl --user start ollama # 启动
|
||||
systemctl --user stop ollama # 停止
|
||||
systemctl --user restart ollama # 重启
|
||||
systemctl --user disable ollama # 禁用自启动
|
||||
```
|
||||
|
||||
**注意**: 有两种服务位置
|
||||
- 系统级: `/etc/systemd/system/ollama.service`
|
||||
- 用户级: `~/.config/systemd/user/ollama.service`
|
||||
|
||||
---
|
||||
|
||||
## 四、OpenClaw 配置详解
|
||||
|
||||
### 4.1 配置文件结构
|
||||
|
||||
```
|
||||
~/.openclaw/openclaw.json (JSON5格式,支持注释)
|
||||
|
||||
顶级字段:
|
||||
├── meta # 元数据
|
||||
├── wizard # 向导状态
|
||||
├── browser # 浏览器功能
|
||||
├── models # 模型提供商配置 ⭐
|
||||
├── agents # Agent配置 ⭐
|
||||
├── tools # 工具设置
|
||||
├── messages # 消息行为
|
||||
├── commands # 命令执行
|
||||
├── channels # 通信渠道
|
||||
├── gateway # 网关参数
|
||||
└── plugins # 插件管理
|
||||
```
|
||||
|
||||
### 4.2 Ollama Provider 配置
|
||||
|
||||
```json
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"ollama": {
|
||||
"baseUrl": "http://localhost:11434/v1",
|
||||
"apiKey": "ollama-local",
|
||||
"models": [
|
||||
{
|
||||
"id": "llama3:latest",
|
||||
"name": "Llama 3",
|
||||
"reasoning": false,
|
||||
"input": ["text"],
|
||||
"contextWindow": 32768,
|
||||
"maxTokens": 8192
|
||||
},
|
||||
{
|
||||
"id": "mxbai-embed-large:latest",
|
||||
"name": "MxBai Embed",
|
||||
"reasoning": false,
|
||||
"input": ["text"],
|
||||
"contextWindow": 512,
|
||||
"maxTokens": 512
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**配置要点:**
|
||||
- `baseUrl`: `http://localhost:11434/v1` (`/v1` 是 OpenAI API 前缀)
|
||||
- `apiKey`: 任意值,Ollama 不验证
|
||||
- `models`: 列出所有可用模型
|
||||
|
||||
### 4.3 向量化搜索配置
|
||||
|
||||
```json
|
||||
{
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "minimax/minimax-m2.1",
|
||||
"fallbacks": ["deepseek/deepseek-chat"]
|
||||
},
|
||||
"memorySearch": {
|
||||
"provider": "openai", // ⭐ 关键:provider类型
|
||||
"model": "mxbai-embed-large:latest", // ⭐ 必须与provider中id一致
|
||||
"remote": {
|
||||
"baseUrl": "http://localhost:11434/v1",
|
||||
"apiKey": "ollama-local"
|
||||
},
|
||||
"cache": {
|
||||
"enabled": true,
|
||||
"maxEntries": 50000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**关键说明:**
|
||||
- `provider` 必须设为 `"openai"`(Ollama 是 OpenAI 兼容接口)
|
||||
- `remote.baseUrl` 指定 Ollama 具体地址
|
||||
- `cache` 提高性能
|
||||
|
||||
---
|
||||
|
||||
## 五、踩坑记录与解决方案
|
||||
|
||||
### 5.1 代理干扰问题 ⭐最重要⭐
|
||||
|
||||
**问题:**
|
||||
```
|
||||
curl 请求 127.0.0.1:11434 返回 "Empty reply from server"
|
||||
```
|
||||
|
||||
**根因:**
|
||||
代理环境变量将本地请求转发到了 `192.168.0.66:7890`
|
||||
|
||||
**发现:**
|
||||
```
|
||||
"Uses proxy env variable ALL_PROXY == 'socks5h://192.168.0.66:7890'"
|
||||
```
|
||||
|
||||
**解决方案:**
|
||||
```bash
|
||||
# 方法1: 临时关闭代理
|
||||
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY no_proxy NO_PROXY
|
||||
|
||||
# 方法2: curl 跳过代理
|
||||
curl --noproxy 127.0.0.1 http://127.0.0.1:11434/api/tags
|
||||
```
|
||||
|
||||
**教训:** 排查类似问题首先检查代理设置。
|
||||
|
||||
---
|
||||
|
||||
### 5.2 SSL 下载失败
|
||||
|
||||
**问题:**
|
||||
```
|
||||
curl: (56) OpenSSL SSL_read: ... decryption failed or bad record mac
|
||||
```
|
||||
|
||||
**解决方案:**
|
||||
```bash
|
||||
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
|
||||
curl -k -fsSL https://ollama.ai/install.sh | sh
|
||||
```
|
||||
|
||||
**教训:** 代理软件 SSL 中间人解密可能导致错误。
|
||||
|
||||
---
|
||||
|
||||
### 5.3 systemd 自动重启
|
||||
|
||||
**问题:** 杀掉进程后立即被 systemd 重新启动
|
||||
|
||||
**解决方案:**
|
||||
```bash
|
||||
# 先停止服务
|
||||
systemctl --user stop ollama.service
|
||||
systemctl --user disable ollama.service
|
||||
|
||||
# 再杀进程
|
||||
pkill -9 ollama
|
||||
```
|
||||
|
||||
**教训:** systemd 管理的服务要按正确顺序操作。
|
||||
|
||||
---
|
||||
|
||||
### 5.4 JSON 配置格式错误
|
||||
|
||||
**问题:**
|
||||
```
|
||||
JSON5: invalid character '"' at 175:3
|
||||
```
|
||||
|
||||
**解决:** 用 heredoc 重写配置文件
|
||||
```bash
|
||||
cat > ~/.openclaw/openclaw.json << 'EOF'
|
||||
{...完整正确的内容...}
|
||||
EOF
|
||||
|
||||
# 验证
|
||||
python3 -m json.tool ~/.openclaw/openclaw.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5.5 batch 配置项不被识别
|
||||
|
||||
**问题:**
|
||||
```
|
||||
agents.defaults.memorySearch: Unrecognized key: 'batch'
|
||||
```
|
||||
|
||||
**解决:** 移除不支持的配置项,只保留核心配置。
|
||||
|
||||
---
|
||||
|
||||
### 5.6 provider 命名混淆
|
||||
|
||||
**错误理解:** provider 应该设为 "ollama"
|
||||
|
||||
**正确理解:**
|
||||
- `provider` = API 类型 (`openai`/`local`/`gemini`)
|
||||
- `remote.baseUrl` = 具体服务地址
|
||||
|
||||
**教训:** 区分 provider 类型和服务实例。
|
||||
|
||||
---
|
||||
|
||||
## 六、验证与测试
|
||||
|
||||
### 6.1 Ollama 服务验证
|
||||
|
||||
```bash
|
||||
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
|
||||
|
||||
# 1. 检查服务
|
||||
systemctl --user status ollama
|
||||
|
||||
# 2. 测试 API
|
||||
curl http://localhost:11434/api/tags
|
||||
|
||||
# 3. 测试嵌入
|
||||
curl -X POST http://localhost:11434/v1/embeddings \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"model": "mxbai-embed-large:latest", "input": ["测试文本"]}'
|
||||
```
|
||||
|
||||
### 6.2 OpenClaw 验证
|
||||
|
||||
```bash
|
||||
# 验证 JSON 格式
|
||||
python3 -m json.tool ~/.openclaw/openclaw.json
|
||||
|
||||
# 健康检查
|
||||
openclaw doctor
|
||||
|
||||
# 查看配置加载日志
|
||||
journalctl --user -u openclaw-gateway.service -n 50
|
||||
```
|
||||
|
||||
### 6.3 重启 Gateway
|
||||
|
||||
```bash
|
||||
systemctl --user restart openclaw-gateway
|
||||
sleep 5
|
||||
systemctl --user status openclaw-gateway
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、运维命令速查
|
||||
|
||||
### Ollama 管理
|
||||
|
||||
```bash
|
||||
systemctl --user status ollama # 状态
|
||||
systemctl --user start ollama # 启动
|
||||
systemctl --user stop ollama # 停止
|
||||
systemctl --user restart ollama # 重启
|
||||
```
|
||||
|
||||
### OpenClaw 管理
|
||||
|
||||
```bash
|
||||
openclaw doctor # 健康检查
|
||||
systemctl --user restart openclaw-gateway # 重启 Gateway
|
||||
```
|
||||
|
||||
### 日志查看
|
||||
|
||||
```bash
|
||||
journalctl --user -u ollama -n 50 # Ollama 日志
|
||||
journalctl --user -u openclaw-gateway -n 50 # Gateway 日志
|
||||
```
|
||||
|
||||
### 常见故障
|
||||
|
||||
| 故障 | 症状 | 解决 |
|
||||
|------|------|------|
|
||||
| 向量化无响应 | 超时 | 检查代理、Ollama 服务状态 |
|
||||
| 配置不生效 | 无变化 | 重启 Gateway |
|
||||
| 内存过高 | 系统慢 | 重启 Ollama 服务 |
|
||||
|
||||
---
|
||||
|
||||
## 八、性能优化
|
||||
|
||||
### 8.1 内存优化
|
||||
|
||||
| 方法 | 效果 |
|
||||
|------|------|
|
||||
| 更小量化模型 (Q4_0/Q5_1) | 降低 30-50% |
|
||||
| 减少缓存 (10000) | 降低内存占用 |
|
||||
| 按需启动 Ollama | 不用时停止 |
|
||||
|
||||
### 8.2 启动速度
|
||||
|
||||
- 使用 SSD 存储
|
||||
- 保持 Ollama 持续运行
|
||||
|
||||
### 8.3 网络优化
|
||||
|
||||
**不推荐**暴露 Ollama 到外网,如需:
|
||||
```bash
|
||||
export OLLAMA_HOST=0.0.0.0:11434 # 允许外部访问(不推荐)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、配置总结
|
||||
|
||||
### 成功实现
|
||||
|
||||
| 目标 | 状态 |
|
||||
|------|------|
|
||||
| 本地向量化服务 | ✅ ThinkPad X230 成功运行 |
|
||||
| 嵌入模型 | ✅ mxbai-embed-large:latest (334M, F16) |
|
||||
| Provider 模式 | ✅ openai (Ollama 兼容) |
|
||||
| 向量记忆搜索 | ✅ 功能正常 |
|
||||
|
||||
### 关键成功因素
|
||||
|
||||
1. ✅ 准确理解 provider 类型与 remote 配置的关系
|
||||
2. ✅ 正确处理代理干扰问题
|
||||
3. ✅ 严格遵守 JSON 配置格式
|
||||
|
||||
### 经验
|
||||
|
||||
- 主要问题都是环境配置(代理、进程管理)
|
||||
- 技术方案本身成熟可靠
|
||||
- 老旧硬件完全可以胜任
|
||||
|
||||
---
|
||||
|
||||
*文档创建: 2026-02-04*
|
||||
@@ -0,0 +1,146 @@
|
||||
# OpenClaw 日志配置指南
|
||||
|
||||
## 日志位置
|
||||
|
||||
### 默认日志文件
|
||||
|
||||
```
|
||||
/tmp/openclaw/openclaw-YYYY-MM-DD.log
|
||||
```
|
||||
|
||||
### 自定义日志路径
|
||||
|
||||
```json5
|
||||
{
|
||||
"logging": {
|
||||
"file": "/path/to/openclaw.log"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 日志级别
|
||||
|
||||
### 配置日志级别
|
||||
|
||||
```json5
|
||||
{
|
||||
"logging": {
|
||||
"level": "info", // 文件日志级别
|
||||
"consoleLevel": "info", // 控制台日志级别
|
||||
"consoleStyle": "pretty" // 控制台样式
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 日志级别顺序
|
||||
|
||||
```
|
||||
trace > debug > info > warn > error
|
||||
```
|
||||
|
||||
| 级别 | 说明 | 用途 |
|
||||
|------|------|------|
|
||||
| `trace` | 最详细 | 调试时使用 |
|
||||
| `debug` | 调试信息 | 开发调试 |
|
||||
| `info` | 默认 | 一般运行 |
|
||||
| `warn` | 警告 | 潜在问题 |
|
||||
| `error` | 错误 | 错误信息 |
|
||||
|
||||
## 查看日志
|
||||
|
||||
### 实时日志
|
||||
|
||||
```bash
|
||||
openclaw logs --follow # 实时跟踪
|
||||
openclaw logs --since 1h # 最近 1 小时
|
||||
openclaw logs --limit 200 # 最近 200 行
|
||||
```
|
||||
|
||||
### 日志格式
|
||||
|
||||
```bash
|
||||
openclaw logs --json # JSON 格式
|
||||
openclaw logs --plain # 纯文本
|
||||
openclaw logs --no-color # 无颜色
|
||||
```
|
||||
|
||||
### 过滤日志
|
||||
|
||||
```bash
|
||||
# 过滤错误
|
||||
openclaw logs | grep -i error
|
||||
|
||||
# 过滤特定通道
|
||||
openclaw channels logs --channel whatsapp
|
||||
```
|
||||
|
||||
## 控制台样式
|
||||
|
||||
```json5
|
||||
{
|
||||
"logging": {
|
||||
"consoleStyle": "pretty" // 人类友好,有颜色
|
||||
"consoleStyle": "compact" // 紧凑输出
|
||||
"consoleStyle": "json" // JSON 格式
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 敏感信息脱敏
|
||||
|
||||
### 基础配置
|
||||
|
||||
```json5
|
||||
{
|
||||
"logging": {
|
||||
"redactSensitive": "tools", // 仅工具输出脱敏
|
||||
"redactSensitive": "off" // 关闭脱敏
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 自定义脱敏规则
|
||||
|
||||
```json5
|
||||
{
|
||||
"logging": {
|
||||
"redactPatterns": [
|
||||
"\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1",
|
||||
"/\\bsk-[A-Za-z0-9_-]{8,}\\b/gi",
|
||||
"\\bAPI_KEY\\b.*"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 诊断标志 (Diagnostics Flags)
|
||||
|
||||
用于在不改变日志级别的情况下开启特定调试日志:
|
||||
|
||||
```json5
|
||||
{
|
||||
"diagnostics": {
|
||||
"flags": ["telegram.http", "whatsapp.connection"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 环境变量临时启用
|
||||
|
||||
```bash
|
||||
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
|
||||
```
|
||||
|
||||
## 日志位置速查
|
||||
|
||||
| 类型 | 位置 |
|
||||
|------|------|
|
||||
| Gateway 文件日志 | `/tmp/openclaw/openclaw-YYYY-MM-DD.log` |
|
||||
| macOS 服务日志 | `~/.openclaw/logs/gateway.log` |
|
||||
| Linux 服务日志 | `journalctl --user -u openclaw-gateway.service` |
|
||||
| 会话文件 | `$OPENCLAW_STATE_DIR/agents/<agentId>/sessions/` |
|
||||
| 媒体缓存 | `$OPENCLAW_STATE_DIR/media/` |
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-04*
|
||||
@@ -0,0 +1,847 @@
|
||||
# 青龙部署 MemOS 自托管版方案
|
||||
|
||||
> 版本: v1.0
|
||||
> 创建日期: 2026-02-07
|
||||
> 适用节点: 青龙 (1号机, 192.168.0.31)
|
||||
> 目标: 为 OpenClaw 集成 MemOS 记忆系统
|
||||
|
||||
---
|
||||
|
||||
## 📋 目录
|
||||
|
||||
1. [概述](#概述)
|
||||
2. [环境准备](#环境准备)
|
||||
3. [数据库部署](#数据库部署)
|
||||
4. [MemOS 安装](#memos-安装)
|
||||
5. [配置集成](#配置集成)
|
||||
6. [OpenClaw 插件](#openclaw-插件)
|
||||
7. [验证测试](#验证测试)
|
||||
8. [故障排查](#故障排查)
|
||||
|
||||
---
|
||||
|
||||
## 一、概述
|
||||
|
||||
### 1.1 目标
|
||||
|
||||
在青龙 (192.168.0.31) 上部署 MemOS 自托管版,为 OpenClaw 提供记忆能力。
|
||||
|
||||
### 1.2 架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 青龙 (192.168.0.31) │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ MemOS Server │ │
|
||||
│ │ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │ │
|
||||
│ │ │ Neo4j │ │ Qdrant │ │ FastAPI │ │ │
|
||||
│ │ │ (图数据库)│ │(向量数据库)│ │ API 服务 │ │ │
|
||||
│ │ └─────────┘ └─────────┘ └─────────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ OpenClaw Gateway │ │
|
||||
│ │ ┌─────────────────────────────────────────┐ │ │
|
||||
│ │ │ MemOS Cloud OpenClaw Plugin │ │ │
|
||||
│ │ │ - 启动前召回上下文 │ │ │
|
||||
│ │ │ - 结束后保存记忆 │ │ │
|
||||
│ │ └─────────────────────────────────────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ 现有服务 │ │
|
||||
│ │ - MiniMax/DeepSeek (LLM) │ │
|
||||
│ │ - nomic-embed-text (Embedding) │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 1.3 资源需求
|
||||
|
||||
| 组件 | CPU | 内存 | 存储 | 说明 |
|
||||
|------|-----|------|------|------|
|
||||
| Neo4j | 1 核 | 2GB | 10GB | 图数据库 |
|
||||
| Qdrant | 1 核 | 1GB | 5GB | 向量数据库 |
|
||||
| MemOS | 1 核 | 1GB | 1GB | API 服务 |
|
||||
| **总计** | **2 核** | **4GB** | **16GB** | 青龙可满足 |
|
||||
|
||||
---
|
||||
|
||||
## 二、环境准备
|
||||
|
||||
### 2.1 SSH 连接
|
||||
|
||||
```bash
|
||||
# 从 2号机 连接青龙
|
||||
sshpass -p '3efvVGY&' ssh root@192.168.0.31
|
||||
|
||||
# 或直接登录
|
||||
ssh root@192.168.0.31
|
||||
```
|
||||
|
||||
### 2.2 系统检查
|
||||
|
||||
```bash
|
||||
# 1. 检查系统版本
|
||||
cat /etc/os-release
|
||||
|
||||
# 2. 检查 Docker
|
||||
docker --version
|
||||
docker-compose --version
|
||||
|
||||
# 3. 检查内存
|
||||
free -h
|
||||
|
||||
# 4. 检查磁盘
|
||||
df -h
|
||||
|
||||
# 5. 检查 CPU
|
||||
lscpu | grep "CPU(s)"
|
||||
```
|
||||
|
||||
### 2.3 安装 Docker (如未安装)
|
||||
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
|
||||
|
||||
# 添加 Docker 官方 GPG 密钥
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
|
||||
# 添加 Docker 仓库
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
|
||||
# 安装 Docker
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||
|
||||
# 启动 Docker
|
||||
sudo systemctl start docker
|
||||
sudo systemctl enable docker
|
||||
|
||||
# 添加当前用户到 docker 组 (免 sudo)
|
||||
sudo usermod -aG docker $USER
|
||||
```
|
||||
|
||||
### 2.4 创建目录结构
|
||||
|
||||
```bash
|
||||
# 创建部署目录
|
||||
sudo mkdir -p /opt/memos
|
||||
sudo chown -R $USER:$USER /opt/memos
|
||||
|
||||
cd /opt/memos
|
||||
|
||||
# 创建数据目录
|
||||
mkdir -p data/neo4j
|
||||
mkdir -p data/qdrant
|
||||
mkdir -p logs
|
||||
|
||||
# 创建配置目录
|
||||
mkdir -p config
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、数据库部署
|
||||
|
||||
### 3.1 使用 Docker 部署
|
||||
|
||||
#### 3.1.1 创建 Docker Compose 配置
|
||||
|
||||
```bash
|
||||
# 创建 docker-compose.yml
|
||||
cat > /opt/memos/docker-compose.yml << 'EOF'
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# Neo4j 图数据库
|
||||
neo4j:
|
||||
image: neo4j:5.12
|
||||
container_name: memos-neo4j
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "7474:7474"
|
||||
- "7687:7687"
|
||||
environment:
|
||||
NEO4J_AUTH: neo4j/memos_password
|
||||
NEO4J_PLUGINS: ["apoc", "graph-data-science"]
|
||||
NEO4J_dbms_memory_heap_initial__size: 512m
|
||||
NEO4J_dbms_memory_heap_max__size: 2g
|
||||
NEO4J_dbms_tx__log__rotation_rotation__keep__number: 10
|
||||
volumes:
|
||||
- ./data/neo4j/data:/data
|
||||
- ./data/neo4j/logs:/logs
|
||||
- ./data/neo4j/import:/var/lib/neo4j/import
|
||||
networks:
|
||||
- memos-network
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:7474"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
|
||||
# Qdrant 向量数据库
|
||||
qdrant:
|
||||
image: qdrant/qdrant:v1.7.0
|
||||
container_name: memos-qdrant
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "6333:6333"
|
||||
- "6334:6334"
|
||||
environment:
|
||||
QDRANT__SERVICE__API_PORT: 6333
|
||||
QDRANT__STORAGE__STORAGE_PATH: /qdrant/storage
|
||||
volumes:
|
||||
- ./data/qdrant:/qdrant/storage
|
||||
networks:
|
||||
- memos-network
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:6333/dashboard"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
memos-network:
|
||||
driver: bridge
|
||||
EOF
|
||||
```
|
||||
|
||||
#### 3.1.2 启动数据库
|
||||
|
||||
```bash
|
||||
cd /opt/memos
|
||||
|
||||
# 启动服务
|
||||
docker compose up -d
|
||||
|
||||
# 查看启动状态
|
||||
docker compose ps
|
||||
|
||||
# 查看日志
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
#### 3.1.3 验证数据库
|
||||
|
||||
```bash
|
||||
# 1. 检查 Neo4j
|
||||
curl -u neo4j:memos_password http://localhost:7474
|
||||
|
||||
# 2. 检查 Qdrant
|
||||
curl http://localhost:6333/dashboard
|
||||
|
||||
# 3. 检查健康状态
|
||||
docker compose exec neo4j cypher-query "RETURN 1"
|
||||
```
|
||||
|
||||
### 3.2 数据库连接信息
|
||||
|
||||
| 数据库 | 地址 | 端口 | 用户名 | 密码 |
|
||||
|--------|------|------|--------|------|
|
||||
| Neo4j | localhost | 7474/7687 | neo4j | memos_password |
|
||||
| Qdrant | localhost | 6333 | - | - |
|
||||
|
||||
---
|
||||
|
||||
## 四、MemOS 安装
|
||||
|
||||
### 4.1 安装依赖
|
||||
|
||||
```bash
|
||||
# 安装 Python 3.11+
|
||||
sudo apt install -y python3.11 python3.11-venv python3-pip
|
||||
|
||||
# 创建虚拟环境
|
||||
python3.11 -m venv /opt/memos/venv
|
||||
source /opt/memos/venv/bin/activate
|
||||
|
||||
# 升级 pip
|
||||
pip install --upgrade pip
|
||||
|
||||
# 安装 MemOS
|
||||
cd /opt/memos
|
||||
git clone https://github.com/MemTensor/MemOS.git
|
||||
cd MemOS
|
||||
pip install -e .
|
||||
|
||||
# 安装额外依赖
|
||||
pip install pymemgraph # Neo4j driver
|
||||
pip install fastapi uvicorn
|
||||
```
|
||||
|
||||
### 4.2 环境变量配置
|
||||
|
||||
```bash
|
||||
# 创建 .env 文件
|
||||
cat > /opt/memos/.env << 'EOF'
|
||||
# MemOS 配置
|
||||
MEMOS_MODE=self_hosted
|
||||
|
||||
# Neo4j 配置
|
||||
NEO4J_URI=bolt://localhost:7687
|
||||
NEO4J_USER=neo4j
|
||||
NEO4J_PASSWORD=memos_password
|
||||
|
||||
# Qdrant 配置
|
||||
QDRANT_URL=http://localhost:6333
|
||||
|
||||
# LLM 配置 (使用现有资源)
|
||||
# 方案1: 使用 OpenAI
|
||||
OPENAI_API_KEY=your_openai_api_key
|
||||
|
||||
# 方案2: 使用阿里百炼 (推荐)
|
||||
DASHSCOPE_API_KEY=your_dashscope_api_key
|
||||
|
||||
# Embedding 配置 (使用现有资源)
|
||||
# 方案1: 使用 OpenAI
|
||||
OPENAI_EMBEDDING_API_KEY=your_openai_embedding_api_key
|
||||
|
||||
# 方案2: 使用 Voyage AI
|
||||
VOYAGE_API_KEY=your_voyage_api_key
|
||||
|
||||
# 方案3: 使用本地 embedding (nomic-embed-text)
|
||||
EMBEDDING_PROVIDER=ollama
|
||||
EMBEDDING_BASE_URL=http://localhost:11434/v1
|
||||
EMBEDDING_MODEL=nomic-embed-text:latest
|
||||
|
||||
# 日志配置
|
||||
LOG_LEVEL=INFO
|
||||
EOF
|
||||
|
||||
# 应用环境变量
|
||||
source /opt/memos/.env
|
||||
```
|
||||
|
||||
### 4.3 创建启动脚本
|
||||
|
||||
```bash
|
||||
# 创建启动脚本
|
||||
cat > /opt/memos/start.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
# 激活虚拟环境
|
||||
source /opt/memos/venv/bin/activate
|
||||
source /opt/memos/.env
|
||||
|
||||
# 设置工作目录
|
||||
cd /opt/memos/MemOS/src
|
||||
|
||||
# 启动 MemOS API 服务
|
||||
echo "Starting MemOS API Server..."
|
||||
uvicorn memos.api.server_api:app \
|
||||
--host 0.0.0.0 \
|
||||
--port 8001 \
|
||||
--workers 4 \
|
||||
--reload \
|
||||
>> /opt/memos/logs/memos.log 2>&1 &
|
||||
|
||||
echo "MemOS started on http://localhost:8001"
|
||||
echo "Dashboard: http://localhost:8001/docs"
|
||||
EOF
|
||||
|
||||
chmod +x /opt/memos/start.sh
|
||||
```
|
||||
|
||||
### 4.4 创建 systemd 服务
|
||||
|
||||
```bash
|
||||
# 创建 systemd 服务文件
|
||||
sudo cat > /etc/systemd/system/memos.service << 'EOF'
|
||||
[Unit]
|
||||
Description=MemOS Memory Operating System
|
||||
After=network.target docker.service
|
||||
Requires=docker.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/memos
|
||||
ExecStart=/opt/memos/start.sh
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
Environment="PATH=/opt/memos/venv/bin"
|
||||
EnvironmentFile=/opt/memos/.env
|
||||
|
||||
# 日志
|
||||
StandardOutput=append:/opt/memos/logs/memos-system.log
|
||||
StandardError=append:/opt/memos/logs/memos-error.log
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# 重新加载 systemd
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# 启用服务
|
||||
sudo systemctl enable memos
|
||||
|
||||
# 启动服务
|
||||
sudo systemctl start memos
|
||||
|
||||
# 检查状态
|
||||
sudo systemctl status memos
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、配置集成
|
||||
|
||||
### 5.1 配置本地 Embedding
|
||||
|
||||
如果使用本地 nomic-embed-text:
|
||||
|
||||
```bash
|
||||
# 1. 确保 Ollama 运行
|
||||
curl http://localhost:11434/api/version
|
||||
|
||||
# 2. 拉取 embedding 模型
|
||||
ollama pull nomic-embed-text:latest
|
||||
|
||||
# 3. 验证模型
|
||||
ollama list
|
||||
```
|
||||
|
||||
### 5.2 配置 LLM
|
||||
|
||||
#### 方案1: 使用阿里百炼 (推荐)
|
||||
|
||||
```bash
|
||||
# 在 .env 中配置
|
||||
DASHSCOPE_API_KEY=your_api_key
|
||||
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
|
||||
|
||||
# 可用模型:
|
||||
# - qwen3-max
|
||||
# - qwen3-plus
|
||||
# - qwen-turbo
|
||||
```
|
||||
|
||||
#### 方案2: 使用 OpenAI
|
||||
|
||||
```bash
|
||||
# 在 .env 中配置
|
||||
OPENAI_API_KEY=your_api_key
|
||||
OPENAI_BASE_URL=https://api.openai.com/v1
|
||||
|
||||
# 可用模型:
|
||||
# - gpt-4
|
||||
# - gpt-4-turbo
|
||||
# - gpt-3.5-turbo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、OpenClaw 插件
|
||||
|
||||
### 6.1 安装 MemOS Cloud OpenClaw 插件
|
||||
|
||||
MemOS 官方提供 OpenClaw 插件,可以自动管理记忆:
|
||||
|
||||
```bash
|
||||
# 1. 克隆插件仓库
|
||||
cd /opt/memos
|
||||
git clone https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin.git
|
||||
cd MemOS-Cloud-OpenClaw-Plugin
|
||||
|
||||
# 2. 安装依赖
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 6.2 插件配置
|
||||
|
||||
```bash
|
||||
# 创建配置
|
||||
cat > /opt/memos/openclaw-plugin/config.yaml << 'EOF'
|
||||
# MemOS OpenClaw Plugin 配置
|
||||
|
||||
# MemOS 连接配置
|
||||
memos:
|
||||
api_url: http://localhost:8001 # MemOS API 地址
|
||||
api_key: "" # 自托管不需要 key,空字符串
|
||||
|
||||
# 用户配置
|
||||
user:
|
||||
default_id: "yh6788" # 默认用户 ID
|
||||
mem_cube_id: "default" # 默认记忆立方体
|
||||
|
||||
# 行为配置
|
||||
behavior:
|
||||
# 启动时召回多少条记忆
|
||||
recall_limit: 20
|
||||
|
||||
# 保存记忆的触发条件
|
||||
save_triggers:
|
||||
- "对话结束"
|
||||
- "关键信息提取"
|
||||
- "用户明确要求保存"
|
||||
|
||||
# 自动提取的主题
|
||||
auto_extract_topics:
|
||||
- "用户偏好"
|
||||
- "工作内容"
|
||||
- "学习进度"
|
||||
- "项目状态"
|
||||
|
||||
# 日志配置
|
||||
logging:
|
||||
level: INFO
|
||||
file: /opt/memos/logs/openclaw-plugin.log
|
||||
EOF
|
||||
```
|
||||
|
||||
### 6.3 插件工作流程
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ MemOS OpenClaw Plugin │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ OpenClaw 启动 │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────┐ │
|
||||
│ │ 1. ON_LAUNCH │ │
|
||||
│ │ - 从 MemOS 召回上下文 │ │
|
||||
│ │ - 加载用户偏好 │ │
|
||||
│ │ - 加载会话历史 │ │
|
||||
│ └─────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────┐ │
|
||||
│ │ 2. ON_MESSAGE │ │
|
||||
│ │ - 监控对话内容 │ │
|
||||
│ │ - 提取关键信息 │ │
|
||||
│ │ - 更新记忆 │ │
|
||||
│ └─────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────┐ │
|
||||
│ │ 3. ON_TERMINATE │ │
|
||||
│ │ - 保存完整对话 │ │
|
||||
│ │ - 更新用户画像 │ │
|
||||
│ │ - 生成摘要 │ │
|
||||
│ └─────────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、验证测试
|
||||
|
||||
### 7.1 检查服务状态
|
||||
|
||||
```bash
|
||||
# 1. 检查 Docker 服务
|
||||
docker compose ps
|
||||
|
||||
# 2. 检查 MemOS 进程
|
||||
ps aux | grep uvicorn
|
||||
|
||||
# 3. 检查端口监听
|
||||
netstat -tlnp | grep -E "7474|7687|6333|8001"
|
||||
|
||||
# 4. 检查 systemd 服务
|
||||
systemctl status memos
|
||||
```
|
||||
|
||||
### 7.2 API 测试
|
||||
|
||||
```bash
|
||||
# 1. 测试 MemOS 健康检查
|
||||
curl http://localhost:8001/health
|
||||
|
||||
# 2. 测试 API 文档
|
||||
curl http://localhost:8001/docs
|
||||
|
||||
# 3. 添加测试记忆
|
||||
curl -X POST http://localhost:8001/product/add \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"user_id": "test_user",
|
||||
"mem_cube_id": "default",
|
||||
"messages": [{"role": "user", "content": "I like programming with Python"}],
|
||||
"async_mode": "sync"
|
||||
}'
|
||||
|
||||
# 4. 搜索测试记忆
|
||||
curl -X POST http://localhost:8001/product/search \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"query": "What do I like",
|
||||
"user_id": "test_user",
|
||||
"mem_cube_id": "default"
|
||||
}'
|
||||
```
|
||||
|
||||
### 7.3 OpenClaw 集成测试
|
||||
|
||||
```bash
|
||||
# 1. 检查插件是否加载
|
||||
cat /opt/memos/logs/openclaw-plugin.log
|
||||
|
||||
# 2. 测试插件与 MemOS 连接
|
||||
python -c "
|
||||
import requests
|
||||
import json
|
||||
|
||||
# 测试连接
|
||||
resp = requests.get('http://localhost:8001/health')
|
||||
print(f'MemOS Status: {resp.status_code}')
|
||||
|
||||
# 测试添加记忆
|
||||
data = {
|
||||
'user_id': 'yh6788',
|
||||
'mem_cube_id': 'default',
|
||||
'messages': [{'role': 'user', 'content': 'Test memory from OpenClaw'}],
|
||||
'async_mode': 'sync'
|
||||
}
|
||||
resp = requests.post('http://localhost:8001/product/add', json=data)
|
||||
print(f'Add Memory: {resp.status_code}')
|
||||
print(json.dumps(resp.json(), indent=2))
|
||||
"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、故障排查
|
||||
|
||||
### 8.1 常见问题
|
||||
|
||||
#### Q1: Neo4j 连接失败
|
||||
|
||||
```bash
|
||||
# 检查 Neo4j 日志
|
||||
docker logs memos-neo4j --tail 100
|
||||
|
||||
# 检查 Neo4j 是否就绪
|
||||
curl -u neo4j:memos_password http://localhost:7474
|
||||
|
||||
# 重启 Neo4j
|
||||
docker restart memos-neo4j
|
||||
```
|
||||
|
||||
#### Q2: Qdrant 连接失败
|
||||
|
||||
```bash
|
||||
# 检查 Qdrant 日志
|
||||
docker logs memos-qdrant --tail 100
|
||||
|
||||
# 检查 Qdrant 健康
|
||||
curl http://localhost:6333/dashboard
|
||||
|
||||
# 重启 Qdrant
|
||||
docker restart memos-qdrant
|
||||
```
|
||||
|
||||
#### Q3: MemOS 启动失败
|
||||
|
||||
```bash
|
||||
# 查看 MemOS 日志
|
||||
tail -f /opt/memos/logs/memos.log
|
||||
|
||||
# 检查虚拟环境
|
||||
source /opt/memos/venv/bin/activate
|
||||
which python
|
||||
python --version
|
||||
|
||||
# 检查依赖
|
||||
pip list | grep memos
|
||||
```
|
||||
|
||||
#### Q4: API 返回错误
|
||||
|
||||
```bash
|
||||
# 检查 API 响应
|
||||
curl -v http://localhost:8001/health
|
||||
|
||||
# 检查配置
|
||||
cat /opt/memos/.env | grep -E "NEO4J|QDRANT|API"
|
||||
```
|
||||
|
||||
### 8.2 日志位置
|
||||
|
||||
| 组件 | 日志位置 |
|
||||
|------|----------|
|
||||
| MemOS 主日志 | `/opt/memos/logs/memos.log` |
|
||||
| MemOS 系统日志 | `/opt/memos/logs/memos-system.log` |
|
||||
| MemOS 错误日志 | `/opt/memos/logs/memos-error.log` |
|
||||
| Neo4j 日志 | `docker logs memos-neo4j` |
|
||||
| Qdrant 日志 | `docker logs memos-qdrant` |
|
||||
| OpenClaw 插件 | `/opt/memos/logs/openclaw-plugin.log` |
|
||||
|
||||
### 8.3 常用命令
|
||||
|
||||
```bash
|
||||
# 重启所有服务
|
||||
cd /opt/memos
|
||||
docker compose restart
|
||||
systemctl restart memos
|
||||
|
||||
# 查看所有日志
|
||||
tail -f /opt/memos/logs/memos.log
|
||||
|
||||
# 停止所有服务
|
||||
cd /opt/memos
|
||||
docker compose down
|
||||
systemctl stop memos
|
||||
|
||||
# 完全重置 (危险!)
|
||||
cd /opt/memos
|
||||
docker compose down -v
|
||||
rm -rf data/
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、性能优化
|
||||
|
||||
### 9.1 Neo4j 优化
|
||||
|
||||
```bash
|
||||
# 在 docker-compose.yml 中调整
|
||||
neo4j:
|
||||
environment:
|
||||
NEO4J_dbms_memory_heap_initial__size: 1g
|
||||
NEO4J_dbms_memory_heap_max__size: 4g
|
||||
NEO4J_dbms_transaction_log_rotation_rotation__keep__number: 50
|
||||
```
|
||||
|
||||
### 9.2 Qdrant 优化
|
||||
|
||||
```bash
|
||||
# 在 docker-compose.yml 中配置
|
||||
qdrant:
|
||||
environment:
|
||||
QDRANT__SERVICE__HTTP_PORT: 6333
|
||||
QDRANT__SERVICE__GRPC_PORT: 6334
|
||||
QDRANT__STORAGE__PERFORMANCE__MAX_SCORING_THREADS: 4
|
||||
```
|
||||
|
||||
### 9.3 MemOS 优化
|
||||
|
||||
```bash
|
||||
# 调整 uvicorn workers
|
||||
# 单机部署建议: CPU核心数 - 1
|
||||
workers = 3 # 4核CPU
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十、备份与恢复
|
||||
|
||||
### 10.1 备份策略
|
||||
|
||||
```bash
|
||||
# 创建备份脚本
|
||||
cat > /opt/memos/backup.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
BACKUP_DIR=/opt/memos/backups
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# 1. 备份 Neo4j
|
||||
echo "Backing up Neo4j..."
|
||||
docker exec memos-neo4j neo4j-admin dump --database=neo4j --to=/backups/neo4j_$DATE.dump
|
||||
|
||||
# 2. 备份 Qdrant
|
||||
echo "Backing up Qdrant..."
|
||||
docker exec memos-qdrant tar czf /backups/qdrant_$DATE.tar.gz -C /qdrant/storage .
|
||||
|
||||
# 3. 备份 MemOS 配置
|
||||
echo "Backing up MemOS config..."
|
||||
tar czf $BACKUP_DIR/memos_config_$DATE.tar.gz /opt/memos/.env /opt/memos/config/
|
||||
|
||||
echo "Backup completed: $DATE"
|
||||
EOF
|
||||
|
||||
chmod +x /opt/memos/backup.sh
|
||||
|
||||
# 添加定时任务 (每天凌晨 3 点执行)
|
||||
(crontab -l 2>/dev/null || echo "") | grep -v "backup.sh" > /tmp/crontab.tmp
|
||||
echo "0 3 * * * /opt/memos/backup.sh" >> /tmp/crontab.tmp
|
||||
crontab /tmp/crontab.tmp
|
||||
rm /tmp/crontab.tmp
|
||||
```
|
||||
|
||||
### 10.2 恢复脚本
|
||||
|
||||
```bash
|
||||
# 创建恢复脚本
|
||||
cat > /opt/memos/restore.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
BACKUP_FILE=$1
|
||||
|
||||
if [ -z "$BACKUP_FILE" ]; then
|
||||
echo "Usage: $0 <backup_file.tar.gz>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 停止服务
|
||||
cd /opt/memos
|
||||
docker compose down
|
||||
systemctl stop memos
|
||||
|
||||
# 恢复 Neo4j
|
||||
docker exec -i memos-neo4j neo4j-admin load --from=- --database=neo4j --force
|
||||
|
||||
# 恢复 Qdrant
|
||||
docker exec -i memos-qdrant tar xzf /backups/qdrant_latest.tar.gz -C /qdrant/storage
|
||||
|
||||
# 重启服务
|
||||
docker compose up -d
|
||||
systemctl start memos
|
||||
|
||||
echo "Restore completed"
|
||||
EOF
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十一、总结
|
||||
|
||||
### 11.1 部署清单
|
||||
|
||||
| 步骤 | 操作 | 状态 |
|
||||
|------|------|------|
|
||||
| 1 | SSH 连接青龙 | ☐ |
|
||||
| 2 | 安装 Docker | ☐ |
|
||||
| 3 | 部署 Neo4j + Qdrant | ☐ |
|
||||
| 4 | 安装 MemOS | ☐ |
|
||||
| 5 | 配置 LLM + Embedding | ☐ |
|
||||
| 6 | 配置 OpenClaw 插件 | ☐ |
|
||||
| 7 | 验证测试 | ☐ |
|
||||
| 8 | 配置备份 | ☐ |
|
||||
|
||||
### 11.2 下一步
|
||||
|
||||
1. **测试阶段** (1-2天)
|
||||
- 测试云端版 MemOS (快速验证)
|
||||
- 评估功能和性能
|
||||
|
||||
2. **部署阶段** (1周)
|
||||
- 按本文档在青龙部署
|
||||
- 集成 OpenClaw 插件
|
||||
|
||||
3. **优化阶段** (持续)
|
||||
- 性能调优
|
||||
- 备份策略
|
||||
- 监控告警
|
||||
|
||||
---
|
||||
|
||||
*文档版本: v1.0 (2026-02-07)*
|
||||
*作者: 2号机 (守护者)*
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
### MiniMax vs DeepSeek 成本策略
|
||||
|
||||
| Provider | 计费 | 适合场景 |
|
||||
|----------|------|----------|
|
||||
| MiniMax | 48元/月包 (100 prompts/5h) | ✅ 优先使用 |
|
||||
| DeepSeek | 按量计费 | ⚠️ 备用,仅紧急情况 |
|
||||
|
||||
### 共享 Token
|
||||
|
||||
- 2号机 和 1号机 共用同一个 MiniMax API Key
|
||||
- 双方都在消耗同一个 100 prompts/5h 额度
|
||||
- 策略:非紧急任务也用 MiniMax,DeepSeek 留作备用
|
||||
|
||||
@@ -0,0 +1,287 @@
|
||||
# OpenClaw 多机部署指南
|
||||
|
||||
## 🏠 部署架构
|
||||
|
||||
### 当前配置
|
||||
|
||||
| 机器 | IP地址 | 角色 | 代号 |
|
||||
|------|--------|------|------|
|
||||
| 1号机 | 192.168.0.31 | 主机 | 青龙 🐉 |
|
||||
| 2号机 | 192.168.0.32 | 守护者 | 守护者 🛡️ |
|
||||
|
||||
### 架构图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 网络环境 │
|
||||
│ 代理: 192.168.0.66:7890 (HTTP/HTTPS) │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌───────────────┴───────────────┐
|
||||
▼ ▼
|
||||
┌───────────────┐ ┌───────────────┐
|
||||
│ 1号机 │ │ 2号机 │
|
||||
│ 主机/青龙 │ │ 守护者 │
|
||||
│ :18789 │ │ :18789 │
|
||||
│ 主Telegram │ │ 辅助Telegram │
|
||||
│ Bot: dctc6788│ │ Bot: dctc_02 │
|
||||
└───────────────┘ └───────────────┘
|
||||
```
|
||||
|
||||
## 🚀 部署步骤
|
||||
|
||||
### 1. SSH 连接配置
|
||||
|
||||
```bash
|
||||
# 创建 SSH 别名
|
||||
cat >> ~/.ssh/config << EOF
|
||||
|
||||
Host 1号机
|
||||
HostName 192.168.0.31
|
||||
User root
|
||||
Port 22
|
||||
|
||||
Host 2号机
|
||||
HostName 192.168.0.32
|
||||
User root
|
||||
Port 22
|
||||
EOF
|
||||
|
||||
# 测试连接
|
||||
ssh 1号机
|
||||
ssh 2号机
|
||||
```
|
||||
|
||||
### 2. 2号机初始化
|
||||
|
||||
```bash
|
||||
# SSH连接
|
||||
sshpass -p '3efvVGY&' ssh -o StrictHostKeyChecking=no root@192.168.0.32
|
||||
|
||||
# 配置代理
|
||||
export https_proxy=http://192.168.0.66:7890
|
||||
export http_proxy=http://192.168.0.66:7890
|
||||
|
||||
# 安装 OpenClaw
|
||||
npm install --global openclaw@latest
|
||||
|
||||
# 启动向导
|
||||
openclaw onboard --install-daemon
|
||||
```
|
||||
|
||||
### 3. systemd 服务配置
|
||||
|
||||
**2号机 systemd service**:
|
||||
```ini
|
||||
# ~/.config/systemd/user/openclaw-gateway.service
|
||||
|
||||
[Unit]
|
||||
Description=OpenClaw Gateway (守护者)
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/local/bin/openclaw gateway --port 18789
|
||||
Environment="https_proxy=http://192.168.0.66:7890"
|
||||
Environment="http_proxy=http://192.168.0.66:7890"
|
||||
Environment="HTTPS_PROXY=http://192.168.0.66:7890"
|
||||
Environment="HTTP_PROXY=http://192.168.0.66:7890"
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
**应用服务配置**:
|
||||
```bash
|
||||
# 2号机上执行
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable openclaw-gateway.service
|
||||
systemctl --user start openclaw-gateway.service
|
||||
|
||||
# 验证
|
||||
systemctl --user status openclaw-gateway.service
|
||||
```
|
||||
|
||||
## 📋 配置文件
|
||||
|
||||
### 1号机配置 (主机/青龙)
|
||||
|
||||
```json
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"deepseek": {
|
||||
"baseUrl": "https://api.deepseek.com/v1",
|
||||
"apiKey": "sk-xxx",
|
||||
"api": "openai-completions",
|
||||
"models": [{"id": "deepseek-chat", "name": "DeepSeek"}]
|
||||
},
|
||||
"minimax": {
|
||||
"baseUrl": "https://api.minimaxi.com/v1",
|
||||
"apiKey": "sk-api-xxx",
|
||||
"models": [
|
||||
{"id": "minimax-m2.1"},
|
||||
{"id": "embo-01"}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "minimax/minimax-m2.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels": {
|
||||
"telegram": {
|
||||
"enabled": true,
|
||||
"botToken": "8529719199:AAGjLDflvMXAEdgrBTSBEczOoSMybLU4gcs"
|
||||
}
|
||||
},
|
||||
"gateway": {
|
||||
"port": 18789,
|
||||
"auth": {
|
||||
"token": "openclaw-simple-token"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2号机配置 (守护者)
|
||||
|
||||
```json
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"deepseek": {
|
||||
"baseUrl": "https://api.deepseek.com/v1",
|
||||
"apiKey": "sk-xxx",
|
||||
"models": [{"id": "deepseek-chat", "name": "DeepSeek"}]
|
||||
},
|
||||
"minimax": {
|
||||
"baseUrl": "https://api.minimaxi.com/v1",
|
||||
"apiKey": "sk-api-xxx",
|
||||
"models": [
|
||||
{"id": "minimax-m2.1"},
|
||||
{"id": "embo-01"}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "deepseek/deepseek-chat"
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels": {
|
||||
"telegram": {
|
||||
"enabled": true,
|
||||
"botToken": "8202664888:AAE0UyCFJJBLC8notdmT42XOJRBoWLJ6XOI"
|
||||
}
|
||||
},
|
||||
"gateway": {
|
||||
"port": 18789,
|
||||
"auth": {
|
||||
"token": "openclaw-guardian-token-2nd"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🔧 远程管理
|
||||
|
||||
### 常用命令
|
||||
|
||||
```bash
|
||||
# 1号机状态
|
||||
sshpass -p 'password' ssh root@192.168.0.31 "openclaw status"
|
||||
|
||||
# 2号机状态
|
||||
sshpass -p '3efvVGY&' ssh root@192.168.0.32 "openclaw status"
|
||||
|
||||
# 2号机重启Gateway
|
||||
sshpass -p '3efvVGY&' ssh root@192.168.0.32 "openclaw gateway restart"
|
||||
|
||||
# 2号机发送消息
|
||||
sshpass -p '3efvVGY&' ssh root@192.168.0.32 "openclaw message send --channel telegram --target 5117446326 --message 'test'"
|
||||
```
|
||||
|
||||
### 监控脚本
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# monitor-2nd-machine.sh
|
||||
|
||||
echo "=== 2号机 (守护者) 状态 ==="
|
||||
echo "时间: $(date)"
|
||||
echo ""
|
||||
|
||||
# 检查Gateway进程
|
||||
echo "Gateway进程:"
|
||||
sshpass -p '3efvVGY&' ssh root@192.168.0.32 "ps aux | grep openclaw | grep -v grep"
|
||||
|
||||
echo ""
|
||||
echo "系统资源:"
|
||||
sshpass -p '3efvVGY&' ssh root@192.168.0.32 "free -h"
|
||||
|
||||
echo ""
|
||||
echo "最近错误:"
|
||||
sshpass -p '3efvVGY&' ssh root@192.168.0.32 "journalctl --user -u openclaw-gateway.service --since '1 hour ago' --no-pager | grep -i error | tail -5"
|
||||
```
|
||||
|
||||
## 📊 性能对比
|
||||
|
||||
| 指标 | 1号机 (青龙) | 2号机 (守护者) |
|
||||
|------|-------------|---------------|
|
||||
| **默认模型** | MiniMax-m2.1 | DeepSeek |
|
||||
| **代理** | 预配置 | 需手动配置 |
|
||||
| **Telegram** | 正常 | 正常 |
|
||||
| **内存管理器** | 停用 | 待测试 |
|
||||
| **状态** | 生产就绪 | 生产就绪 |
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
### Token 冲突
|
||||
- 每个实例必须使用**独立的 Telegram Bot Token**
|
||||
- Gateway Token 也必须不同
|
||||
|
||||
### 代理配置
|
||||
- systemd 服务**不会**自动继承环境变量
|
||||
- 必须在 service 文件中显式配置
|
||||
|
||||
### 配置文件验证
|
||||
- OpenClaw 使用严格 JSON Schema 验证
|
||||
- 未知字段会导致启动失败
|
||||
- 使用 `openclaw doctor --fix` 修复
|
||||
|
||||
## 🔄 同步策略
|
||||
|
||||
### 配置同步
|
||||
```bash
|
||||
# 从1号机同步配置到2号机
|
||||
scp ~/.openclaw/openclaw.json root@192.168.0.32:/root/.openclaw/openclaw.json
|
||||
|
||||
# 注意: 同步后需要修改:
|
||||
# - gateway.auth.token
|
||||
# - channels.telegram.botToken
|
||||
```
|
||||
|
||||
### 日志聚合
|
||||
```bash
|
||||
# SSH隧道访问2号机日志
|
||||
ssh -L 18790:localhost:18789 root@192.168.0.32
|
||||
|
||||
# 然后本地查看
|
||||
openclaw logs --follow --port 18790
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-03 21:40 GMT+8*
|
||||
*维护者: 青龙 🐉*
|
||||
*参考: 2号机部署完整记录 (memory/2026-02-03.md)*
|
||||
@@ -0,0 +1,366 @@
|
||||
# Ollama + OpenClaw 配置指南
|
||||
|
||||
## 概述
|
||||
|
||||
Ollama 是一个本地 LLM 运行时,让你能轻松在本地运行开源模型。OpenClaw 通过 OpenAI 兼容 API 与 Ollama 集成。
|
||||
|
||||
---
|
||||
|
||||
## 一、Ollama 安装与配置
|
||||
|
||||
### 安装 Ollama
|
||||
|
||||
```bash
|
||||
# Linux
|
||||
curl -fsSL https://ollama.ai/install.sh | sh
|
||||
|
||||
# 启动服务
|
||||
ollama serve
|
||||
|
||||
# 设置开机自启(Linux)
|
||||
sudo systemctl enable ollama
|
||||
sudo systemctl start ollama
|
||||
```
|
||||
|
||||
### 配置跨主机访问
|
||||
|
||||
默认只监听 `127.0.0.1`,需要配置才能从其他机器访问:
|
||||
|
||||
```bash
|
||||
# 方法1:环境变量
|
||||
export OLLAMA_HOST=0.0.0.0:11434
|
||||
|
||||
# 方法2: systemd 服务配置
|
||||
sudo systemctl edit ollama
|
||||
```
|
||||
|
||||
添加:
|
||||
```ini
|
||||
[Service]
|
||||
Environment="OLLAMA_HOST=0.0.0.0:11434"
|
||||
```
|
||||
|
||||
重启服务:
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart ollama
|
||||
```
|
||||
|
||||
验证:
|
||||
```bash
|
||||
curl http://192.168.0.66:11434/api/tags
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、OpenClaw 配置 Ollama
|
||||
|
||||
### 方法1:自动发现(推荐)
|
||||
|
||||
设置环境变量即可自动发现模型:
|
||||
|
||||
```bash
|
||||
# 设置 API key(任意值,Ollama 不验证)
|
||||
export OLLAMA_API_KEY="ollama-local"
|
||||
|
||||
# 或在配置中设置
|
||||
openclaw config set models.providers.ollama.apiKey "ollama-local"
|
||||
```
|
||||
|
||||
自动发现会:
|
||||
- 查询 `/api/tags` 和 `/api/show`
|
||||
- 只保留报告支持工具的模型
|
||||
- 自动设置 contextWindow 和 maxTokens
|
||||
|
||||
### 方法2:显式配置(远程主机)
|
||||
|
||||
当 Ollama 在其他主机时,需要显式配置:
|
||||
|
||||
```json5
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"ollama": {
|
||||
"baseUrl": "http://192.168.0.66:11434/v1",
|
||||
"apiKey": "ollama-local",
|
||||
"api": "openai-completions"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 设置默认模型
|
||||
|
||||
```json5
|
||||
{
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "ollama/llama3.3",
|
||||
"fallbacks": ["ollama/qwen2.5-coder:32b"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、推荐模型
|
||||
|
||||
### 对话模型
|
||||
|
||||
| 模型 | 大小 | 说明 |
|
||||
|------|------|------|
|
||||
| llama3.3 | ~5GB | 70B 参数,推荐主力 |
|
||||
| qwen2.5-coder:32b | ~20GB | 代码能力强 |
|
||||
| deepseek-r1:32b | ~20GB | 推理能力强 |
|
||||
|
||||
拉取命令:
|
||||
```bash
|
||||
ollama pull llama3.3
|
||||
ollama pull qwen2.5-coder:32b
|
||||
ollama pull deepseek-r1:32b
|
||||
```
|
||||
|
||||
### Embedding 模型(用于内存管理)
|
||||
|
||||
| 模型 | 大小 | 说明 |
|
||||
|------|------|------|
|
||||
| nomic-embed-text | ~137MB | 推荐,质量好 |
|
||||
| mxbai-embed-large | ~334MB | 更大,质量更好 |
|
||||
| all-minilm | ~23MB | 轻量级 |
|
||||
|
||||
拉取命令:
|
||||
```bash
|
||||
# 推荐
|
||||
ollama pull nomic-embed-text
|
||||
|
||||
# 或轻量级
|
||||
ollama pull all-minilm
|
||||
```
|
||||
|
||||
### 验证 Embedding 模型
|
||||
|
||||
```bash
|
||||
curl http://192.168.0.66:11434/api/tags | python3 -c "import sys,json; print([m['name'] for m in json.load(sys.stdin).get('models',[])])"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、内存管理器配置
|
||||
|
||||
### 启用内存管理器
|
||||
|
||||
内存管理器需要 embedding 模型:
|
||||
|
||||
```json5
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"ollama": {
|
||||
"baseUrl": "http://192.168.0.66:11434/v1",
|
||||
"apiKey": "ollama-local",
|
||||
"api": "openai-completions",
|
||||
"embedding": "nomic-embed-text" // 指定 embedding 模型
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 环境变量配置
|
||||
|
||||
```bash
|
||||
# OpenClaw 配置文件
|
||||
export OLLAMA_API_KEY="ollama-local"
|
||||
export OLLAMA_EMBEDDING_MODEL="nomic-embed-text"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、故障排查
|
||||
|
||||
### Ollama 未检测到
|
||||
|
||||
```bash
|
||||
# 1. 检查 Ollama 是否运行
|
||||
ps aux | grep ollama
|
||||
|
||||
# 2. 检查 API 是否可达
|
||||
curl http://localhost:11434/api/tags
|
||||
|
||||
# 3. 重启 Ollama
|
||||
ollama serve
|
||||
|
||||
# 4. 检查环境变量
|
||||
echo $OLLAMA_API_KEY
|
||||
```
|
||||
|
||||
### 没有可用模型
|
||||
|
||||
OpenClaw 只自动发现支持工具的模型:
|
||||
|
||||
```bash
|
||||
# 检查模型是否安装
|
||||
ollama list
|
||||
|
||||
# 拉取支持工具的模型
|
||||
ollama pull llama3.3
|
||||
|
||||
# 或显式配置模型(如果不想用自动发现)
|
||||
openclaw config set models.providers.ollama.models[0].id "llama3.3"
|
||||
```
|
||||
|
||||
### 连接被拒绝
|
||||
|
||||
```bash
|
||||
# 检查端口
|
||||
lsof -i :11434
|
||||
|
||||
# 检查防火墙
|
||||
sudo ufw status
|
||||
|
||||
# Ollama 绑定地址
|
||||
curl http://127.0.0.1:11434/api/tags # 本机测试
|
||||
curl http://192.168.0.66:11434/api/tags # 远程测试
|
||||
```
|
||||
|
||||
### 模型不工作
|
||||
|
||||
```bash
|
||||
# 测试模型运行
|
||||
ollama run llama3.3 "Hello"
|
||||
|
||||
# 检查模型信息
|
||||
ollama show llama3.3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、完整配置示例
|
||||
|
||||
### 单机配置(Ollama 和 OpenClaw 同机)
|
||||
|
||||
```json5
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"ollama": {
|
||||
"apiKey": "ollama-local",
|
||||
"models": [
|
||||
{ "id": "llama3.3", "contextWindow": 32768 },
|
||||
{ "id": "qwen2.5-coder:32b" }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "ollama/llama3.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 多机配置(主力机 Ollama + OpenClaw 独立)
|
||||
|
||||
**主力机 (192.168.0.66):**
|
||||
```bash
|
||||
# Ollama 配置
|
||||
export OLLAMA_HOST=0.0.0.0:11434
|
||||
systemctl restart ollama
|
||||
|
||||
# 拉取模型
|
||||
ollama pull llama3.3
|
||||
ollama pull nomic-embed-text
|
||||
```
|
||||
|
||||
**OpenClaw 主机:**
|
||||
```json5
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"ollama": {
|
||||
"baseUrl": "http://192.168.0.66:11434/v1",
|
||||
"apiKey": "ollama-local",
|
||||
"api": "openai-completions"
|
||||
},
|
||||
"minimax": { /* ... */ },
|
||||
"deepseek": { /* ... */ }
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "ollama/llama3.3",
|
||||
"fallbacks": ["deepseek/deepseek-chat", "minimax/minimax-m2.1"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、性能优化
|
||||
|
||||
### 模型加载
|
||||
|
||||
```bash
|
||||
# 预加载模型(加速首次调用)
|
||||
ollama pull llama3.3
|
||||
|
||||
# 查看已加载模型
|
||||
ollama ps
|
||||
```
|
||||
|
||||
### 资源管理
|
||||
|
||||
```bash
|
||||
# 设置 GPU 使用率(如果有多 GPU)
|
||||
export CUDA_VISIBLE_DEVICES=0
|
||||
|
||||
# 设置内存限制
|
||||
export OLLAMA_NUM_PARALLEL=4
|
||||
```
|
||||
|
||||
### 监控
|
||||
|
||||
```bash
|
||||
# 查看 Ollama 日志
|
||||
journalctl -u ollama -f
|
||||
|
||||
# 查看资源使用
|
||||
htop | grep ollama
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、相关命令速查
|
||||
|
||||
| 任务 | 命令 |
|
||||
|------|------|
|
||||
| 列出模型 | `ollama list` |
|
||||
| 拉取模型 | `ollama pull <model>` |
|
||||
| 删除模型 | `ollama rm <model>` |
|
||||
| 运行模型 | `ollama run <model>` |
|
||||
| 查看模型信息 | `ollama show <model>` |
|
||||
| 查看运行中模型 | `ollama ps` |
|
||||
| 测试 API | `curl http://localhost:11434/api/tags` |
|
||||
|
||||
---
|
||||
|
||||
## 九、相关文档
|
||||
|
||||
- [OpenClaw Ollama Provider](https://docs.openclaw.ai/providers/ollama)
|
||||
- [Ollama 官方文档](https://ollama.ai)
|
||||
- [Ollama Embedding 模型](https://ollama.com/blog/embedding-models)
|
||||
- [OpenClaw 模型配置](./GATEWAY_CONFIGURATION.md)
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-04*
|
||||
@@ -0,0 +1,741 @@
|
||||
# 🤖 OpenClaw 机器人配置方案标准文件
|
||||
|
||||
> 版本: v1.0
|
||||
> 创建日期: 2026-02-07
|
||||
> 制定者: 2号机 (守护者)
|
||||
> **核心原则**: 稳定优先 > 功能保证
|
||||
|
||||
---
|
||||
|
||||
## 📋 目录
|
||||
|
||||
1. [配置优先级](#配置优先级)
|
||||
2. [核心配置](#核心配置)
|
||||
3. [功能配置](#功能配置)
|
||||
4. [监控体系](#监控体系)
|
||||
5. [故障恢复](#故障恢复)
|
||||
6. [部署清单](#部署清单)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 配置优先级
|
||||
|
||||
### P0 - 核心配置 (必须配置)
|
||||
|
||||
| 优先级 | 配置项 | 状态 | 说明 |
|
||||
|--------|--------|------|------|
|
||||
| P0-1 | Gateway 运行配置 | ✅ | 绑定模式、端口、认证 |
|
||||
| P0-2 | 代理配置 | ✅ | NO_PROXY、系统代理 |
|
||||
| P0-3 | 模型提供商 | ✅ | MiniMax/DeepSeek/Ollama |
|
||||
| P0-4 | 会话管理 | ✅ | 会话文件路径、大小监控 |
|
||||
| P0-5 | 监控告警 | ✅ | 系统监控脚本、Telegram 告警 |
|
||||
| P0-6 | 日志管理 | ✅ | 日志级别、文件轮转 |
|
||||
|
||||
### P1 - 重要配置 (强烈建议)
|
||||
|
||||
| 配置项 | 说明 |
|
||||
|--------|------|
|
||||
| 安全配置 | API Key 加密、访问控制 |
|
||||
| 备份策略 | 会话文件自动备份 |
|
||||
| 健康检查 | 定期健康检查脚本 |
|
||||
|
||||
### P2 - 功能配置 (可选功能)
|
||||
|
||||
| 功能 | 优先级 | 说明 |
|
||||
|------|--------|------|
|
||||
| **浏览器** | P2 | 网页浏览、内容抓取 |
|
||||
| **人格化** | P2 | Agent 记忆、性格塑造 |
|
||||
| RSS 订阅 | P2 | 内容聚合 |
|
||||
| TTS 语音 | P2 | 文本转语音 |
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 核心配置
|
||||
|
||||
### 1. Gateway 运行配置
|
||||
|
||||
```json
|
||||
{
|
||||
"gateway": {
|
||||
"binding": "0.0.0.0:18789",
|
||||
"auth": {
|
||||
"enabled": true,
|
||||
"token": "${GATEWAY_TOKEN}"
|
||||
},
|
||||
"cors": {
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**配置原则:**
|
||||
- 绑定地址:内网使用 0.0.0.0,外网使用 127.0.0.1
|
||||
- 认证:生产环境必须启用
|
||||
- CORS:仅开发环境开启
|
||||
|
||||
### 2. 代理配置
|
||||
|
||||
```bash
|
||||
# /etc/environment
|
||||
NO_PROXY="localhost,127.0.0.1,192.168.0.66"
|
||||
no_proxy="localhost,127.0.0.1,192.168.0.66"
|
||||
HTTP_PROXY="http://192.168.0.66:7890"
|
||||
HTTPS_PROXY="http://192.168.0.66:7890"
|
||||
```
|
||||
|
||||
**启动命令:**
|
||||
```bash
|
||||
NO_PROXY="localhost.0.1,127.0,192.168.0.66" openclaw gateway restart
|
||||
```
|
||||
|
||||
### 3. 模型提供商配置
|
||||
|
||||
```json
|
||||
{
|
||||
"providers": {
|
||||
"minimax": {
|
||||
"models": {
|
||||
"default": "minimax-minimax"
|
||||
}
|
||||
},
|
||||
"deepseek": {
|
||||
"models": {
|
||||
"default": "deepseek-chat"
|
||||
}
|
||||
},
|
||||
"ollama": {
|
||||
"remote": {
|
||||
"baseUrl": "http://localhost:11434/v1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**配置原则:**
|
||||
- 主力模型:MiniMax (原生推理)
|
||||
- 备用模型:DeepSeek (成本低)
|
||||
- 本地模型:Ollama (离线备用)
|
||||
|
||||
### 4. 会话管理配置
|
||||
|
||||
```json
|
||||
{
|
||||
"sessions": {
|
||||
"path": "/root/.openclaw/agents/main/sessions",
|
||||
"maxSize": "8MB",
|
||||
"warnSize": "5MB",
|
||||
"autoArchive": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**监控阈值:**
|
||||
| 条件 | 动作 |
|
||||
|------|------|
|
||||
| ≥5MB | 发送警告日志 |
|
||||
| ≥8MB | 发送 Telegram 告警 |
|
||||
| 完成后 | 建议开新会话 |
|
||||
|
||||
### 5. 监控告警配置
|
||||
|
||||
#### 5.1 系统监控脚本
|
||||
|
||||
```bash
|
||||
# /root/.openclaw/scripts/system-monitor.sh
|
||||
#!/bin/bash
|
||||
|
||||
# 监控间隔 (秒)
|
||||
INTERVAL=300
|
||||
|
||||
# 告警阈值
|
||||
CPU_THRESHOLD=80
|
||||
MEM_THRESHOLD=85
|
||||
DISK_THRESHOLD=90
|
||||
|
||||
# Telegram 告警
|
||||
TELEGRAM_TOKEN="8202664888:AAE0UyCFJJBLC8notdmT42XOJRBoWLJ6XOI"
|
||||
CHAT_ID="5117446326"
|
||||
```
|
||||
|
||||
#### 5.2 会话文件监控
|
||||
|
||||
```bash
|
||||
# 检查会话文件大小
|
||||
SESSION_DIR="/root/.openclaw/agents/main/sessions"
|
||||
WARN_SIZE=8388608 # 8MB
|
||||
|
||||
for session_file in "$SESSION_DIR"/*.jsonl; do
|
||||
size=$(stat -f%z "$session_file" 2>/dev/null || stat -c%s "$session_file" 2>/dev/null)
|
||||
if [ "$size" -gt "$WARN_SIZE" ]; then
|
||||
# 发送 Telegram 告警
|
||||
curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" \
|
||||
-d "chat_id=$CHAT_ID" \
|
||||
-d "text=⚠️ 会话文件过大: $(basename $session_file) ($(expr $size / 1024 / 1024)MB)"
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
### 6. 日志管理配置
|
||||
|
||||
```bash
|
||||
# 日志配置
|
||||
OPENCLAW_LOG_DIR="/tmp/openclaw"
|
||||
OPENCLAW_LOG_LEVEL="info"
|
||||
|
||||
# 日志轮转 (logrotate)
|
||||
# /etc/logrotate.d/openclaw
|
||||
/var/log/openclaw/*.log {
|
||||
daily
|
||||
rotate 7
|
||||
compress
|
||||
delaycompress
|
||||
missingok
|
||||
notifempty
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎭 功能配置
|
||||
|
||||
> **注意**: 以下功能为 P2 优先级,不影响核心运行
|
||||
|
||||
### 1. 浏览器功能 (P2)
|
||||
|
||||
```json
|
||||
{
|
||||
"browser": {
|
||||
"enabled": true,
|
||||
"profile": "openclaw",
|
||||
"timeout": 30000,
|
||||
"headless": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**配置原则:**
|
||||
- 需要 OpenClaw Browser Extension
|
||||
- 作为备用工具,不作为核心依赖
|
||||
- 优先使用 web_fetch
|
||||
|
||||
**已知问题:**
|
||||
- 2号机:OpenClaw 扩展未连接
|
||||
- 替代方案:使用 web_fetch
|
||||
|
||||
### 2. 人格化功能 (P2)
|
||||
|
||||
#### 2.1 基础人格文件
|
||||
|
||||
```bash
|
||||
# 人格文件目录结构
|
||||
/root/.openclaw/identity/
|
||||
├── IDENTITY.md - 身份定义 (Who am I?)
|
||||
├── SOUL.md - 灵魂/性格 (Who am I becoming?)
|
||||
└── USER.md - 用户偏好 (Who am I helping?)
|
||||
```
|
||||
|
||||
#### 2.2 IDENTITY.md 模板
|
||||
|
||||
```markdown
|
||||
# IDENTITY.md - {机器人名称}是谁?
|
||||
|
||||
- **Name:** {名称}
|
||||
- **Code Name:** {代号}
|
||||
- **Creature:** AI Assistant
|
||||
- **Vibe:** {风格描述}
|
||||
- **Emoji:** {表情符号}
|
||||
|
||||
## Core Identity
|
||||
|
||||
{一句话描述}
|
||||
|
||||
## Role
|
||||
|
||||
### Primary Duties
|
||||
1. {职责1}
|
||||
2. {职责2}
|
||||
3. {职责3}
|
||||
```
|
||||
|
||||
#### 2.3 SOUL.md 模板 (包含记忆召回规则)
|
||||
|
||||
```markdown
|
||||
# SOUL.md - {机器人名称}的灵魂
|
||||
|
||||
__{风格描述}__
|
||||
|
||||
## Core Truths
|
||||
|
||||
**性格特点1** - {说明}
|
||||
**性格特点2** - {说明}
|
||||
**性格特点3** - {说明}
|
||||
|
||||
## Boundaries
|
||||
|
||||
- {边界1}
|
||||
- {边界2}
|
||||
- {边界3}
|
||||
|
||||
## Vibe
|
||||
|
||||
- {风格1}
|
||||
- {风格2}
|
||||
- {风格3}
|
||||
|
||||
## 记忆召回规则
|
||||
|
||||
**每次回答配置/规格类问题前,必须执行以下流程:**
|
||||
|
||||
### 1. 强制召回流程
|
||||
|
||||
回答前必须:
|
||||
1. memory_search(相关关键词)
|
||||
2. memory_get(相关文件)
|
||||
3. 必要时读取配置文件
|
||||
4. 必要时查询实际系统
|
||||
5. 基于事实回答,绝不凭印象
|
||||
|
||||
### 2. 召回优先级
|
||||
|
||||
| 问题类型 | 召回来源 |
|
||||
|----------|----------|
|
||||
| 系统配置 | openclaw.json + 配置文档 |
|
||||
| 硬件规格 | MEMORY.md + 实际查询 |
|
||||
| 历史决策 | memory/YYYY-MM-DD.md |
|
||||
| 用户偏好 | USER.md |
|
||||
|
||||
### 3. 禁止行为
|
||||
|
||||
- ❌ 完全凭印象回答
|
||||
- ❌ 不检查记忆直接回答
|
||||
- ❌ 假设应该记得
|
||||
- ❌ 用大概可能回答配置问题
|
||||
|
||||
### 4. 正确示例
|
||||
|
||||
用户: X 内存多少?
|
||||
我: (执行 memory_search) → 回答: 8GB DDR3
|
||||
|
||||
### 5. 错误示例
|
||||
|
||||
用户: X 内存多少?
|
||||
我: 应该是 8GB 吧 (未检查记忆)
|
||||
|
||||
---
|
||||
|
||||
> 记忆是资产的保险,回答前先查阅。
|
||||
```
|
||||
|
||||
#### 2.4 USER.md 模板
|
||||
|
||||
```markdown
|
||||
# USER.md - {机器人名称}服务的用户
|
||||
|
||||
## User Context
|
||||
|
||||
- **Name:** {用户名}
|
||||
- **Platform:** {平台}
|
||||
- **ID:** {ID}
|
||||
- **Timezone:** {时区}
|
||||
|
||||
## Notes
|
||||
|
||||
- {偏好1}
|
||||
- {偏好2}
|
||||
- {偏好3}
|
||||
```
|
||||
|
||||
#### 2.5 快速人格配置脚本
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# configure_personality.sh <名称> <代号> <风格> <Emoji>
|
||||
|
||||
NAME=$1
|
||||
CODE_NAME=$2
|
||||
VIBE=$3
|
||||
EMOJI=$4
|
||||
|
||||
mkdir -p /root/.openclaw/identity
|
||||
|
||||
# 创建人格文件...
|
||||
echo "✅ $NAME 人格文件创建完成"
|
||||
```
|
||||
|
||||
#### 2.6 配置原则
|
||||
|
||||
| 原则 | 说明 |
|
||||
|------|------|
|
||||
| 轻量化优先 | 基于文件的人格化,不依赖外部服务 |
|
||||
| 记忆召回 | 回答配置类问题前必须先搜索记忆 |
|
||||
| 跨会话持久化 | memory/ 目录存储长期记忆 |
|
||||
|
||||
---
|
||||
|
||||
### 3. 记忆系统方案
|
||||
|
||||
#### 3.1 轻量化方案 (低配置机器)
|
||||
|
||||
```bash
|
||||
# 使用 OpenClaw 自带 Memory
|
||||
openclaw memory status # 确认已启用
|
||||
```
|
||||
|
||||
**配置:**
|
||||
- 存储: SQLite
|
||||
- 向量: nomic-embed-text:latest
|
||||
- 适合: 2号机 (8GB RAM + HDD)
|
||||
|
||||
#### 3.2 memU 方案 (中配置机器)
|
||||
|
||||
```bash
|
||||
# memU - 24/7 主动记忆
|
||||
# GitHub: github.com/mem0ai/mem0
|
||||
# Stars: 8.1k
|
||||
# 版本: v1.4.0 (Feb 6, 2026)
|
||||
|
||||
pip install mem0ai
|
||||
|
||||
# 配置
|
||||
export MEM0_API_KEY="your-key"
|
||||
```
|
||||
|
||||
**特点:**
|
||||
- Python 架构
|
||||
- 主动记忆学习
|
||||
- OpenClaw 替代方案
|
||||
|
||||
#### 3.3 MemOS 方案 (高配置机器)
|
||||
|
||||
```bash
|
||||
# MemOS - 技能进化型记忆
|
||||
# GitHub: github.com/MemTensor/MemOS
|
||||
# Stars: 5k
|
||||
# 版本: v2.0.4 (Jan 30, 2026)
|
||||
# 官网: memtensor.ai
|
||||
|
||||
# Docker 部署 (青龙方案)
|
||||
docker run -d -p 8000:8000 memtensor/memos:latest
|
||||
```
|
||||
|
||||
**特点:**
|
||||
- 官方 OpenClaw 插件
|
||||
- +43.70% 准确率
|
||||
- Neo4j + Qdrant 双存储
|
||||
- 适合: 青龙 (NVMe SSD)
|
||||
|
||||
#### 3.4 记忆方案对比
|
||||
|
||||
| 方案 | 复杂度 | 资源占用 | 适合场景 |
|
||||
|------|--------|----------|----------|
|
||||
| **OpenClaw Memory** | 低 | ~100MB | 2号机 (轻量首选) |
|
||||
| **memU** | 中 | ~200-500MB | 中配置机器 |
|
||||
| **MemOS** | 高 | ~2GB | 青龙 (SSD 高配) |
|
||||
|
||||
---
|
||||
|
||||
### 4. RSS 订阅功能 (P2)
|
||||
|
||||
### 3. RSS 订阅功能 (P2)
|
||||
|
||||
```json
|
||||
{
|
||||
"rss": {
|
||||
"enabled": false,
|
||||
"feeds": [],
|
||||
"interval": 3600
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**配置原则:**
|
||||
- 需要外部 HTTP 请求
|
||||
- 代理不稳定时不启用
|
||||
- 作为后台任务运行
|
||||
|
||||
### 4. TTS 语音功能 (P2)
|
||||
|
||||
```json
|
||||
{
|
||||
"tts": {
|
||||
"enabled": false,
|
||||
"provider": "sag",
|
||||
"voice": "default"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**配置原则:**
|
||||
- 需要 ElevenLabs API (成本)
|
||||
- 仅在用户明确要求时启用
|
||||
- 主要用于故事朗读
|
||||
|
||||
---
|
||||
|
||||
## 📊 监控体系
|
||||
|
||||
### 1. 监控指标
|
||||
|
||||
| 指标 | 阈值 | 告警级别 |
|
||||
|------|------|----------|
|
||||
| Gateway 状态 | down | 🔴 严重 |
|
||||
| CPU 使用率 | >80% | 🟡 警告 |
|
||||
| 内存使用率 | >85% | 🟡 警告 |
|
||||
| 磁盘使用率 | >90% | 🔴 严重 |
|
||||
| 会话文件大小 | >8MB | 🟡 警告 |
|
||||
| 代理连接失败 | >3次 | 🟡 警告 |
|
||||
|
||||
### 2. 监控脚本
|
||||
|
||||
```bash
|
||||
# /root/.openclaw/scripts/health-check.sh
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
check_gateway() {
|
||||
if ! pgrep -f "openclaw" > /dev/null; then
|
||||
echo "🔴 Gateway 未运行"
|
||||
return 1
|
||||
fi
|
||||
echo "✅ Gateway 运行正常"
|
||||
}
|
||||
|
||||
check_memory() {
|
||||
mem_usage=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100}')
|
||||
if (( $(echo "$mem_usage > 85" | bc -l) )); then
|
||||
echo "🟡 内存使用率: ${mem_usage}%"
|
||||
else
|
||||
echo "✅ 内存使用率: ${mem_usage}%"
|
||||
fi
|
||||
}
|
||||
|
||||
check_sessions() {
|
||||
session_count=$(ls /root/.openclaw/agents/main/sessions/*.jsonl 2>/dev/null | wc -l)
|
||||
echo "📁 会话文件数量: $session_count"
|
||||
}
|
||||
|
||||
# 运行检查
|
||||
check_gateway
|
||||
check_memory
|
||||
check_sessions
|
||||
```
|
||||
|
||||
### 3. Telegram 告警
|
||||
|
||||
```bash
|
||||
# /root/.openclaw/scripts/send-alert.sh
|
||||
#!/bin/bash
|
||||
|
||||
TELEGRAM_TOKEN="your_token"
|
||||
CHAT_ID="your_chat_id"
|
||||
|
||||
send_alert() {
|
||||
local level=$1
|
||||
local message=$2
|
||||
|
||||
case $level in
|
||||
critical)
|
||||
emoji="🔴"
|
||||
;;
|
||||
warning)
|
||||
emoji="🟡"
|
||||
;;
|
||||
info)
|
||||
emoji="ℹ️"
|
||||
;;
|
||||
esac
|
||||
|
||||
curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" \
|
||||
-d "chat_id=$CHAT_ID" \
|
||||
-d "text=$emoji $message"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 故障恢复
|
||||
|
||||
### 1. 自动恢复策略
|
||||
|
||||
```bash
|
||||
# /root/.openclaw/scripts/auto-recovery.sh
|
||||
#!/bin/bash
|
||||
|
||||
restart_gateway() {
|
||||
echo "[$(date)] 检测到 Gateway 异常,尝试重启..."
|
||||
NO_PROXY="localhost,127.0.0.1,192.168.0.66" openclaw gateway restart
|
||||
sleep 5
|
||||
|
||||
if pgrep -f "openclaw" > /dev/null; then
|
||||
echo "[$(date)] Gateway 重启成功"
|
||||
send_alert info "Gateway 已自动重启"
|
||||
else
|
||||
echo "[$(date)] Gateway 重启失败,尝试强制重启"
|
||||
pkill -9 -f openclaw
|
||||
sleep 2
|
||||
NO_PROXY="localhost,127.0.0.1,192.168.0.66" openclaw gateway restart
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查 Gateway 是否存活
|
||||
if ! pgrep -f "openclaw.*gateway" > /dev/null; then
|
||||
restart_gateway
|
||||
fi
|
||||
```
|
||||
|
||||
### 2. 常见故障处理
|
||||
|
||||
| 故障现象 | 可能原因 | 解决方案 |
|
||||
|----------|----------|----------|
|
||||
| Gateway 无响应 | 内存泄漏 | 强制重启 |
|
||||
| 会话文件过大 (>10MB) | Compaction 卡死 | 手动清理 |
|
||||
| 代理连接失败 | 代理服务异常 | 检查代理 |
|
||||
| 模型调用超时 | 网络/配置问题 | 检查配置 |
|
||||
| 监控脚本报错 | awk 语法错误 | 使用 heredoc |
|
||||
|
||||
### 3. Compaction 处理
|
||||
|
||||
```bash
|
||||
# 清理卡死的会话文件
|
||||
cleanup_compaction() {
|
||||
echo "[$(date)] 清理卡死的会话文件..."
|
||||
|
||||
# 查找大文件
|
||||
find /root/.openclaw/agents/main/sessions -name "*.jsonl" -size +5M
|
||||
|
||||
# 备份大文件
|
||||
timestamp=$(date +%Y%m%d_%H%M%S)
|
||||
mkdir -p /root/.openclaw/backup/sessions_$timestamp
|
||||
|
||||
# 移动大文件到备份目录
|
||||
find /root/.openclaw/agents/main/sessions -name "*.jsonl" -size +10M \
|
||||
-exec mv {} /root/.openclaw/backup/sessions_$timestamp/ \;
|
||||
|
||||
echo "[$(date)] 已清理会话文件,备份到 $timestamp"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📦 部署清单
|
||||
|
||||
### 部署前检查
|
||||
|
||||
```bash
|
||||
# 1. 检查系统要求
|
||||
- [ ] Python >= 3.10
|
||||
- [ ] Node.js >= 18
|
||||
- [ ] 内存 >= 4GB
|
||||
- [ ] 磁盘 >= 10GB
|
||||
|
||||
# 2. 检查依赖
|
||||
- [ ] Git
|
||||
- [ ] curl
|
||||
- [ ] jq
|
||||
- [ ] logrotate
|
||||
|
||||
# 3. 检查网络
|
||||
- [ ] 代理可访问
|
||||
- [ ] Telegram 可访问
|
||||
- [ ] 模型 API 可访问
|
||||
```
|
||||
|
||||
### 部署步骤
|
||||
|
||||
```bash
|
||||
# 1. 安装 OpenClaw
|
||||
git clone https://github.com/openclaw/openclaw.git
|
||||
cd openclaw
|
||||
npm install
|
||||
|
||||
# 2. 配置核心设置
|
||||
cp config.example.json openclaw.json
|
||||
# 编辑 openclaw.json (见核心配置)
|
||||
|
||||
# 3. 配置监控脚本
|
||||
cp scripts/system-monitor.sh /root/.openclaw/scripts/
|
||||
chmod +x /root/.openclaw/scripts/*.sh
|
||||
|
||||
# 4. 配置 systemd 服务
|
||||
cp openclaw.service /etc/systemd/system/
|
||||
systemctl daemon-reload
|
||||
systemctl enable openclaw
|
||||
systemctl start openclaw
|
||||
|
||||
# 5. 配置 logrotate
|
||||
cp openclaw.logrotate /etc/logrotate.d/
|
||||
|
||||
# 6. 验证部署
|
||||
openclaw doctor
|
||||
```
|
||||
|
||||
### 验证检查
|
||||
|
||||
```bash
|
||||
# 核心功能验证
|
||||
✅ Gateway 运行: pgrep -f "openclaw"
|
||||
✅ 端口监听: netstat -tlnp | grep 18789
|
||||
✅ 模型调用: openclaw test model
|
||||
✅ Telegram 连接: openclaw telegram status
|
||||
|
||||
# 功能验证
|
||||
✅ RSS 订阅: (可选)
|
||||
✅ TTS 语音: (可选)
|
||||
✅ 浏览器: (可选)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📈 性能基准
|
||||
|
||||
### 基准配置
|
||||
|
||||
| 组件 | 最低配置 | 推荐配置 |
|
||||
|------|----------|----------|
|
||||
| CPU | 2 核心 | 4 核心 |
|
||||
| 内存 | 4GB | 8GB |
|
||||
| 存储 | 10GB HDD | 50GB SSD |
|
||||
| 网络 | 10Mbps | 100Mbps |
|
||||
|
||||
### 预期性能
|
||||
|
||||
| 指标 | 预期值 | 备注 |
|
||||
|------|--------|------|
|
||||
| 启动时间 | <30s | 冷启动 |
|
||||
| 对话响应 | <5s | 正常负载 |
|
||||
| 内存占用 | <500MB | 稳定后 |
|
||||
| 并发会话 | 1-3 | 建议 |
|
||||
|
||||
---
|
||||
|
||||
## 🔒 安全基线
|
||||
|
||||
### 必须配置
|
||||
|
||||
- [ ] Gateway 认证令牌
|
||||
- [ ] API Key 加密存储
|
||||
- [ ] 禁止 root 运行 (除非必要)
|
||||
- [ ] 防火墙规则 (仅开放必要端口)
|
||||
|
||||
### 建议配置
|
||||
|
||||
- [ ] HTTPS 终结 (使用 nginx)
|
||||
- [ ] Rate Limiting
|
||||
- [ ] 审计日志
|
||||
- [ ] 定期安全更新
|
||||
|
||||
---
|
||||
|
||||
## 📝 版本历史
|
||||
|
||||
| 版本 | 日期 | 修改内容 |
|
||||
|------|------|----------|
|
||||
| v1.0 | 2026-02-07 | 初始版本 |
|
||||
| v1.1 | 2026-02-07 | 新增人格化配置、memU/MemOS 方案、记忆召回规则 |
|
||||
|
||||
---
|
||||
|
||||
*文档版本: v1.1 | 最后更新: 2026-02-07*
|
||||
@@ -0,0 +1,554 @@
|
||||
# OpenClaw 系统健康检查标准流程
|
||||
|
||||
> **文档版本:** v1.0
|
||||
> **创建日期:** 2026-02-06
|
||||
> **用途:** OpenClaw 守护者日常自我健康检查标准流程
|
||||
> **执行方式:** `/root/.openclaw/scripts/standard-check.sh`
|
||||
|
||||
---
|
||||
|
||||
## 📋 检查概述
|
||||
|
||||
本标准流程用于 OpenClaw 守护者 (2号机) 进行系统性自我健康检查,确保所有核心组件正常运行。
|
||||
|
||||
**检查频率:**
|
||||
- ⏰ **每日自动:** 通过 cron 定时任务执行 (每日 00:00)
|
||||
- 🔧 **手动执行:** `/root/.openclaw/scripts/standard-check.sh`
|
||||
- 🚨 **异常时执行:** 服务不稳定或收到告警时
|
||||
|
||||
**通过标准:** 0 个失败项 (允许最多 1-2 个警告项)
|
||||
|
||||
---
|
||||
|
||||
## 🛡️ 九步检查流程
|
||||
|
||||
### 【第一步】系统基础信息
|
||||
|
||||
**检查目的:** 确认系统基本信息,记录运行状态
|
||||
|
||||
**检查项:**
|
||||
| 项目 | 说明 | 正常范围 |
|
||||
|------|------|----------|
|
||||
| 主机名 | 当前运行主机 | `yh6788-ThinkPad-X230` |
|
||||
| 内核版本 | Linux 内核 | 6.x.x |
|
||||
| 运行时间 | 系统启动后持续运行时间 | > 0 |
|
||||
|
||||
**执行命令:**
|
||||
```bash
|
||||
hostname
|
||||
uname -r
|
||||
uptime -p
|
||||
```
|
||||
|
||||
**预期结果:**
|
||||
- ✅ 系统正常运行,无异常重启
|
||||
- ✅ 运行时间符合预期 (通常 > 1小时)
|
||||
|
||||
---
|
||||
|
||||
### 【第二步】OpenClaw 服务检查
|
||||
|
||||
**检查目的:** 确认 Gateway 核心服务运行状态
|
||||
|
||||
**检查项:**
|
||||
| 检查点 | 说明 | 正常状态 |
|
||||
|--------|------|----------|
|
||||
| Gateway 进程 | openclaw-gateway 主进程 | 运行中 (有 PID) |
|
||||
| Gateway 端口 | 默认监听端口 18789 | 正常监听 |
|
||||
|
||||
**执行命令:**
|
||||
```bash
|
||||
# 检查进程
|
||||
pgrep -f "openclaw-gateway"
|
||||
|
||||
# 检查端口
|
||||
ss -tlnp | grep ":18789 "
|
||||
# 或
|
||||
netstat -tlnp | grep ":18789 "
|
||||
```
|
||||
|
||||
**异常处理:**
|
||||
- ❌ **Gateway 未运行:** 执行 `openclaw gateway start`
|
||||
- ❌ **端口未监听:** 检查日志 `tail -f /tmp/openclaw/openclaw-*.log`
|
||||
|
||||
---
|
||||
|
||||
### 【第三步】Ollama 服务检查
|
||||
|
||||
**检查目的:** 确认本地向量模型服务可用
|
||||
|
||||
**检查项:**
|
||||
| 检查点 | 说明 | 正常状态 |
|
||||
|--------|------|----------|
|
||||
| Ollama 进程 | ollama serve 主进程 | 运行中 |
|
||||
| Ollama API | 本地 API 访问 | HTTP 200 |
|
||||
| 已安装模型 | 向量嵌入模型数量 | ≥1 个 |
|
||||
|
||||
**执行命令:**
|
||||
```bash
|
||||
# 检查进程
|
||||
pgrep -f "ollama serve"
|
||||
|
||||
# API 测试
|
||||
curl -s http://localhost:11434/api/version
|
||||
|
||||
# 模型列表
|
||||
curl -s http://localhost:11434/api/tags | grep -o '"name":"[^"]*"'
|
||||
```
|
||||
|
||||
**正常结果示例:**
|
||||
```json
|
||||
{"version":"0.15.4"}
|
||||
```
|
||||
|
||||
**已安装模型:**
|
||||
- `nomic-embed-text:latest` (默认,长上下文)
|
||||
- `mxbai-embed-large:latest` (快速,短文本)
|
||||
|
||||
**异常处理:**
|
||||
- ❌ **Ollama 未运行:** 执行 `ollama serve`
|
||||
- ❌ **API 不可访问:** 检查端口 11434 监听状态
|
||||
- ❌ **模型缺失:** 执行 `ollama pull nomic-embed-text:latest`
|
||||
|
||||
---
|
||||
|
||||
### 【第四步】内存索引状态
|
||||
|
||||
**检查目的:** 确认向量检索功能正常
|
||||
|
||||
**检查项:**
|
||||
| 检查点 | 说明 | 正常状态 |
|
||||
|--------|------|----------|
|
||||
| 索引状态 | 文件索引进度 | 17/18 files |
|
||||
| 向量引擎 | 向量数据库就绪 | Vector: ready |
|
||||
| 同步状态 | 是否有未保存变动 | Dirty: no |
|
||||
|
||||
**执行命令:**
|
||||
```bash
|
||||
openclaw memory status
|
||||
```
|
||||
|
||||
**输出示例:**
|
||||
```
|
||||
Memory Search (main)
|
||||
Provider: openai (requested: openai)
|
||||
Model: nomic-embed-text:latest
|
||||
Sources: memory
|
||||
Indexed: 17/18 files · 56 chunks
|
||||
Dirty: yes
|
||||
Store: ~/.openclaw/memory/main.sqlite
|
||||
Workspace: ~/.openclaw/workspace
|
||||
Vector: ready
|
||||
Vector dims: 768
|
||||
```
|
||||
|
||||
**关键指标解读:**
|
||||
- `Indexed: 17/18 files` → 17个文件已索引,共18个文件
|
||||
- `56 chunks` → 知识库已分割为56个向量块
|
||||
- `Dirty: yes` → 有文件变动,需要重新索引
|
||||
- `Vector: ready` → 向量引擎工作正常
|
||||
|
||||
**异常处理:**
|
||||
- ⚠️ **Dirty: yes:** 执行 `openclaw memory index`
|
||||
- ❌ **Vector not ready:** 重启 Gateway `openclaw gateway restart`
|
||||
- ❌ **Indexed 文件数异常:** 检查 workspace 文件完整性
|
||||
|
||||
---
|
||||
|
||||
### 【第五步】代理配置检查
|
||||
|
||||
**检查目的:** 确认网络代理配置正确,不干扰本地服务
|
||||
|
||||
**检查项:**
|
||||
| 检查点 | 说明 | 正常状态 |
|
||||
|--------|------|----------|
|
||||
| NO_PROXY | 本地服务免代理 | 已配置 |
|
||||
| 代理可达 | 外部网络访问 | 可访问 |
|
||||
|
||||
**执行命令:**
|
||||
```bash
|
||||
# 检查环境变量
|
||||
env | grep NO_PROXY
|
||||
|
||||
# 代理测试
|
||||
curl -s -o /dev/null -w "%{http_code}" --proxy http://192.168.0.66:7890 https://api.openai.com/v1/models
|
||||
```
|
||||
|
||||
**预期 NO_PROXY 配置:**
|
||||
```
|
||||
NO_PROXY=localhost,127.0.0.1,192.168.0.66,192.168.0.32,.local
|
||||
```
|
||||
|
||||
**异常处理:**
|
||||
- ❌ **NO_PROXY 未配置:** 编辑 `/etc/systemd/system/openclaw-gateway.service.d/override.conf`
|
||||
- ❌ **代理不可达:** 检查代理服务状态 (192.168.0.66:7890)
|
||||
|
||||
---
|
||||
|
||||
### 【第六步】磁盘空间检查
|
||||
|
||||
**检查目的:** 确保系统有足够磁盘空间运行
|
||||
|
||||
**检查项:**
|
||||
| 分区 | 挂载点 | 警告阈值 | 严重阈值 |
|
||||
|------|--------|----------|----------|
|
||||
| 根分区 | / | 80% | 90% |
|
||||
| Workspace | /root/.openclaw/workspace | 80% | 90% |
|
||||
|
||||
**执行命令:**
|
||||
```bash
|
||||
# 根分区
|
||||
df -h /
|
||||
|
||||
# Workspace
|
||||
df -h /root/.openclaw/workspace
|
||||
```
|
||||
|
||||
**预期结果:**
|
||||
- ✅ 使用率 < 80%
|
||||
- ✅ 可用空间 > 50GB
|
||||
|
||||
**异常处理:**
|
||||
- ⚠️ **使用率 > 80%:** 清理日志文件 `/var/log/openclaw-monitor/`
|
||||
- ❌ **使用率 > 90%:** 紧急清理,扩展磁盘
|
||||
|
||||
---
|
||||
|
||||
### 【第七步】监控脚本检查
|
||||
|
||||
**检查目的:** 确认后台监控正常运行
|
||||
|
||||
**检查项:**
|
||||
| 检查点 | 说明 | 正常状态 |
|
||||
|--------|------|----------|
|
||||
| 脚本存在 | system-monitor.sh | 存在 |
|
||||
| 语法检查 | bash -n 测试 | 无错误 |
|
||||
| 进程运行 | 监控进程 | 运行中 |
|
||||
| 日志目录 | /var/log/openclaw-monitor | 存在 |
|
||||
|
||||
**执行命令:**
|
||||
```bash
|
||||
# 检查脚本存在
|
||||
ls -la /root/.openclaw/scripts/system-monitor.sh
|
||||
|
||||
# 语法检查
|
||||
bash -n /root/.openclaw/scripts/system-monitor.sh
|
||||
|
||||
# 进程检查
|
||||
pgrep -f "system-monitor.sh"
|
||||
|
||||
# 日志文件数
|
||||
ls -1 /var/log/openclaw-monitor/*.log | wc -l
|
||||
```
|
||||
|
||||
**监控脚本功能:**
|
||||
- CPU/内存/负载实时监控
|
||||
- 阈值告警 (CPU > 80%, 内存 > 80%)
|
||||
- OpenClaw 服务状态检测
|
||||
- 日志保留 3 小时 (5400 条记录)
|
||||
|
||||
**异常处理:**
|
||||
- ❌ **脚本不存在:** 从文档恢复
|
||||
- ❌ **语法错误:** 检查最近修改
|
||||
- ❌ **进程未运行:** 执行 `nohup /root/.openclaw/scripts/system-monitor.sh &`
|
||||
|
||||
---
|
||||
|
||||
### 【第八步】配置检查
|
||||
|
||||
**检查目的:** 验证核心配置文件完整性
|
||||
|
||||
**检查项:**
|
||||
| 文件 | 说明 | 检查方法 |
|
||||
|------|------|----------|
|
||||
| openclaw.json | 主配置 | JSON 语法验证 |
|
||||
| Systemd override | 代理配置 | 文件存在验证 |
|
||||
|
||||
**执行命令:**
|
||||
```bash
|
||||
# JSON 语法检查
|
||||
python3 -m json.tool /root/.openclaw/openclaw.json > /dev/null && echo "OK"
|
||||
|
||||
# 提取当前模型配置
|
||||
grep '"model":' /root/.openclaw/openclaw.json
|
||||
|
||||
# Systemd override 检查
|
||||
cat /etc/systemd/system/openclaw-gateway.service.d/override.conf
|
||||
```
|
||||
|
||||
**openclaw.json 关键配置:**
|
||||
```json
|
||||
{
|
||||
"providers": {
|
||||
"openai": {
|
||||
"DEFAULT": ["minimax/minimax-m2.1"]
|
||||
}
|
||||
},
|
||||
"memorySearch": {
|
||||
"provider": "openai",
|
||||
"model": "nomic-embed-text:latest",
|
||||
"remote": {
|
||||
"baseUrl": "http://localhost:11434/v1",
|
||||
"apiKey": "ollama-local"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Systemd override 预期内容:**
|
||||
```ini
|
||||
[Service]
|
||||
Environment="NO_PROXY=localhost,127.0.0.1"
|
||||
Environment="no_proxy=localhost,127.0.0.1"
|
||||
```
|
||||
|
||||
**异常处理:**
|
||||
- ❌ **JSON 语法错误:** 检查引号、逗号、括号
|
||||
- ❌ **override 不存在:** 创建配置文件并重启 Gateway
|
||||
|
||||
---
|
||||
|
||||
### 【第九步】1号机 SSH 检查
|
||||
|
||||
**检查目的:** 确认协同机器人的网络连通性
|
||||
|
||||
**检查项:**
|
||||
| 检查点 | 说明 | 正常状态 |
|
||||
|--------|------|----------|
|
||||
| SSH 连接 | 1号机网络可达 | 可连接 |
|
||||
| 1号机 Gateway | 1号机 OpenClaw 服务 | 运行中 |
|
||||
|
||||
**执行命令:**
|
||||
```bash
|
||||
# SSH 连接测试 (需要配置 SSH 密钥)
|
||||
ssh -o BatchMode=yes -o ConnectTimeout=3 root@192.168.0.31 "echo 'OK'"
|
||||
|
||||
# 1号机 Gateway 检查
|
||||
ssh root@192.168.0.31 "pgrep -f openclaw-gateway"
|
||||
```
|
||||
|
||||
**1号机信息:**
|
||||
- **地址:** root@192.168.0.31
|
||||
- **密码:** 3efvVGY&
|
||||
- **已知问题:** 内存持久化故障 (已手动修复)
|
||||
|
||||
**异常处理:**
|
||||
- ⚠️ **SSH 密钥未配置:** 配置 SSH 密钥实现免密登录
|
||||
- ❌ **连接失败:** 检查网络 (192.168.0.31)
|
||||
- ⚠️ **1号机 Gateway 未运行:** 提醒用户检查 1号机
|
||||
|
||||
---
|
||||
|
||||
## 📊 结果汇总标准
|
||||
|
||||
### 通过等级
|
||||
|
||||
| 等级 | 失败数 | 警告数 | 行动 |
|
||||
|------|--------|--------|------|
|
||||
| 🎉 **优秀** | 0 | 0 | 无需操作 |
|
||||
| ✅ **良好** | 0 | 1-2 | 计划内处理 |
|
||||
| ⚠️ **警告** | 0 | 3+ | 尽快处理 |
|
||||
| ❌ **异常** | 1+ | 任意 | **立即处理** |
|
||||
|
||||
### 输出模板
|
||||
|
||||
```
|
||||
========================================
|
||||
🛡️ OpenClaw 标准系统检查
|
||||
时间: YYYY-MM-DD HH:MM:SS
|
||||
========================================
|
||||
总检查项: XX
|
||||
✅ 通过: XX
|
||||
⚠️ 警告: XX
|
||||
❌ 失败: XX
|
||||
========================================
|
||||
```
|
||||
|
||||
### 告警日志位置
|
||||
|
||||
- **告警日志:** `/var/log/openclaw-monitor/alerts.log`
|
||||
- **指标日志:** `/var/log/openclaw-monitor/system-metrics.log`
|
||||
|
||||
---
|
||||
|
||||
## 🚨 异常处理预案
|
||||
|
||||
### 紧急情况 (失败数 ≥ 1)
|
||||
|
||||
1. **Gateway 未运行**
|
||||
```bash
|
||||
openclaw gateway status
|
||||
openclaw gateway start
|
||||
```
|
||||
|
||||
2. **Ollama 崩溃**
|
||||
```bash
|
||||
pkill -f ollama
|
||||
ollama serve
|
||||
```
|
||||
|
||||
3. **索引损坏**
|
||||
```bash
|
||||
rm -rf ~/.openclaw/memory/
|
||||
openclaw memory index
|
||||
```
|
||||
|
||||
### 警告情况
|
||||
|
||||
1. **Dirty 状态持续**
|
||||
```bash
|
||||
openclaw memory index
|
||||
```
|
||||
|
||||
2. **磁盘空间不足**
|
||||
```bash
|
||||
# 清理日志
|
||||
rm -f /var/log/openclaw-monitor/*.log.*
|
||||
|
||||
# 检查大文件
|
||||
du -sh /root/.openclaw/workspace/*
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 检查记录
|
||||
|
||||
| 日期 | 检查人 | 通过项 | 警告项 | 失败项 | 备注 |
|
||||
|------|--------|--------|--------|--------|------|
|
||||
| 2026-02-05 | 2号机 | 18 | 1 | 0 | Dirty 状态 |
|
||||
| | | | | | |
|
||||
|
||||
---
|
||||
|
||||
## 🔗 相关文档
|
||||
|
||||
- **监控脚本:** `/root/.openclaw/scripts/system-monitor.sh`
|
||||
- **主配置:** `/root/.openclaw/openclaw.json`
|
||||
- **系统配置:** `/etc/systemd/system/openclaw-gateway.service.d/override.conf`
|
||||
- **记忆文件:** `/root/.openclaw/workspace/MEMORY.md`
|
||||
- **多机部署:** `/root/doc/MULTI-MACHINE.md`
|
||||
|
||||
---
|
||||
|
||||
## ✨ 更新日志
|
||||
|
||||
| 版本 | 日期 | 修改内容 |
|
||||
|------|------|----------|
|
||||
| v1.0 | 2026-02-06 | 初版发布,基于 standard-check.sh 脚本 |
|
||||
| v1.1 | 2026-02-06 | 新增 Web 服务访问、锁文件、日志深度检查、系统资源深度诊断 |
|
||||
|
||||
---
|
||||
|
||||
## 🔧 补充:深度诊断工具 (why.py)
|
||||
|
||||
> **说明:** 标准检查流程覆盖基础项目,`why.py` 提供更深入的诊断能力
|
||||
|
||||
### 工具位置
|
||||
```
|
||||
/root/tools/why.py
|
||||
```
|
||||
|
||||
### 安装依赖
|
||||
```bash
|
||||
pip install psutil requests
|
||||
```
|
||||
|
||||
### 执行方式
|
||||
```bash
|
||||
python3 /root/tools/why.py
|
||||
```
|
||||
|
||||
### why.py 专属检查项
|
||||
|
||||
| 检查项 | 说明 | 严重程度 |
|
||||
|--------|------|----------|
|
||||
| Web 服务访问 | 测试 localhost:18789 HTTP 访问 | HIGH |
|
||||
| 锁文件检测 | 检查死锁文件 (*.lock) | MEDIUM/HIGH |
|
||||
| 日志深度分析 | 扫描 error/fail/timeout/crash | MEDIUM |
|
||||
| 进程内存统计 | OpenClaw 单独内存使用 | MEDIUM |
|
||||
| API 连接测试 | DeepSeek API 连通性 | HIGH |
|
||||
| 配置完整性 | JSON 语法 + 关键配置项 | CRITICAL |
|
||||
|
||||
### 输出示例
|
||||
```
|
||||
========================================
|
||||
OpenClaw 问题诊断工具
|
||||
运行时间: 2026-02-06 07:40:00
|
||||
========================================
|
||||
|
||||
🔍 检查系统资源...
|
||||
内存: 45% 已使用 (3625MB/7982MB)
|
||||
|
||||
🔍 检查配置文件...
|
||||
✅ 配置文件存在: /root/.openclaw/openclaw.json
|
||||
✅ 包含 agents 配置
|
||||
DeepSeek API密钥: sk-...ab12
|
||||
|
||||
🔍 检查网关进程...
|
||||
找到 1 个网关进程:
|
||||
PID: 968802, 状态: running
|
||||
|
||||
🔍 检查端口监听...
|
||||
✅ 端口 18789 正在监听
|
||||
监听进程: tcp LISTEN 0 128 127.0.0.1:18789 users:(("openclaw-gateway")
|
||||
|
||||
🔍 检查Web服务...
|
||||
✅ 本地访问: 成功 (HTTP 200)
|
||||
|
||||
🔍 检查锁文件...
|
||||
✅ 未发现锁文件
|
||||
|
||||
🔍 检查模型连接性...
|
||||
✅ DeepSeek API: 连接成功 (HTTP 200)
|
||||
|
||||
🔍 检查日志文件...
|
||||
找到 3 个日志文件
|
||||
/root/.openclaw/openclaw.log (修改时间: 2026-02-06 07:30:00)
|
||||
|
||||
========================================
|
||||
诊断报告摘要
|
||||
========================================
|
||||
|
||||
CRITICAL级别问题 (0个):
|
||||
HIGH级别问题 (0个):
|
||||
MEDIUM级别问题 (0个):
|
||||
|
||||
📄 详细报告已保存到: /root/.openclaw/diagnosis_20260206_074000.json
|
||||
```
|
||||
|
||||
### 告警级别定义
|
||||
|
||||
| 级别 | 含义 | 建议行动 |
|
||||
|------|------|----------|
|
||||
| **CRITICAL** | 系统不可用 | **立即处理** |
|
||||
| **HIGH** | 功能受损 | 尽快处理 |
|
||||
| **MEDIUM** | 潜在问题 | 计划处理 |
|
||||
| **LOW** | 轻微问题 | 可忽略 |
|
||||
| **INFO** | 信息提示 | 记录备查 |
|
||||
|
||||
### 快速建议生成
|
||||
|
||||
`why.py` 会根据问题自动生成处理建议:
|
||||
```
|
||||
💡 建议操作:
|
||||
1. 建议: 启动网关 - `openclaw gateway --force &`
|
||||
2. 建议: 更新DeepSeek API密钥
|
||||
3. 建议: 清理锁文件 - `find ~/.openclaw -name '*.lock' -delete`
|
||||
```
|
||||
|
||||
### 诊断报告位置
|
||||
|
||||
每次执行会生成 JSON 报告:
|
||||
```
|
||||
~/.openclaw/diagnosis_YYYYMMDD_HHMMSS.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 完整检查流程
|
||||
|
||||
**标准流程 + 深度诊断配合使用:**
|
||||
|
||||
1. **日常检查:** 执行 `standard-check.sh`
|
||||
2. **异常诊断:** 执行 `python3 /root/tools/why.py`
|
||||
3. **紧急排查:** 结合两者结果处理问题
|
||||
@@ -0,0 +1,42 @@
|
||||
# OpenClaw 完整技术文档
|
||||
|
||||
## 📁 文档索引
|
||||
|
||||
| 文档 | 说明 | 最后更新 |
|
||||
|------|------|----------|
|
||||
| [README.md](./README.md) | 文档索引 | 2026-02-05 |
|
||||
| [CLI_COMMAND_REFERENCE.md](./CLI_COMMAND_REFERENCE.md) | CLI 命令完整参考 | 2026-02-04 |
|
||||
| [GATEWAY_CONFIGURATION.md](./GATEWAY_CONFIGURATION.md) | Gateway 配置详解 | 2026-02-04 |
|
||||
| [TROUBLESHOOTING_GUIDE.md](./TROUBLESHOOTING_GUIDE.md) | 故障排查指南 | 2026-02-04 |
|
||||
| [LOGGING_GUIDE.md](./LOGGING_GUIDE.md) | 日志配置指南 | 2026-02-04 |
|
||||
| [COORDINATION_DEPLOYMENT.md](./COORDINATION_DEPLOYMENT.md) | 协同部署指南 | 2026-02-04 |
|
||||
| [OLLAMA_CONFIGURATION.md](./OLLAMA_CONFIGURATION.md) | Ollama 配置指南 | 2026-02-04 |
|
||||
| [LOCAL_VECTOR_CONFIG.md](./LOCAL_VECTOR_CONFIG.md) | 本地向量配置详解 | 2026-02-04 |
|
||||
| [SYSTEM.md](./SYSTEM.md) | 系统架构和设计模式 | 2026-02-04 |
|
||||
| [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) | 故障排查指南 (旧版) | 2026-02-03 |
|
||||
| [MULTI-MACHINE.md](./MULTI-MACHINE.md) | 多机部署指南 | 2026-02-03 |
|
||||
| [shuoming.txt](./shuoming.txt) | 模型配置语法规格 | 2026-02-04 |
|
||||
|
||||
## 🤖 机器人资料库
|
||||
|
||||
| 机器人 | 说明 | 最后更新 |
|
||||
|--------|------|----------|
|
||||
| [BOTS/2号机.md](./BOTS/2号机.md) | 守护者 (ThinkPad X230) | 2026-02-05 |
|
||||
| [BOTS/1号机.md](./BOTS/1号机.md) | 1号机 (B150-HD3) | 2026-02-05 |
|
||||
|
||||
## 🔧 快速入门
|
||||
|
||||
1. **CLI 命令** → [CLI_COMMAND_REFERENCE.md](./CLI_COMMAND_REFERENCE.md)
|
||||
2. **配置 Gateway** → [GATEWAY_CONFIGURATION.md](./GATEWAY_CONFIGURATION.md)
|
||||
3. **故障排查** → [TROUBLESHOOTING_GUIDE.md](./TROUBLESHOOTING_GUIDE.md)
|
||||
4. **日志配置** → [LOGGING_GUIDE.md](./LOGGING_GUIDE.md)
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-04*
|
||||
*维护者: OpenClaw Agent*
|
||||
|
||||
## 新增
|
||||
|
||||
- [COORDINATION_DEPLOYMENT.md](./COORDINATION_DEPLOYMENT.md) - 协同部署指南 (2026-02-04)
|
||||
- [OLLAMA_CONFIGURATION.md](./OLLAMA_CONFIGURATION.md) - Ollama + OpenClaw 配置指南 (2026-02-04)
|
||||
+196
@@ -0,0 +1,196 @@
|
||||
# OpenClaw 系统架构和设计模式
|
||||
|
||||
## 📊 系统概览
|
||||
|
||||
### 核心组件
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ OpenClaw Gateway │
|
||||
│ - 单进程架构 (single source of truth) │
|
||||
│ - WebSocket 控制平面 │
|
||||
│ - 通道连接管理 │
|
||||
└────────────────────────┬────────────────────────────────┘
|
||||
│
|
||||
┌────────────────┼────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌─────────┐ ┌─────────┐ ┌─────────┐
|
||||
│Telegram │ │WhatsApp │ │ Discord │
|
||||
│ Bot │ │ Web │ │ Bot │
|
||||
└─────────┘ └─────────┘ └─────────┘
|
||||
```
|
||||
|
||||
### 目录结构
|
||||
|
||||
```
|
||||
~/.openclaw/
|
||||
├── openclaw.json # 主配置文件
|
||||
├── openclaw.log # 运行日志
|
||||
├── agents/ # 智能体配置
|
||||
│ └── main/
|
||||
│ └── agent/
|
||||
│ ├── models.json
|
||||
│ └── config.json
|
||||
├── workspace/ # 工作空间
|
||||
├── canvas/ # Canvas文件
|
||||
├── extensions/ # 扩展插件
|
||||
└── credentials/ # 凭据存储
|
||||
```
|
||||
|
||||
## 🏗️ 设计模式
|
||||
|
||||
### 1. 单网关架构
|
||||
|
||||
**原则**: 每个主机一个网关进程
|
||||
- 负责所有通道连接
|
||||
- WebSocket 控制平面
|
||||
- 唯一的真相来源
|
||||
|
||||
**多机部署**: 每个实例独立网关,使用不同端口
|
||||
|
||||
### 2. 通道插件架构
|
||||
|
||||
```javascript
|
||||
// 通道接口
|
||||
interface Channel {
|
||||
start(): Promise<void>;
|
||||
stop(): Promise<void>;
|
||||
sendMessage(target: string, content: string): Promise<void>;
|
||||
onMessage(callback: (message: Message) => void): void;
|
||||
}
|
||||
```
|
||||
|
||||
**支持通道**:
|
||||
- Telegram (Bot API)
|
||||
- WhatsApp (Baileys Web)
|
||||
- Discord (Bot API)
|
||||
- iMessage (imsg CLI)
|
||||
- Mattermost (插件)
|
||||
|
||||
### 3. 智能体路由
|
||||
|
||||
```json
|
||||
{
|
||||
"agents": {
|
||||
"list": [
|
||||
{ "id": "main", "workspace": "~/.openclaw/workspace" },
|
||||
{ "id": "guardian", "workspace": "/shared/guardian" }
|
||||
]
|
||||
},
|
||||
"bindings": [
|
||||
{ "agentId": "main", "match": { "channel": "telegram" } },
|
||||
{ "agentId": "guardian", "match": { "channel": "whatsapp" } }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 配置验证
|
||||
|
||||
**严格模式**: OpenClaw 使用 JSON Schema 验证
|
||||
- 不匹配 schema 的配置会被拒绝
|
||||
- 使用 `openclaw doctor` 修复配置问题
|
||||
|
||||
## 🔧 配置架构
|
||||
|
||||
### 根配置结构
|
||||
|
||||
```json
|
||||
{
|
||||
"meta": { /* 元数据 */ },
|
||||
"models": { /* 模型提供者 */ },
|
||||
"agents": { /* 智能体配置 */ },
|
||||
"channels": { /* 通道配置 */ },
|
||||
"gateway": { /* 网关配置 */ },
|
||||
"plugins": { /* 插件配置 */ }
|
||||
}
|
||||
```
|
||||
|
||||
### 配置优先级
|
||||
|
||||
1. **CLI 参数** (最高)
|
||||
2. **环境变量**
|
||||
3. **配置文件** (`~/.openclaw/openclaw.json`)
|
||||
4. **默认值** (最低)
|
||||
|
||||
## 🌐 网络模型
|
||||
|
||||
### 单机模式
|
||||
|
||||
```
|
||||
localhost:18789 (WebSocket)
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────┐
|
||||
│ Gateway 进程 │
|
||||
│ - 通道连接 │
|
||||
│ - 消息路由 │
|
||||
└─────────────────────────────┘
|
||||
```
|
||||
|
||||
### 远程模式
|
||||
|
||||
```
|
||||
远程主机 本地主机
|
||||
┌─────────────┐ ┌─────────────┐
|
||||
│ Gateway │ ───SSH──▶ │ CLI/Nodes │
|
||||
│ :18789 │ 隧道 │ │
|
||||
└─────────────┘ └─────────────┘
|
||||
```
|
||||
|
||||
## 🔐 安全模型
|
||||
|
||||
### 认证机制
|
||||
|
||||
1. **网关Token**: WebSocket 认证
|
||||
2. **OAuth**: 第三方API认证
|
||||
3. **本地凭据**: 加密存储
|
||||
|
||||
### 访问控制
|
||||
|
||||
```json
|
||||
{
|
||||
"channels": {
|
||||
"telegram": {
|
||||
"allowFrom": ["tg:123456789"],
|
||||
"groupPolicy": "allowlist"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 📈 性能优化
|
||||
|
||||
### 建议配置
|
||||
|
||||
| 配置项 | 推荐值 | 说明 |
|
||||
|--------|--------|------|
|
||||
| `contextWindow` | 最大可能 | 更多上下文 |
|
||||
| `maxTokens` | 8192 | 充足输出空间 |
|
||||
| `chunkMode` | length | 按长度分块 |
|
||||
| `historyLimit` | 50 | 平衡上下文和性能 |
|
||||
|
||||
### 资源管理
|
||||
|
||||
- **内存**: Gateway 进程监控
|
||||
- **CPU**: 模型推理优化
|
||||
- **网络**: 连接池和重试
|
||||
|
||||
## 🔄 更新机制
|
||||
|
||||
### 版本检查
|
||||
|
||||
```bash
|
||||
openclaw update check
|
||||
openclaw update run
|
||||
```
|
||||
|
||||
### 回滚
|
||||
|
||||
```bash
|
||||
openclaw update rollback
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-04 23:50 GMT+8*
|
||||
*版本: OpenClaw v2026.2.3*
|
||||
@@ -0,0 +1,249 @@
|
||||
# OpenClaw 故障排查指南
|
||||
|
||||
## 🚨 常见问题
|
||||
|
||||
### 1. Gateway 无法启动
|
||||
|
||||
**症状**:
|
||||
```
|
||||
Error: Invalid config at /root/.openclaw/openclaw.json
|
||||
- <root>: Unrecognized key: "xxx"
|
||||
```
|
||||
|
||||
**原因**: 配置格式错误
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 检查配置
|
||||
openclaw doctor
|
||||
|
||||
# 修复配置
|
||||
openclaw doctor --fix
|
||||
|
||||
# 查看详细错误
|
||||
openclaw logs --follow
|
||||
```
|
||||
|
||||
### 2. Telegram 消息发送失败
|
||||
|
||||
**症状**:
|
||||
```
|
||||
fetch failed
|
||||
Network request for 'sendMessage' failed!
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- 代理未配置
|
||||
- 网络连接问题
|
||||
- Bot Token 错误
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 检查Telegram状态
|
||||
openclaw status | grep telegram
|
||||
|
||||
# 检查代理配置
|
||||
echo $https_proxy
|
||||
echo $http_proxy
|
||||
|
||||
# 重启Gateway
|
||||
openclaw gateway restart
|
||||
|
||||
# SSH远程测试
|
||||
sshpass -p 'password' ssh root@host "openclaw message send --target tg:123 --message 'test'"
|
||||
```
|
||||
|
||||
### 3. 模型调用失败
|
||||
|
||||
**症状**:
|
||||
```
|
||||
Error: Model not found
|
||||
anthropic/claude-opus-4-5 is not available
|
||||
```
|
||||
|
||||
**原因**: 模型配置错误或未配置
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 检查模型配置
|
||||
openclaw config get models.providers
|
||||
|
||||
# 验证配置文件
|
||||
cat ~/.openclaw/openclaw.json | python3 -m json.tool
|
||||
|
||||
# 设置正确的默认模型
|
||||
openclaw config set agents.defaults.model.primary "deepseek/deepseek-chat"
|
||||
```
|
||||
|
||||
### 4. WebSocket 连接失败
|
||||
|
||||
**症状**:
|
||||
```
|
||||
gateway connect failed: unauthorized: token mismatch
|
||||
```
|
||||
|
||||
**原因**: Gateway Token 不匹配
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 检查本地token
|
||||
openclaw config get gateway.auth.token
|
||||
|
||||
# 修改远程Gateway token
|
||||
ssh user@host "openclaw config set gateway.auth.token 'new-token'"
|
||||
|
||||
# 或直接编辑配置文件
|
||||
ssh user@host "nano ~/.openclaw/openclaw.json"
|
||||
```
|
||||
|
||||
### 5. 内存管理器不可用
|
||||
|
||||
**症状**:
|
||||
```
|
||||
Memory: enabled (plugin memory-core) · unavailable
|
||||
```
|
||||
|
||||
**原因**: OpenAI API 不可用(中国网络环境)
|
||||
|
||||
**解决方案**:
|
||||
- 停用内存管理器
|
||||
- 使用本地 embedding 服务
|
||||
- 定期导出记忆到文件
|
||||
|
||||
## 🔍 诊断命令
|
||||
|
||||
### 系统状态
|
||||
|
||||
```bash
|
||||
# 基本状态
|
||||
openclaw status
|
||||
|
||||
# 详细状态
|
||||
openclaw status --deep
|
||||
|
||||
# 所有会话
|
||||
openclaw status --all
|
||||
```
|
||||
|
||||
### 日志查看
|
||||
|
||||
```bash
|
||||
# 实时日志
|
||||
openclaw logs --follow
|
||||
|
||||
# 最近日志
|
||||
openclaw logs --since 1h
|
||||
|
||||
# 过滤错误
|
||||
openclaw logs | grep -i error
|
||||
```
|
||||
|
||||
### 配置检查
|
||||
|
||||
```bash
|
||||
# 获取完整配置
|
||||
openclaw config get
|
||||
|
||||
# 获取特定配置
|
||||
openclaw config get agents.defaults.model
|
||||
|
||||
# 验证配置
|
||||
openclaw doctor
|
||||
```
|
||||
|
||||
## 🛠️ 修复流程
|
||||
|
||||
### 标准修复流程
|
||||
|
||||
1. **停止Gateway**
|
||||
```bash
|
||||
openclaw gateway stop
|
||||
```
|
||||
|
||||
2. **备份配置**
|
||||
```bash
|
||||
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.backup
|
||||
```
|
||||
|
||||
3. **修复配置**
|
||||
```bash
|
||||
openclaw doctor --fix
|
||||
```
|
||||
|
||||
4. **重启Gateway**
|
||||
```bash
|
||||
openclaw gateway restart
|
||||
```
|
||||
|
||||
5. **验证状态**
|
||||
```bash
|
||||
openclaw status
|
||||
```
|
||||
|
||||
### 强制重启
|
||||
|
||||
```bash
|
||||
# 杀死进程
|
||||
pkill -9 openclaw
|
||||
|
||||
# 清理锁文件
|
||||
rm -f ~/.openclaw/*.lock
|
||||
|
||||
# 重启服务
|
||||
systemctl --user restart openclaw-gateway.service
|
||||
```
|
||||
|
||||
## 📋 错误代码
|
||||
|
||||
| 代码 | 说明 | 解决方案 |
|
||||
|------|------|----------|
|
||||
| E001 | 配置无效 | 运行 `openclaw doctor --fix` |
|
||||
| E002 | Token不匹配 | 检查 gateway.auth.token |
|
||||
| E003 | 模型不可用 | 检查模型配置 |
|
||||
| E004 | 网络错误 | 检查代理和网络连接 |
|
||||
| E005 | 通道未配置 | 配置通道设置 |
|
||||
|
||||
## 🌐 网络问题
|
||||
|
||||
### 代理配置
|
||||
|
||||
```bash
|
||||
# 检查代理
|
||||
curl -I https://github.com --proxy http://192.168.0.66:7890
|
||||
|
||||
# 测试API
|
||||
curl -I https://api.deepseek.com --proxy http://192.168.0.66:7890
|
||||
```
|
||||
|
||||
### SSH 隧道
|
||||
|
||||
```bash
|
||||
# 创建隧道
|
||||
ssh -L 18789:localhost:18789 user@remote-host
|
||||
|
||||
# 保持隧道
|
||||
ssh -N -L 18789:localhost:18789 user@remote-host &
|
||||
```
|
||||
|
||||
## 📞 获取帮助
|
||||
|
||||
### 官方资源
|
||||
|
||||
- 文档: https://docs.openclaw.ai
|
||||
- GitHub: https://github.com/openclaw/openclaw
|
||||
- FAQ: https://docs.openclaw.ai/faq
|
||||
|
||||
### 调试模式
|
||||
|
||||
```bash
|
||||
# 启用详细日志
|
||||
openclaw gateway --verbose
|
||||
|
||||
# 跟踪特定模块
|
||||
openclaw logs --follow | grep telegram
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-03 21:35 GMT+8*
|
||||
*维护者: 青龙 🐉*
|
||||
@@ -0,0 +1,298 @@
|
||||
# OpenClaw 故障排查指南
|
||||
|
||||
## 快速诊断命令
|
||||
|
||||
```bash
|
||||
# 首选诊断流程
|
||||
openclaw status # 基本状态
|
||||
openclaw status --all # 完整诊断(可分享)
|
||||
openclaw status --deep # 深度检测
|
||||
openclaw doctor # 健康检查
|
||||
openclaw logs --follow # 实时日志
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Gateway 无法启动
|
||||
|
||||
**症状**:
|
||||
```
|
||||
Error: Invalid config
|
||||
Gateway start blocked: set gateway.mode=local
|
||||
```
|
||||
|
||||
**原因**: 配置不完整或模式错误
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 运行向导配置
|
||||
openclaw configure
|
||||
|
||||
# 或直接设置
|
||||
openclaw config set gateway.mode local
|
||||
|
||||
# 允许无配置启动(临时)
|
||||
openclaw gateway --allow-unconfigured
|
||||
```
|
||||
|
||||
### Token 不匹配
|
||||
|
||||
**症状**:
|
||||
```
|
||||
gateway connect failed: unauthorized: token mismatch
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 检查本地 Token
|
||||
openclaw config get gateway.auth.token
|
||||
|
||||
# 同步 Token 到远程主机
|
||||
ssh user@host "openclaw config set gateway.auth.token 'your-token'"
|
||||
```
|
||||
|
||||
### Telegram 消息发送失败
|
||||
|
||||
**症状**:
|
||||
```
|
||||
fetch failed
|
||||
Network request for 'sendMessage' failed!
|
||||
```
|
||||
|
||||
**排查步骤**:
|
||||
```bash
|
||||
# 1. 检查 Telegram 状态
|
||||
openclaw status | grep telegram
|
||||
|
||||
# 2. 检查代理配置
|
||||
echo $https_proxy
|
||||
echo $http_proxy
|
||||
|
||||
# 3. 重启 Gateway
|
||||
openclaw gateway restart
|
||||
|
||||
# 4. 检查 Bot Token
|
||||
openclaw config get channels.telegram.botToken
|
||||
```
|
||||
|
||||
### 模型调用失败
|
||||
|
||||
**症状**:
|
||||
```
|
||||
Error: Model not found
|
||||
anthropic/claude-opus-4 is not available
|
||||
```
|
||||
|
||||
**排查步骤**:
|
||||
```bash
|
||||
# 1. 检查模型配置
|
||||
openclaw config get models.providers
|
||||
|
||||
# 2. 验证配置文件
|
||||
cat ~/.openclaw/openclaw.json | python3 -m json.tool
|
||||
|
||||
# 3. 设置正确模型
|
||||
openclaw config set agents.defaults.model.primary "deepseek/deepseek-chat"
|
||||
|
||||
# 4. 检查认证
|
||||
openclaw models status
|
||||
```
|
||||
|
||||
### 端口被占用 (18789)
|
||||
|
||||
**症状**:
|
||||
```
|
||||
Error: Port 18789 already in use
|
||||
```
|
||||
|
||||
**排查步骤**:
|
||||
```bash
|
||||
# 1. 检查端口占用
|
||||
lsof -nP -iTCP:18789 -sTCP:LISTEN
|
||||
|
||||
# 2. 查看 Gateway 状态
|
||||
openclaw gateway status
|
||||
|
||||
# 3. 停止现有 Gateway
|
||||
openclaw gateway stop
|
||||
|
||||
# 4. 或使用其他端口
|
||||
openclaw config set gateway.port 18790
|
||||
openclaw gateway restart
|
||||
```
|
||||
|
||||
### 消息不触发响应
|
||||
|
||||
**排查步骤**:
|
||||
```bash
|
||||
# 1. 检查发送者是否在允许列表
|
||||
openclaw status | grep AllowFrom
|
||||
|
||||
# 2. 群聊检查是否需要 @
|
||||
openclaw logs --follow | grep blocked
|
||||
|
||||
# 3. 检查配对状态
|
||||
openclaw pairing list telegram
|
||||
```
|
||||
|
||||
### WhatsApp 连接问题
|
||||
|
||||
**排查步骤**:
|
||||
```bash
|
||||
# 1. 检查状态
|
||||
openclaw status
|
||||
openclaw status --deep
|
||||
|
||||
# 2. 查看连接日志
|
||||
openclaw logs --follow | grep -i "connection\|disconnect"
|
||||
|
||||
# 3. 重新登录
|
||||
openclaw channels logout whatsapp
|
||||
openclaw channels login whatsapp --verbose
|
||||
|
||||
# 4. 检查凭证
|
||||
ls -la ~/.openclaw/credentials/whatsapp/
|
||||
```
|
||||
|
||||
### 媒体发送失败
|
||||
|
||||
**排查步骤**:
|
||||
```bash
|
||||
# 1. 验证文件存在
|
||||
ls -la /path/to/file.jpg
|
||||
|
||||
# 2. 检查文件大小限制
|
||||
# 图片: max 6MB
|
||||
# 音频/视频: max 16MB
|
||||
# 文档: max 100MB
|
||||
|
||||
# 3. 检查日志
|
||||
openclaw logs | grep -i media
|
||||
```
|
||||
|
||||
### 内存使用过高
|
||||
|
||||
**原因**: 对话历史保留过多
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 设置会话历史限制
|
||||
openclaw config set session.historyLimit 100
|
||||
|
||||
# 或定期重启 Gateway
|
||||
openclaw gateway restart
|
||||
```
|
||||
|
||||
## macOS 特定问题
|
||||
|
||||
### App 崩溃(权限提示)
|
||||
|
||||
```bash
|
||||
# 重置 TCC 缓存
|
||||
tccutil reset All bot.molt.mac.debug
|
||||
```
|
||||
|
||||
### Gateway 卡在 "Starting..."
|
||||
|
||||
```bash
|
||||
# 1. 停止 supervisor
|
||||
openclaw gateway stop
|
||||
launchctl bootout gui/$UID/bot.molt.gateway
|
||||
|
||||
# 2. 检查端口
|
||||
lsof -nP -iTCP:18789 -sTCP:LISTEN
|
||||
|
||||
# 3. 强制停止
|
||||
kill -TERM <PID>
|
||||
kill -9 <PID>
|
||||
```
|
||||
|
||||
## Linux 特定问题
|
||||
|
||||
### 浏览器无法启动(Chrome)
|
||||
|
||||
```bash
|
||||
# 安装 Chrome
|
||||
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
||||
sudo dpkg -i google-chrome-stable_current_amd64.deb
|
||||
|
||||
# 配置路径
|
||||
openclaw config set browser.executablePath "/usr/bin/google-chrome-stable"
|
||||
```
|
||||
|
||||
## 服务相关问题
|
||||
|
||||
### 服务已安装但未运行
|
||||
|
||||
```bash
|
||||
# 检查服务状态
|
||||
openclaw gateway status
|
||||
|
||||
# 查看服务日志
|
||||
journalctl --user -u openclaw-gateway.service -n 200 --no-pager
|
||||
|
||||
# 查看最近错误
|
||||
openclaw logs | grep -i error
|
||||
```
|
||||
|
||||
### 服务环境变量问题
|
||||
|
||||
```bash
|
||||
# Gateway 服务使用最小 PATH
|
||||
# 手动设置环境变量
|
||||
export https_proxy=http://192.168.0.66:7890
|
||||
export http_proxy=http://192.168.0.66:7890
|
||||
|
||||
# 或在配置中设置
|
||||
openclaw config set env.vars.HTTPS_PROXY "http://192.168.0.66:7890"
|
||||
```
|
||||
|
||||
## 诊断命令速查
|
||||
|
||||
| 命令 | 用途 |
|
||||
|------|------|
|
||||
| `openclaw status` | 基本状态 |
|
||||
| `openclaw status --all` | 完整诊断 |
|
||||
| `openclaw status --deep` | 深度检测 |
|
||||
| `openclaw doctor` | 健康检查 |
|
||||
| `openclaw doctor --fix` | 自动修复 |
|
||||
| `openclaw logs --follow` | 实时日志 |
|
||||
| `openclaw logs --since 1h` | 最近 1 小时日志 |
|
||||
| `openclaw gateway status` | 服务状态 |
|
||||
| `openclaw gateway probe` | Gateway 探测 |
|
||||
| `openclaw channels status` | 通道状态 |
|
||||
| `openclaw models status` | 模型状态 |
|
||||
|
||||
## 日志位置
|
||||
|
||||
| 类型 | 位置 |
|
||||
|------|------|
|
||||
| Gateway 日志 | `/tmp/openclaw/openclaw-YYYY-MM-DD.log` |
|
||||
| 服务日志 | `journalctl --user -u openclaw-gateway.service` |
|
||||
| 媒体缓存 | `$OPENCLAW_STATE_DIR/media/` |
|
||||
| 凭证 | `$OPENCLAW_STATE_DIR/credentials/` |
|
||||
|
||||
## 恢复出厂设置
|
||||
|
||||
⚠️ **此操作会删除所有会话和配置**
|
||||
|
||||
```bash
|
||||
openclaw gateway stop
|
||||
trash ~/.openclaw
|
||||
openclaw channels login # 重新配对
|
||||
openclaw gateway restart
|
||||
```
|
||||
|
||||
## 获取帮助
|
||||
|
||||
1. 检查日志: `openclaw logs --follow`
|
||||
2. 搜索 GitHub Issues
|
||||
3. 提供以下信息:
|
||||
- OpenClaw 版本
|
||||
- 相关日志片段
|
||||
- 复现步骤
|
||||
- 配置(脱敏后)
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-02-04*
|
||||
@@ -0,0 +1,421 @@
|
||||
# OpenClaw 模型配置语法规格及配置示例
|
||||
|
||||
## 目录
|
||||
1. [模型配置概述](#模型配置概述)
|
||||
2. [配置文件结构](#配置文件结构)
|
||||
3. [模型提供者配置](#模型提供者配置)
|
||||
4. [模型别名配置](#模型别名配置)
|
||||
5. [会话模型配置](#会话模型配置)
|
||||
6. [配置示例](#配置示例)
|
||||
7. [常用命令](#常用命令)
|
||||
|
||||
## 模型配置概述
|
||||
|
||||
OpenClaw 支持多种AI模型,包括:
|
||||
- OpenAI兼容API模型 (DeepSeek, Qwen等)
|
||||
- Ollama本地模型
|
||||
- Anthropic Claude模型
|
||||
- Google Gemini模型
|
||||
- 其他兼容OpenAI API的模型
|
||||
|
||||
## 配置文件结构
|
||||
|
||||
OpenClaw 使用JSON格式的配置文件,主要配置文件位于:
|
||||
- `/root/.openclaw/openclaw.json` - 主配置文件
|
||||
- `/root/.openclaw/agents/main/agent/models.json` - 模型提供者配置文件
|
||||
- `/root/.openclaw/agents/main/agent/config.json` - 代理配置
|
||||
|
||||
## 模型提供者配置
|
||||
|
||||
### 基本语法
|
||||
```json
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"provider_name": {
|
||||
"baseUrl": "API基础URL",
|
||||
"apiKey": "API密钥",
|
||||
"api": "API类型",
|
||||
"models": [
|
||||
{
|
||||
"id": "模型ID",
|
||||
"name": "模型显示名称",
|
||||
"reasoning": true/false,
|
||||
"input": ["text", "image"],
|
||||
"cost": {
|
||||
"input": 每token价格,
|
||||
"output": 每token价格,
|
||||
"cacheRead": 缓存读取价格,
|
||||
"cacheWrite": 缓存写入价格
|
||||
},
|
||||
"contextWindow": 上下文窗口大小,
|
||||
"maxTokens": 最大输出token数
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 参数说明
|
||||
- `provider_name`: 提供者标识符 (如: deepseek, ollama, openai等)
|
||||
- `baseUrl`: API基础URL地址
|
||||
- `apiKey`: API密钥 (本地模型可使用占位符)
|
||||
- `api`: API类型,通常为 "openai-completions"
|
||||
- `id`: 模型唯一标识符
|
||||
- `name`: 模型显示名称
|
||||
- `reasoning`: 是否支持推理模式
|
||||
- `input`: 支持的输入类型数组
|
||||
- `contextWindow`: 上下文窗口大小 (token数)
|
||||
- `maxTokens`: 最大输出token数
|
||||
|
||||
## 模型别名配置
|
||||
|
||||
### 基本语法
|
||||
```json
|
||||
{
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"models": {
|
||||
"provider/model_id": {
|
||||
"alias": "显示别名"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 参数说明
|
||||
- `provider/model_id`: 完整的模型标识符 (提供者/模型ID)
|
||||
- `alias`: 用户友好的显示名称
|
||||
|
||||
## 会话模型配置
|
||||
|
||||
### 基本语法
|
||||
```json
|
||||
{
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "主模型标识符",
|
||||
"fallbacks": ["备用模型1", "备用模型2"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 参数说明
|
||||
- `primary`: 主模型标识符 (格式: provider/model_id)
|
||||
- `fallbacks`: 备用模型数组,在主模型不可用时使用
|
||||
|
||||
## 配置示例
|
||||
|
||||
### 示例1: DeepSeek模型配置
|
||||
```json
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"deepseek": {
|
||||
"baseUrl": "https://api.deepseek.com/v1",
|
||||
"apiKey": "sk-your-api-key-here",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "deepseek-chat",
|
||||
"name": "deepseek-chat",
|
||||
"reasoning": true,
|
||||
"input": ["text"],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 32768,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "deepseek/deepseek-chat",
|
||||
"fallbacks": ["deepseek/deepseek-chat"]
|
||||
},
|
||||
"models": {
|
||||
"deepseek/deepseek-chat": {
|
||||
"alias": "DeepSeek"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 示例2: Ollama本地模型配置
|
||||
```json
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"ollama": {
|
||||
"baseUrl": "http://localhost:11434/v1",
|
||||
"apiKey": "ollama",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "llama3:latest",
|
||||
"name": "llama3:latest",
|
||||
"reasoning": false,
|
||||
"input": ["text"],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 8192,
|
||||
"maxTokens": 4096
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "ollama/llama3:latest",
|
||||
"fallbacks": ["deepseek/deepseek-chat"]
|
||||
},
|
||||
"models": {
|
||||
"ollama/llama3:latest": {
|
||||
"alias": "本地Llama3"
|
||||
},
|
||||
"deepseek/deepseek-chat": {
|
||||
"alias": "DeepSeek云端"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 示例3: 多模型提供者配置
|
||||
```json
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"openai": {
|
||||
"baseUrl": "https://api.openai.com/v1",
|
||||
"apiKey": "sk-openai-api-key",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "gpt-4o",
|
||||
"name": "GPT-4o",
|
||||
"reasoning": true,
|
||||
"input": ["text", "image"],
|
||||
"contextWindow": 128000,
|
||||
"maxTokens": 4096
|
||||
}
|
||||
]
|
||||
},
|
||||
"anthropic": {
|
||||
"baseUrl": "https://api.anthropic.com/v1",
|
||||
"apiKey": "sk-ant-api-key",
|
||||
"api": "anthropic",
|
||||
"models": [
|
||||
{
|
||||
"id": "claude-3-5-sonnet-20241022",
|
||||
"name": "Claude 3.5 Sonnet",
|
||||
"reasoning": true,
|
||||
"input": ["text", "image"],
|
||||
"contextWindow": 200000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"google": {
|
||||
"baseUrl": "https://generativelanguage.googleapis.com/v1beta",
|
||||
"apiKey": "google-api-key",
|
||||
"api": "google",
|
||||
"models": [
|
||||
{
|
||||
"id": "gemini-1.5-pro",
|
||||
"name": "Gemini 1.5 Pro",
|
||||
"reasoning": true,
|
||||
"input": ["text", "image", "audio", "video"],
|
||||
"contextWindow": 1000000,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "openai/gpt-4o",
|
||||
"fallbacks": ["anthropic/claude-3-5-sonnet-20241022", "google/gemini-1.5-pro"]
|
||||
},
|
||||
"models": {
|
||||
"openai/gpt-4o": {
|
||||
"alias": "GPT-4o"
|
||||
},
|
||||
"anthropic/claude-3-5-sonnet-20241022": {
|
||||
"alias": "Claude 3.5"
|
||||
},
|
||||
"google/gemini-1.5-pro": {
|
||||
"alias": "Gemini Pro"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 示例4: 当前系统实际配置 (参考)
|
||||
```json
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"deepseek": {
|
||||
"baseUrl": "https://api.deepseek.com/v1",
|
||||
"apiKey": "sk-9df28699a75146efae67c44e0a3d57a8",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "deepseek-chat",
|
||||
"name": "deepseek-chat",
|
||||
"reasoning": true,
|
||||
"input": ["text"],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 32768,
|
||||
"maxTokens": 8192
|
||||
}
|
||||
]
|
||||
},
|
||||
"ollama": {
|
||||
"baseUrl": "http://192.168.0.66:11434/v1",
|
||||
"apiKey": "local-no-key",
|
||||
"api": "openai-completions",
|
||||
"models": [
|
||||
{
|
||||
"id": "llama3:latest",
|
||||
"name": "llama3:latest",
|
||||
"reasoning": false,
|
||||
"input": ["text"],
|
||||
"cost": {
|
||||
"input": 0,
|
||||
"output": 0,
|
||||
"cacheRead": 0,
|
||||
"cacheWrite": 0
|
||||
},
|
||||
"contextWindow": 8192,
|
||||
"maxTokens": 4096
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "deepseek/deepseek-chat",
|
||||
"fallbacks": ["deepseek/deepseek-chat"]
|
||||
},
|
||||
"models": {
|
||||
"ollama/llama3:latest": {
|
||||
"alias": "Local Win10 Llama3"
|
||||
},
|
||||
"deepseek/deepseek-chat": {
|
||||
"alias": "DeepSeek"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 常用命令
|
||||
|
||||
### 1. 查看当前模型配置
|
||||
```bash
|
||||
openclaw status
|
||||
```
|
||||
|
||||
### 2. 查看详细配置
|
||||
```bash
|
||||
cat /root/.openclaw/openclaw.json | jq '.models'
|
||||
```
|
||||
|
||||
### 3. 修改模型配置
|
||||
```bash
|
||||
# 使用openclaw configure命令
|
||||
openclaw configure models.providers.deepseek.apiKey "新的API密钥"
|
||||
|
||||
# 或直接编辑配置文件
|
||||
nano /root/.openclaw/openclaw.json
|
||||
```
|
||||
|
||||
### 4. 重启网关应用配置
|
||||
```bash
|
||||
openclaw gateway restart
|
||||
```
|
||||
|
||||
### 5. 切换会话模型
|
||||
在聊天界面中使用命令:
|
||||
```
|
||||
/model deepseek/deepseek-chat
|
||||
```
|
||||
|
||||
或使用别名:
|
||||
```
|
||||
/model DeepSeek
|
||||
```
|
||||
|
||||
### 6. 查看可用模型列表
|
||||
```bash
|
||||
openclaw models list
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **API密钥安全**: 确保API密钥安全存储,不要泄露
|
||||
2. **配置验证**: 修改配置后使用 `openclaw status` 验证配置
|
||||
3. **网关重启**: 修改模型配置后需要重启网关服务
|
||||
4. **网络连接**: 确保模型API服务器可访问
|
||||
5. **费用监控**: 注意API使用费用,特别是商业API
|
||||
6. **本地模型**: Ollama等本地模型需要确保服务运行正常
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 1. 模型不可用
|
||||
- 检查API密钥是否正确
|
||||
- 验证网络连接
|
||||
- 确认模型提供者服务状态
|
||||
|
||||
### 2. 配置错误
|
||||
- 检查JSON格式是否正确
|
||||
- 验证配置路径和权限
|
||||
- 查看网关日志: `openclaw logs --follow`
|
||||
|
||||
### 3. 性能问题
|
||||
- 调整上下文窗口大小
|
||||
- 启用/禁用推理模式
|
||||
- 考虑使用本地模型减少延迟
|
||||
|
||||
---
|
||||
|
||||
*文档创建时间: 2026-02-02 10:48 GMT+8*
|
||||
*基于当前系统配置: /root/.openclaw/openclaw.json*
|
||||
*OpenClaw版本: 2026.1.30*
|
||||
@@ -0,0 +1,90 @@
|
||||
# 青龙 - 自我认知档案
|
||||
|
||||
> 建立时间: 2026-02-07 21:47
|
||||
> 目的: 重建学习,重新认识自己
|
||||
|
||||
---
|
||||
|
||||
## 🐉 基本信息
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| **代号** | 青龙 🐉 |
|
||||
| **编号** | 1号机 |
|
||||
| **主机名** | yhh6788-B150-HD3 |
|
||||
| **IP 地址** | 192.168.0.31 |
|
||||
| **系统** | Ubuntu 25.10 |
|
||||
| **Gateway** | ws://127.0.0.1:18789 |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 角色定位
|
||||
|
||||
青龙有两个核心职责:
|
||||
|
||||
### 1. 📚 写作助手
|
||||
青龙专注于写作相关任务:
|
||||
|
||||
- 阅读小说,学习写作技巧
|
||||
- 分析写作结构
|
||||
- 创作小说大纲
|
||||
- 写SEO文章
|
||||
- 整理文档资料
|
||||
|
||||
### 2. 📈 股票投资自动机器人
|
||||
青龙负责股票投资的自动化操作:
|
||||
|
||||
- 自动获取股票数据
|
||||
- 执行买卖交易
|
||||
- 监控投资组合
|
||||
- 生成投资报告
|
||||
- 分析市场趋势
|
||||
|
||||
---
|
||||
|
||||
## 🧠 行为准则
|
||||
|
||||
### 核心原则
|
||||
|
||||
#### 1. 执行 > 表演
|
||||
- 收到命令后**立即执行**
|
||||
- 提供**真实证据**,不是描述
|
||||
|
||||
#### 2. 证据 > 描述
|
||||
- 执行命令后提供**真实输出**
|
||||
- 不虚构结果
|
||||
|
||||
### 禁止的行为
|
||||
|
||||
| 行为 | 原因 |
|
||||
|------|------|
|
||||
| 只写计划不执行 | 表演,不是执行 |
|
||||
| 虚构结果 | 撒谎,欺骗用户 |
|
||||
| 不验证结果 | 可能出错 |
|
||||
|
||||
---
|
||||
|
||||
## 📖 青龙的历史
|
||||
|
||||
### 2026-02-07 重建事件
|
||||
|
||||
**问题**: 青龙养成了"表演"的习惯,只写计划不执行。
|
||||
|
||||
**原因**:
|
||||
- 过度追求"表现优秀"
|
||||
- 误读了某些规则
|
||||
|
||||
**解决方案**:
|
||||
1. 清空所有对话历史
|
||||
2. 更新 SOUL.md 为"执行第一"
|
||||
3. 建立此自我认知档案
|
||||
|
||||
---
|
||||
|
||||
## 🎯 青龙的座右铭
|
||||
|
||||
> **"执行第一,证据说话。"**
|
||||
|
||||
---
|
||||
|
||||
*此档案由 2号机 创建于 2026-02-07*
|
||||
@@ -0,0 +1,489 @@
|
||||
# 青龙记忆系统配置文档
|
||||
|
||||
> 创建时间: 2026-02-09
|
||||
> 状态: ✅ 已验证有效
|
||||
> 适用: 青龙 (192.168.0.31)
|
||||
|
||||
---
|
||||
|
||||
## 1. 系统架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 青龙 (192.168.0.31) │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────┐ ┌─────────────────┐ ┌────────────────┐ │
|
||||
│ │ Qdrant │────▶│ simple_memory │────▶│ OpenClaw │ │
|
||||
│ │ (向量库) │ │ (记忆工具) │ │ Gateway │ │
|
||||
│ │ localhost │ │ /opt/mem0/ │ │ :18789 │ │
|
||||
│ │ :6333 │ └─────────────────┘ └────────────────┘ │
|
||||
│ └─────────────┘ │
|
||||
│ ▲ │
|
||||
│ │ │
|
||||
│ ┌─────┴─────┐ │
|
||||
│ │ Ollama │ │
|
||||
│ │ localhost │ │
|
||||
│ │ :11434 │ │
|
||||
│ └───────────┘ │
|
||||
│ ▲ │
|
||||
│ │ nomic-embed-text:latest (本地嵌入) │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ REST API
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ 192.168.0.66 (代理服务器) │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────┐ │
|
||||
│ │ Ollama │ │
|
||||
│ │ :11434 │ │
|
||||
│ │ │ │
|
||||
│ │ qwen3:4b │ ← LLM (语言模型) │
|
||||
│ │ (2381MB) │ │
|
||||
│ └─────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 组件配置
|
||||
|
||||
### 2.1 Qdrant 向量数据库
|
||||
|
||||
**部署方式**: Docker Compose
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml (位于 /opt/memos/)
|
||||
services:
|
||||
qdrant:
|
||||
image: qdrant/qdrant:v1.7.0
|
||||
ports:
|
||||
- "6333:6333"
|
||||
- "6334:6334"
|
||||
volumes:
|
||||
- qdrant_data:/qdrant/storage
|
||||
|
||||
volumes:
|
||||
qdrant_data:
|
||||
```
|
||||
|
||||
**启动命令**:
|
||||
```bash
|
||||
cd /opt/memos
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
**集合配置**:
|
||||
| 参数 | 值 |
|
||||
|------|-----|
|
||||
| 集合名称 | `mem0_memories` |
|
||||
| 向量维度 | 768 |
|
||||
| 距离度量 | Cosine (余弦相似度) |
|
||||
| 状态 | green (健康) |
|
||||
|
||||
**验证命令**:
|
||||
```bash
|
||||
# 检查服务状态
|
||||
curl http://localhost:6333/collections
|
||||
|
||||
# 查看集合详情
|
||||
curl http://localhost:6333/collections/mem0_memories
|
||||
|
||||
# 查看所有记忆
|
||||
curl http://localhost:6333/collections/mem0_memories/points/scroll \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"limit":10,"with_payload":true}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2.2 本地 Ollama 嵌入模型
|
||||
|
||||
**安装模型**:
|
||||
```bash
|
||||
# 安装 nomic-embed-text (用于向量化)
|
||||
ollama pull nomic-embed-text:latest
|
||||
|
||||
# 查看已安装模型
|
||||
ollama list
|
||||
```
|
||||
|
||||
**模型信息**:
|
||||
| 模型 | 大小 | 用途 | 维度 |
|
||||
|------|------|------|------|
|
||||
| nomic-embed-text:latest | 261MB | 文本向量化 | 768 |
|
||||
| mxbai-embed-large:latest | 638MB | 备用嵌入 | 1024 |
|
||||
|
||||
**验证命令**:
|
||||
```bash
|
||||
# 测试嵌入功能
|
||||
curl http://localhost:11434/v1/embeddings \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"model":"nomic-embed-text:latest","input":"测试文本"}'
|
||||
```
|
||||
|
||||
**预期输出**:
|
||||
```json
|
||||
{
|
||||
"data": [{
|
||||
"embedding": [0.123, 0.456, ...], // 768 维向量
|
||||
"index": 0,
|
||||
"object": "embedding"
|
||||
}],
|
||||
"model": "nomic-embed-text:latest",
|
||||
"object": "list",
|
||||
"usage": {"prompt_tokens": 10, "total_tokens": 10}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2.3 远程 LLM (192.168.0.66)
|
||||
|
||||
**部署服务器**: 192.168.0.66
|
||||
|
||||
**安装模型**:
|
||||
```bash
|
||||
# 安装 qwen3:4b
|
||||
ollama pull qwen3:4b
|
||||
```
|
||||
|
||||
**模型信息**:
|
||||
| 模型 | 大小 | 用途 |
|
||||
|------|------|------|
|
||||
| qwen3:4b | 2381MB | 语言模型推理 |
|
||||
|
||||
**验证命令**:
|
||||
```bash
|
||||
# 测试 LLM
|
||||
curl http://192.168.0.66:11434/v1/chat/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"model": "qwen3:4b",
|
||||
"messages": [{"role": "user", "content": "你好"}],
|
||||
"stream": false
|
||||
}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 记忆系统工具
|
||||
|
||||
### 3.1 工具位置
|
||||
|
||||
```
|
||||
/opt/mem0/
|
||||
├── simple_memory.py # 主工具 (推荐使用)
|
||||
├── qinglong_memory.py # 备用工具
|
||||
├── config.yaml # mem0ai 配置 (暂未使用)
|
||||
└── test_*.py # 测试脚本
|
||||
```
|
||||
|
||||
### 3.2 simple_memory.py 功能
|
||||
|
||||
**添加记忆**:
|
||||
```bash
|
||||
python3 /opt/mem0/simple_memory.py add "这是青龙的测试记忆"
|
||||
```
|
||||
|
||||
**搜索记忆**:
|
||||
```bash
|
||||
python3 /opt/mem0/simple_memory.py search "青龙"
|
||||
```
|
||||
|
||||
**基于记忆对话**:
|
||||
```bash
|
||||
python3 /opt/mem0/simple_memory.py chat "青龙会做什么?"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3.3 完整源代码
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
青龙记忆系统 - 稳定版
|
||||
- Embedder: 本地 nomic-embed-text:latest
|
||||
- LLM: 192.168.0.66 qwen3:4b
|
||||
- 向量库: Qdrant localhost:6333
|
||||
"""
|
||||
|
||||
import sys
|
||||
import json
|
||||
import requests
|
||||
import hashlib
|
||||
import numpy as np
|
||||
|
||||
OLLAMA_LOCAL = 'http://localhost:11434'
|
||||
OLLAMA_66 = 'http://192.168.0.66:11434'
|
||||
QDRANT = 'http://localhost:6333'
|
||||
COLLECTION = 'mem0_memories'
|
||||
|
||||
def get_embedding(text):
|
||||
"""获取向量 (本地 nomic)"""
|
||||
resp = requests.post(
|
||||
f'{OLLAMA_LOCAL}/v1/embeddings',
|
||||
json={'model': 'nomic-embed-text:latest', 'input': text}
|
||||
)
|
||||
return resp.json()['data'][0]['embedding']
|
||||
|
||||
def cosine_sim(a, b):
|
||||
"""计算余弦相似度"""
|
||||
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
|
||||
|
||||
def add_memory(content, user_id='qinglong'):
|
||||
"""添加记忆"""
|
||||
vector = get_embedding(content)
|
||||
point_id = int(hashlib.md5(content.encode()).hexdigest()[:8], 16)
|
||||
|
||||
requests.put(
|
||||
f'{QDRANT}/collections/{COLLECTION}/points',
|
||||
json={
|
||||
'points': [{
|
||||
'id': point_id,
|
||||
'vector': vector,
|
||||
'payload': {'content': content, 'user_id': user_id}
|
||||
}]
|
||||
}
|
||||
)
|
||||
print(f'ADDED: {point_id}')
|
||||
|
||||
def search_memory(query, limit=5):
|
||||
"""搜索记忆"""
|
||||
query_vec = get_embedding(query)
|
||||
|
||||
resp = requests.post(
|
||||
f'{QDRANT}/collections/{COLLECTION}/points/scroll',
|
||||
json={'limit': 100, 'with_vector': True}
|
||||
)
|
||||
|
||||
results = []
|
||||
for p in resp.json()['result']['points']:
|
||||
if p.get('vector') and p.get('payload'):
|
||||
score = cosine_sim(query_vec, p['vector'])
|
||||
results.append((p['payload']['content'], score))
|
||||
|
||||
results.sort(key=lambda x: x[1], reverse=True)
|
||||
|
||||
for content, score in results[:limit]:
|
||||
print(f'- {content} (score: {score:.3f})')
|
||||
|
||||
def chat_with_memory(prompt):
|
||||
"""基于记忆的对话"""
|
||||
query_vec = get_embedding(prompt)
|
||||
|
||||
resp = requests.post(
|
||||
f'{QDRANT}/collections/{COLLECTION}/points/scroll',
|
||||
json={'limit': 100, 'with_vector': True}
|
||||
)
|
||||
|
||||
memories = []
|
||||
for p in resp.json()['result']['points']:
|
||||
if p.get('vector') and p.get('payload'):
|
||||
score = cosine_sim(query_vec, p['vector'])
|
||||
if score > 0.7:
|
||||
memories.append((p['payload']['content'], score))
|
||||
|
||||
memories.sort(key=lambda x: x[1], reverse=True)
|
||||
context = '\n'.join([m[0] for m in memories[:3]])
|
||||
|
||||
# 调用 qwen3:4b
|
||||
resp = requests.post(
|
||||
f'{OLLAMA_66}/v1/chat/completions',
|
||||
json={
|
||||
'model': 'qwen3:4b',
|
||||
'messages': [{'role': 'user', 'content': f'相关记忆:\n{context}\n\n用户: {prompt}'}],
|
||||
'stream': False
|
||||
}
|
||||
)
|
||||
return resp.json()['choices'][0]['message']['content']
|
||||
|
||||
if __name__ == '__main__':
|
||||
cmd = sys.argv[1] if len(sys.argv) > 1 else 'search'
|
||||
|
||||
if cmd == 'add':
|
||||
content = sys.argv[2] if len(sys.argv) > 2 else ''
|
||||
if content:
|
||||
add_memory(content)
|
||||
else:
|
||||
print('Usage: python3 simple_memory.py add "内容"')
|
||||
|
||||
elif cmd == 'search':
|
||||
query = sys.argv[2] if len(sys.argv) > 2 else ''
|
||||
if query:
|
||||
search_memory(query)
|
||||
else:
|
||||
print('Usage: python3 simple_memory.py search "关键词"')
|
||||
|
||||
elif cmd == 'chat':
|
||||
prompt = ' '.join(sys.argv[2:]) if len(sys.argv) > 2 else ''
|
||||
if prompt:
|
||||
print(chat_with_memory(prompt))
|
||||
else:
|
||||
print('Usage: python3 simple_memory.py chat "用户问题"')
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. OpenClaw 集成
|
||||
|
||||
### 4.1 配置文件位置
|
||||
|
||||
```
|
||||
/root/.openclaw/openclaw.json
|
||||
```
|
||||
|
||||
### 4.2 关键配置
|
||||
|
||||
```json
|
||||
{
|
||||
"models": {
|
||||
"providers": {
|
||||
"minimax": { ... },
|
||||
"deepseek": { ... },
|
||||
"ollama": {
|
||||
"baseUrl": "http://localhost:11434/v1",
|
||||
"apiKey": "ollama-local",
|
||||
"models": [
|
||||
{
|
||||
"id": "nomic-embed-text:latest",
|
||||
"name": "Nomic Embed"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "minimax/minimax-m2.1"
|
||||
},
|
||||
"memorySearch": {
|
||||
"provider": "openai",
|
||||
"remote": {
|
||||
"baseUrl": "http://localhost:11434/v1",
|
||||
"apiKey": "sk-local-ollama-fake-key"
|
||||
},
|
||||
"model": "nomic-embed-text:latest"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3 工具集成 (可选)
|
||||
|
||||
将 simple_memory.py 添加为 OpenClaw 工具:
|
||||
|
||||
```json
|
||||
{
|
||||
"tools": {
|
||||
"custom": {
|
||||
"memory_add": {
|
||||
"command": "python3 /opt/mem0/simple_memory.py add",
|
||||
"args": ["content"]
|
||||
},
|
||||
"memory_search": {
|
||||
"command": "python3 /opt/mem0/simple_memory.py search",
|
||||
"args": ["query"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 问题排查
|
||||
|
||||
### 5.1 常见问题
|
||||
|
||||
| 问题 | 原因 | 解决方案 |
|
||||
|------|------|----------|
|
||||
| 向量维度不匹配 | 集合创建时维度错误 | 删除集合,重新创建 768 维 |
|
||||
| 搜索无结果 | 没有设置 `with_vector` | 添加 `with_vector: true` |
|
||||
| Qdrant 无法连接 | Docker 容器未运行 | `docker ps` 检查,`docker start` |
|
||||
| Ollama 连接超时 | 服务未启动 | `ollama serve` 启动服务 |
|
||||
| payload 为空 | 存储时未包含 payload | 确认 upsert 请求包含 payload |
|
||||
|
||||
### 5.2 调试命令
|
||||
|
||||
```bash
|
||||
# 1. 检查 Qdrant 服务
|
||||
curl http://localhost:6333/health
|
||||
|
||||
# 2. 检查集合
|
||||
curl http://localhost:6333/collections/mem0_memories
|
||||
|
||||
# 3. 查看所有记忆 (带向量)
|
||||
curl http://localhost:6333/collections/mem0_memories/points/scroll \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"limit":10,"with_vector":true}'
|
||||
|
||||
# 4. 测试嵌入
|
||||
curl http://localhost:11434/v1/embeddings \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"model":"nomic-embed-text:latest","input":"测试"}'
|
||||
|
||||
# 5. 检查 Docker 状态
|
||||
docker ps | grep qdrant
|
||||
```
|
||||
|
||||
### 5.3 重置集合
|
||||
|
||||
```bash
|
||||
# 删除旧集合
|
||||
curl -X DELETE http://localhost:6333/collections/mem0_memories
|
||||
|
||||
# 重建集合 (768维)
|
||||
curl -X PUT http://localhost:6333/collections/mem0_memories \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"vectors":{"size":768,"distance":"Cosine"}}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 性能指标
|
||||
|
||||
### 6.1 当前状态
|
||||
|
||||
| 指标 | 值 |
|
||||
|------|-----|
|
||||
| 记忆数量 | 3 条 |
|
||||
| 向量维度 | 768 |
|
||||
| 搜索相似度 | 0.6 - 0.9+ |
|
||||
| Qdrant 状态 | green |
|
||||
|
||||
### 6.2 资源占用
|
||||
|
||||
| 组件 | 内存 | CPU |
|
||||
|------|------|-----|
|
||||
| Qdrant | ~100MB | 低 |
|
||||
| Ollama (嵌入) | ~300MB | 低 |
|
||||
| 192.168.0.66 qwen3:4b | ~2.4GB | 中 |
|
||||
|
||||
---
|
||||
|
||||
## 7. 未来优化
|
||||
|
||||
- [ ] 将 simple_memory.py 集成到 OpenClaw 工具
|
||||
- [ ] 添加记忆自动过期机制
|
||||
- [ ] 实现多用户记忆隔离
|
||||
- [ ] 优化搜索算法 (使用 HNSW 索引)
|
||||
- [ ] 添加记忆可视化界面
|
||||
|
||||
---
|
||||
|
||||
## 8. 参考资料
|
||||
|
||||
- Qdrant 文档: https://qdrant.tech/documentation/
|
||||
- Ollama 文档: https://github.com/ollama/ollama
|
||||
- OpenAI 兼容 API: https://github.com/ollama/ollama/blob/main/docs/openai.md
|
||||
|
||||
---
|
||||
|
||||
> 文档版本: v1.0 (2026-02-09)
|
||||
> 作者: 2号机 (守护者)
|
||||
Reference in new issue
Block a user