diff --git a/agents/life-agent.json b/agents/life-agent.json index 903488f..bbfc180 100644 --- a/agents/life-agent.json +++ b/agents/life-agent.json @@ -24,7 +24,7 @@ "dashscope_api_key": "${DASHSCOPE_API_KEY}", "qdrant_host": "localhost", "qdrant_port": 6333, - "collection_name": "mem0_v4_life" + "collection_name": "mem0_global_v4" } }, { diff --git a/docs/SYSTEM_ARCHITECTURE.md b/docs/SYSTEM_ARCHITECTURE.md new file mode 100644 index 0000000..5e88cc5 --- /dev/null +++ b/docs/SYSTEM_ARCHITECTURE.md @@ -0,0 +1,397 @@ +# 系统架构文档 - 单一实体多 Agent 结构 + +**文档版本:** 2026-02-26 +**架构师:** Eason (陈医生) 👨‍⚕️ +**部署环境:** Ubuntu 24.04 LTS VPS (KVM) + +--- + +## 🏗️ 整体架构概览 + +``` +┌─────────────────────────────────────────────────────────────────────────┐ +│ 王院长的多 Agent 系统 │ +│ 单一实体 · 多 Agent 协作 · 统一管理 │ +└─────────────────────────────────────────────────────────────────────────┘ + +┌─────────────────────────────────────────────────────────────────────────┐ +│ 接入层 (Access Layer) │ +├─────────────────────────────────────────────────────────────────────────┤ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ WebChat │ │ Telegram │ │ Tailscale │ │ Nginx │ │ +│ │ (本地调试) │ │ (@bot) │ │ (远程访问) │ │ (反向代理) │ │ +│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ +│ │ │ │ │ │ +│ └────────────────┴────────────────┴────────────────┘ │ +│ │ │ +│ ┌─────────▼─────────┐ │ +│ │ OpenClaw Gateway │ │ +│ │ Port: 18789 │ │ +│ │ Bind: Tailscale │ │ +│ └─────────┬─────────┘ │ +└──────────────────────────────────┼──────────────────────────────────────┘ + │ + ┌──────────────┴──────────────┐ + │ │ + ┌────────▼────────┐ ┌────────▼────────┐ + │ Main Agent │ │ Life Agent │ + │ (Eason) │ │ (张大师) │ + │ 架构师/管理员 │ │ 生活与运程助手 │ + │ Session: main │ │ Session: life │ + └────────┬────────┘ └────────┬────────┘ + │ │ + └──────────────┬──────────────┘ + │ + ┌──────────────▼──────────────┐ + │ 共享基础设施层 │ + │ (Shared Infrastructure) │ + └─────────────────────────────┘ +``` + +--- + +## 👥 Agent 角色与职责 + +### 1. Eason (主 Agent) - 架构师/系统管理员 + +| 属性 | 值 | +|------|-----| +| **Agent ID** | `main` | +| **角色** | AI Agent 架构师 / 系统管理员 | +| **职责** | 系统管理、Agent 协调、安全审计、配置优化 | +| **工作区** | `/root/.openclaw/workspace` | +| **Session** | `main` (直接对话) | +| **模型** | `bailian/qwen3.5-plus` | +| **服务对象** | 王院长 | + +**核心能力:** +- 🔧 系统配置与管理 +- 🛡️ 安全审计与加固 +- 📊 性能监控与优化 +- 📝 知识沉淀与文档 +- 🤖 子 Agent 协调与部署 + +--- + +### 2. 张大师 (Life Agent) - 生活与运程助手 + +| 属性 | 值 | +|------|-----| +| **Agent ID** | `life` | +| **角色** | 生活与运程助手 | +| **职责** | 日程管理、黄历查询、运程推送、生活建议 | +| **工作区** | `/root/.openclaw/workspace/agents/life-workspace` | +| **Session** | `life` | +| **模型** | `bailian/qwen3.5-plus` | +| **Telegram** | `@master_zhang_bot` | +| **定时任务** | 每日 21:00 推送运程 | + +**核心能力:** +- 📅 Google Calendar 日程管理 +- 📜 中国传统黄历查询 +- 🔮 每日运程推送 +- 🧠 记忆系统(用户偏好、生辰八字) + +--- + +## 🏛️ 物理文件架构 + +``` +/root/.openclaw/ +├── config.json # 主配置文件 (Gateway) +├── workspace/ # 共享工作区 (Git 仓库) +│ ├── openclaw-config.json # 工作区配置 +│ ├── MEMORY.md # 长期记忆 +│ ├── memory/ # 每日记忆日志 +│ │ ├── 2026-02-26.md +│ │ └── ... +│ ├── agents/ +│ │ ├── registry.md # Agent 注册表 +│ │ ├── life-agent.json # 张大师配置 +│ │ └── life-workspace/ # 张大师工作区 +│ │ ├── AGENTS.md +│ │ ├── SOUL.md +│ │ ├── memory/ +│ │ └── skills/ +│ ├── skills/ # 共享技能库 +│ │ ├── mem0-integration/ # 记忆系统 +│ │ ├── chinese-almanac/ # 黄历查询 +│ │ ├── google-calendar-node/ # 日历管理 +│ │ ├── system-date/ # 日期获取 +│ │ ├── tavily/ # 网络搜索 +│ │ └── openclaw-wecom/ # 企业微信 (待部署) +│ ├── logs/ +│ │ ├── operations/ # 操作日志 +│ │ ├── system/ # 系统日志 +│ │ ├── agents/ # Agent 日志 +│ │ └── security/ # 安全审计 +│ └── deploy.sh # 部署脚本 +├── agents/ +│ ├── main/ # Eason 运行时状态 +│ │ └── agent/ +│ └── life/ # 张大师运行时状态 +│ └── agent/ +└── backups/ # 备份目录 + └── workspace-YYYYMMDD-HHMMSS.tar.gz +``` + +--- + +## 🔧 共享基础设施 + +### 1. 记忆系统 (Memory System) + +``` +┌──────────────────────────────────────────────────────┐ +│ 记忆系统架构 │ +├──────────────────────────────────────────────────────┤ +│ ┌─────────────┐ ┌─────────────┐ │ +│ │ Mem0 Core │────▶│ Qdrant │ │ +│ │ (Python) │ │ (Vector DB)│ │ +│ └──────┬──────┘ └──────┬──────┘ │ +│ │ │ │ +│ │ Embedding │ 1024 维度 │ +│ │ (DashScope) │ localhost:6333 │ +│ ▼ ▼ │ +│ ┌─────────────────────────────────────┐ │ +│ │ MEMORY.md + memory/*.md │ │ +│ │ (文本记忆 · Git 版本控制) │ │ +│ └─────────────────────────────────────┘ │ +└──────────────────────────────────────────────────────┘ +``` + +**配置:** +- **Qdrant:** `localhost:6333` +- **Embedding:** DashScope `text-embedding-v3` (1024 维度) +- **Collection:** `mem0_v4_main`, `mem0_v4_life` (隔离) +- **更新频率:** 每 5 分钟自动同步 + +--- + +### 2. 系统服务 (Systemd Services) + +| 服务名 | 类型 | 状态 | 职责 | +|--------|------|------|------| +| `openclaw-gateway.service` | User-level | ✅ Active | Gateway 主服务 (Port 18789) | +| `openclaw-agent-monitor.service` | System-level | ✅ Active | 健康监控与自动恢复 | + +**监控特性:** +- 每 30 秒健康检查 +- 崩溃自动重启 (max 5 次/5 分钟) +- Telegram 告警通知 +- 资源限制 (CPU 80%, Memory 2G) + +--- + +### 3. 网络架构 + +``` +┌─────────────────────────────────────────────────────┐ +│ 网络访问路径 │ +├─────────────────────────────────────────────────────┤ +│ │ +│ 公网用户 │ +│ │ │ +│ ▼ │ +│ ┌─────────────┐ │ +│ │ Tailscale │ WireGuard 加密 │ +│ │ 100.115.94.1 │ 仅 5 台信任设备可访问 │ +│ └──────┬──────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────┐ │ +│ │ OpenClaw Gateway (Port 18789) │ │ +│ │ Bind: Tailscale 接口 │ │ +│ │ Auth: Token (48 字符) │ │ +│ └─────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────┘ +``` + +**安全特性:** +- Tailscale WireGuard 加密传输 +- Token 认证 (48 字符十六进制) +- 仅 5 台信任设备可访问 +- 无公网端口暴露 + +--- + +## 🔄 Agent 协作模式 + +### 单一实体架构 + +``` +┌─────────────────────────────────────────────────────┐ +│ 单一 Gateway 实例 │ +│ (OpenClaw Gateway v2026.2.19-2) │ +└─────────────────────────────────────────────────────┘ + │ + ┌───────────────┼───────────────┐ + │ │ │ + ▼ ▼ ▼ + ┌──────────┐ ┌──────────┐ ┌──────────┐ + │ Session │ │ Session │ │ Session │ + │ (main) │ │ (life) │ │ (new) │ + │ Eason │ │ 张大师 │ │ 未来 │ + └──────────┘ └──────────┘ └──────────┘ +``` + +**关键特性:** +1. **单一 Gateway** - 所有 Agent 共享同一个 Gateway 实例 +2. **Session 隔离** - 每个 Agent 有独立的 session 和上下文 +3. **共享技能** - skills/ 目录下的技能所有 Agent 可用 +4. **独立配置** - 每个 Agent 有自己的 workspace 和配置 +5. **统一管理** - Eason 负责所有 Agent 的部署和优化 + +--- + +## 📊 资源配置 + +### 计算资源 + +| 资源 | 总量 | Gateway 使用 | Monitor 使用 | 可用 | +|------|------|-------------|-------------|------| +| **CPU** | 4 核 | 80% 限制 | 20% 限制 | - | +| **内存** | 3.8GB | 558MB | 24MB | 3.2GB | +| **磁盘** | 63GB | 25GB 已用 | - | 37GB | + +### 模型配置 + +```json +{ + "primary": "bailian/qwen3.5-plus", + "fallbacks": [ + "bailian/qwen3.5-plus-2026-02-15", + "minimax-cn/MiniMax-M2.5" + ] +} +``` + +--- + +## 🔐 安全架构 + +### 分层防护 + +``` +┌─────────────────────────────────────────────────────┐ +│ Layer 1: 网络层 │ +│ - Tailscale WireGuard 加密 │ +│ - 仅信任设备可访问 (5 台) │ +│ - 无公网端口暴露 │ +└─────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────┐ +│ Layer 2: 认证层 │ +│ - Token 认证 (48 字符) │ +│ - 设备认证 (已知权衡:HTTP 下禁用) │ +│ - 速率限制 (可选) │ +└─────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────┐ +│ Layer 3: 应用层 │ +│ - 插件白名单 (待启用) │ +│ - 会话隔离 │ +│ - 权限控制 │ +└─────────────────────────────────────────────────────┘ +``` + +--- + +## 📈 扩展性设计 + +### 新增 Agent 流程 + +``` +1. 定义 Agent 功能 + │ + ▼ +2. 创建配置文件 (agents/life-agent.json 模板) + │ + ▼ +3. 注册到 registry.md + │ + ▼ +4. 配置技能和模型 + │ + ▼ +5. 设置 systemd 服务 (可选) + │ + ▼ +6. 配置监控和日志 + │ + ▼ +7. 测试验证 + │ + ▼ +8. 更新 MEMORY.md +``` + +### 容量规划 + +| 指标 | 当前 | 上限 | 备注 | +|------|------|------|------| +| Agent 数量 | 2 | ~10 | 受内存限制 | +| 并发 Session | 5 | 20 | Gateway 配置 | +| 记忆条目 | ~1000 | 无限制 | Qdrant 向量库 | + +--- + +## 📝 运维命令 + +### 服务管理 + +```bash +# 查看状态 +./deploy.sh status + +# 重启服务 +./deploy.sh restart + +# 健康检查 +./deploy.sh health + +# 查看日志 +./deploy.sh logs +``` + +### Git 管理 + +```bash +# 提交配置 +cd /root/.openclaw/workspace +git add -A +git commit -m "描述" +git push origin master + +# 回滚 +./deploy.sh rollback +``` + +### 备份 + +```bash +# 手动备份 +./deploy.sh backup + +# 备份位置 +/root/.openclaw/backups/workspace-YYYYMMDD-HHMMSS.tar.gz +``` + +--- + +## 🎯 待扩展功能 + +| 功能 | 优先级 | 状态 | +|------|--------|------| +| 企业微信集成 | 中 | 技能已开发,待部署 | +| Prometheus 监控 | 低 | 规划中 | +| 自动化 CI/CD | 低 | 规划中 | +| 多节点高可用 | 低 | 远期规划 | + +--- + +**最后更新:** 2026-02-26 21:20 UTC +**维护人:** Eason (陈医生) diff --git a/skills/mem0-integration/config-life.yaml b/skills/mem0-integration/config-life.yaml index 6f003e1..ad81b63 100644 --- a/skills/mem0-integration/config-life.yaml +++ b/skills/mem0-integration/config-life.yaml @@ -1,15 +1,16 @@ # mem0 Integration Configuration - 张大师专用 # Agent ID: life (生活与运程助手) # 用户生辰:1984 年 5 月 16 日 23:00-24:00 (子时) +# 架构:单库融合 + 元数据标签软隔离 (agent_id: "life") -# 本地 Qdrant 配置 -local: +# 全局 Qdrant 配置(所有 Agent 共享同一个 Collection) +global: vector_store: provider: qdrant config: host: localhost port: 6333 - collection_name: mem0_v4_life # 张大师专用集合 + collection_name: mem0_global_v4 # 唯一全局 Collection,通过 agent_id 区分 llm: provider: openai @@ -21,19 +22,10 @@ local: embedder: provider: openai config: - model: text-embedding-v4 + model: text-embedding-v4 # Gemini Pro Embedding (1024 维度) api_base: https://dashscope.aliyuncs.com/compatible-mode/v1 api_key: ${DASHSCOPE_API_KEY} -# 中心 Qdrant 配置(共享记忆 - 与陈医生共享) -master: - vector_store: - provider: qdrant - config: - host: 100.115.94.1 - port: 6333 - collection_name: mem0_v4_shared - # 同步配置 sync: enabled: true diff --git a/skills/mem0-integration/mem0_client.py b/skills/mem0-integration/mem0_client.py index c11a9ad..2933fc7 100644 --- a/skills/mem0-integration/mem0_client.py +++ b/skills/mem0-integration/mem0_client.py @@ -14,7 +14,7 @@ from collections import deque from datetime import datetime # ========== DashScope 环境变量配置 ========== -# 标准计费通道 (text-embedding-v3 专用) +# Gemini Pro Embedding 模型:text-embedding-v4 (1024 维度) os.environ['OPENAI_API_BASE'] = 'https://dashscope.aliyuncs.com/compatible-mode/v1' os.environ['OPENAI_BASE_URL'] = 'https://dashscope.aliyuncs.com/compatible-mode/v1' # 关键:兼容模式需要此变量 os.environ['OPENAI_API_KEY'] = os.getenv('MEM0_DASHSCOPE_API_KEY', 'sk-4111c9dba5334510968f9ae72728944e') @@ -138,12 +138,12 @@ class Mem0Client: self._init_memory() def _load_default_config(self) -> Dict: - """加载默认配置""" + """加载默认配置 - 单库融合架构""" return { "qdrant": { "host": os.getenv('MEM0_QDRANT_HOST', 'localhost'), "port": int(os.getenv('MEM0_QDRANT_PORT', '6333')), - "collection_name": "mem0_v4_shared" + "collection_name": "mem0_global_v4" # 唯一全局 Collection }, "llm": { "provider": "openai", diff --git a/skills/mem0-integration/skill.json b/skills/mem0-integration/skill.json index 737bced..5b6eb50 100644 --- a/skills/mem0-integration/skill.json +++ b/skills/mem0-integration/skill.json @@ -22,7 +22,7 @@ "qdrant": { "host": "localhost", "port": 6333, - "collection_name": "mem0_local" + "collection_name": "mem0_global_v4" }, "llm": { "model": "qwen-plus",