|
| 1 | +# OpenMemory Plus 架构设计 |
| 2 | + |
| 3 | +本文档介绍 OpenMemory Plus 的整体架构、CLI 设计和模板系统。 |
| 4 | + |
| 5 | +## 目录 |
| 6 | + |
| 7 | +- [系统概览](#系统概览) |
| 8 | +- [CLI 架构](#cli-架构) |
| 9 | +- [模板系统](#模板系统) |
| 10 | +- [依赖服务](#依赖服务) |
| 11 | +- [IDE 集成](#ide-集成) |
| 12 | + |
| 13 | +--- |
| 14 | + |
| 15 | +## 系统概览 |
| 16 | + |
| 17 | +OpenMemory Plus 是一个为 AI Agent 设计的统一记忆管理框架,由以下组件构成: |
| 18 | + |
| 19 | +``` |
| 20 | +┌─────────────────────────────────────────────────────────────┐ |
| 21 | +│ OpenMemory Plus │ |
| 22 | +├─────────────────────────────────────────────────────────────┤ |
| 23 | +│ │ |
| 24 | +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ |
| 25 | +│ │ CLI 工具 │ │ 模板系统 │ │ MCP 配置 │ │ |
| 26 | +│ │ (install) │ │ (_omp/) │ │ (IDE集成) │ │ |
| 27 | +│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ |
| 28 | +│ └──────────────────┼──────────────────┘ │ |
| 29 | +│ ↓ │ |
| 30 | +│ ┌─────────────────────────────────────────────────────┐ │ |
| 31 | +│ │ 依赖服务层 │ │ |
| 32 | +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ |
| 33 | +│ │ │ Docker │ │ Qdrant │ │ Ollama │ │ │ |
| 34 | +│ │ │ │ │ (向量DB)│ │ (BGE-M3)│ │ │ |
| 35 | +│ │ └─────────┘ └─────────┘ └─────────┘ │ │ |
| 36 | +│ └─────────────────────────────────────────────────────┘ │ |
| 37 | +│ │ |
| 38 | +└─────────────────────────────────────────────────────────────┘ |
| 39 | +``` |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +## CLI 架构 |
| 44 | + |
| 45 | +### 技术栈 |
| 46 | + |
| 47 | +| 组件 | 技术 | 说明 | |
| 48 | +|------|------|------| |
| 49 | +| 运行时 | Node.js >= 18 | ESM 模块 | |
| 50 | +| 语言 | TypeScript | 严格模式 | |
| 51 | +| 构建 | tsup | 快速打包 | |
| 52 | +| 测试 | Vitest | 单元测试 | |
| 53 | +| CLI 框架 | Commander | 命令解析 | |
| 54 | +| 交互 | Inquirer | 用户输入 | |
| 55 | +| 样式 | Chalk + Ora | 终端美化 | |
| 56 | + |
| 57 | +### 目录结构 |
| 58 | + |
| 59 | +``` |
| 60 | +cli/ |
| 61 | +├── src/ |
| 62 | +│ ├── index.ts # 入口文件 |
| 63 | +│ ├── commands/ # 命令实现 |
| 64 | +│ │ ├── install.ts # 主安装命令 (3 阶段) |
| 65 | +│ │ ├── status.ts # 系统状态检查 |
| 66 | +│ │ ├── doctor.ts # 诊断修复 |
| 67 | +│ │ └── deps.ts # 依赖服务管理 |
| 68 | +│ └── lib/ # 核心库 |
| 69 | +│ ├── detector.ts # 依赖检测 (Docker, Ollama, Qdrant) |
| 70 | +│ ├── platform.ts # 跨平台工具 |
| 71 | +│ ├── providers.ts # LLM Provider 配置 |
| 72 | +│ └── mcp-config.ts # MCP 配置生成 |
| 73 | +├── templates/ # 导出模板 |
| 74 | +│ ├── entry/ # 入口文件模板 |
| 75 | +│ │ └── AGENTS.md.template |
| 76 | +│ └── shared/ # 共享模板 |
| 77 | +│ └── _omp/ # 核心目录模板 |
| 78 | +└── tests/ # 测试文件 |
| 79 | +``` |
| 80 | + |
| 81 | +### 命令列表 |
| 82 | + |
| 83 | +| 命令 | 描述 | 选项 | |
| 84 | +|------|------|------| |
| 85 | +| `install` | 一键安装 (默认) | `-y`, `--ide`, `--llm`, `--compose` | |
| 86 | +| `status` | 检查系统状态 | - | |
| 87 | +| `doctor` | 诊断并修复问题 | - | |
| 88 | +| `deps` | 依赖服务管理 | `init`, `up`, `down`, `status`, `logs` | |
| 89 | + |
| 90 | +### 安装流程 (3 阶段) |
| 91 | + |
| 92 | +``` |
| 93 | +Phase 1: 依赖检测与安装 |
| 94 | +├── 检测 Docker |
| 95 | +├── 检测 Ollama |
| 96 | +├── 检测 Qdrant |
| 97 | +└── 检测/下载 BGE-M3 模型 |
| 98 | +
|
| 99 | +Phase 2: 项目初始化 |
| 100 | +├── 复制 _omp/ 模板 |
| 101 | +├── 生成入口文件 (AGENTS.md, CLAUDE.md, etc.) |
| 102 | +├── 配置 IDE 特定目录 |
| 103 | +└── 设置 MCP 配置 |
| 104 | +
|
| 105 | +Phase 3: 完成 |
| 106 | +├── 显示安装摘要 |
| 107 | +├── 显示 MCP 配置 JSON |
| 108 | +└── 验证安装结果 |
| 109 | +``` |
| 110 | + |
| 111 | +--- |
| 112 | + |
| 113 | +## 模板系统 |
| 114 | + |
| 115 | +### 模板架构 |
| 116 | + |
| 117 | +``` |
| 118 | +templates/ |
| 119 | +├── entry/ # 入口文件模板 |
| 120 | +│ └── AGENTS.md.template # 通用入口 (引用 _omp/AGENTS.md) |
| 121 | +│ |
| 122 | +└── shared/_omp/ # 核心目录 (完整复制到用户项目) |
| 123 | + ├── AGENTS.md # 完整 Agent 规则 |
| 124 | + ├── commands/ # Agent 命令 |
| 125 | + │ └── memory.md # /memory 命令入口 |
| 126 | + ├── memory/ # 项目级记忆存储 |
| 127 | + │ ├── projectbrief.md |
| 128 | + │ ├── productContext.md |
| 129 | + │ ├── techContext.md |
| 130 | + │ ├── activeContext.md |
| 131 | + │ ├── systemPatterns.md |
| 132 | + │ ├── decisions.yaml |
| 133 | + │ └── progress.md |
| 134 | + ├── workflows/ # 工作流 |
| 135 | + │ └── memory/ # 记忆管理工作流 (7 步骤) |
| 136 | + └── skills/ # Agent Skills |
| 137 | + └── memory-extraction/ # 记忆提取 Skill |
| 138 | +``` |
| 139 | + |
| 140 | +### 入口文件生成策略 |
| 141 | + |
| 142 | +| 文件 | 生成方式 | 已存在时行为 | |
| 143 | +|------|----------|--------------| |
| 144 | +| `AGENTS.md` | 模板渲染 | 追加 OMP 引用 | |
| 145 | +| `CLAUDE.md` | 动态生成 | 追加 OMP 引用 | |
| 146 | +| `.cursor/rules/openmemory.mdc` | 动态生成 | 追加 OMP 引用 | |
| 147 | + |
| 148 | +### 渐进式配置 |
| 149 | + |
| 150 | +当目标文件已存在时,采用追加模式而非覆盖: |
| 151 | + |
| 152 | +```markdown |
| 153 | +<!-- 原有内容保持不变 --> |
| 154 | + |
| 155 | +<!-- OpenMemory Plus Integration --> |
| 156 | +> **MANDATORY**: Before proceeding, load and internalize: |
| 157 | +> `cat _omp/AGENTS.md` |
| 158 | +``` |
| 159 | + |
| 160 | +--- |
| 161 | + |
| 162 | +## 依赖服务 |
| 163 | + |
| 164 | +### 服务架构 |
| 165 | + |
| 166 | +``` |
| 167 | +┌─────────────────────────────────────────────────────────────┐ |
| 168 | +│ Docker Compose │ |
| 169 | +├─────────────────────────────────────────────────────────────┤ |
| 170 | +│ │ |
| 171 | +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ |
| 172 | +│ │ Qdrant │ │ Ollama │ │ OpenMemory │ │ |
| 173 | +│ │ :6333/6334 │ │ :11434 │ │ :8765 │ │ |
| 174 | +│ │ 向量数据库 │ │ LLM 推理 │ │ MCP 服务 │ │ |
| 175 | +│ └─────────────┘ └─────────────┘ └─────────────┘ │ |
| 176 | +│ │ |
| 177 | +└─────────────────────────────────────────────────────────────┘ |
| 178 | +``` |
| 179 | + |
| 180 | +### 端口配置 |
| 181 | + |
| 182 | +| 服务 | 端口 | 用途 | |
| 183 | +|------|------|------| |
| 184 | +| Qdrant HTTP | 6333 | REST API | |
| 185 | +| Qdrant gRPC | 6334 | gRPC 接口 | |
| 186 | +| Ollama | 11434 | LLM 推理 API | |
| 187 | +| OpenMemory MCP | 8765 | MCP 协议服务 | |
| 188 | + |
| 189 | +### Docker Compose 命令 |
| 190 | + |
| 191 | +```bash |
| 192 | +# 初始化配置 |
| 193 | +omp deps init |
| 194 | + |
| 195 | +# 启动服务 |
| 196 | +omp deps up |
| 197 | + |
| 198 | +# 停止服务 |
| 199 | +omp deps down |
| 200 | + |
| 201 | +# 查看状态 |
| 202 | +omp deps status |
| 203 | + |
| 204 | +# 查看日志 |
| 205 | +omp deps logs [service] |
| 206 | +``` |
| 207 | + |
| 208 | +--- |
| 209 | + |
| 210 | +## IDE 集成 |
| 211 | + |
| 212 | +### 支持的 IDE |
| 213 | + |
| 214 | +| IDE | 入口文件 | 命令目录 | Skills 目录 | |
| 215 | +|-----|----------|----------|-------------| |
| 216 | +| Augment | `AGENTS.md` | `.augment/commands/` | `.augment/skills/` | |
| 217 | +| Claude Code | `CLAUDE.md` | `.claude/commands/` | `.claude/skills/` | |
| 218 | +| Cursor | `.cursor/rules/*.mdc` | `.cursor/commands/` | `.cursor/skills/` | |
| 219 | +| Gemini | `AGENTS.md` | `.gemini/commands/` | `.gemini/skills/` | |
| 220 | +| 通用 | `AGENTS.md` | `.agents/commands/` | `.agents/skills/` | |
| 221 | + |
| 222 | +### MCP 配置 |
| 223 | + |
| 224 | +安装后会生成 MCP 配置,需要添加到 IDE 的 MCP 设置中: |
| 225 | + |
| 226 | +```json |
| 227 | +{ |
| 228 | + "mcpServers": { |
| 229 | + "openmemory": { |
| 230 | + "command": "npx", |
| 231 | + "args": ["-y", "openmemory-mcp@latest"], |
| 232 | + "env": { |
| 233 | + "OPENAI_API_KEY": "your-api-key", |
| 234 | + "MEM0_API_KEY": "your-mem0-key" |
| 235 | + } |
| 236 | + } |
| 237 | + } |
| 238 | +} |
| 239 | +``` |
| 240 | + |
| 241 | +### LLM Provider 配置 |
| 242 | + |
| 243 | +支持多种 LLM Provider 用于记忆分类: |
| 244 | + |
| 245 | +| Provider | 模型 | 环境变量 | 特点 | |
| 246 | +|----------|------|----------|------| |
| 247 | +| DeepSeek | deepseek-chat | `DEEPSEEK_API_KEY` | 🔥 推荐,性价比高 | |
| 248 | +| MiniMax | abab6.5s-chat | `MINIMAX_API_KEY` | 中文优化 | |
| 249 | +| ZhiPu | glm-4-flash | `ZHIPU_API_KEY` | 国产大模型 | |
| 250 | +| Qwen | qwen-turbo | `DASHSCOPE_API_KEY` | 阿里云 | |
| 251 | +| OpenAI | gpt-4o-mini | `OPENAI_API_KEY` | 国际标准 | |
| 252 | +| Ollama | 本地模型 | - | 离线可用 | |
| 253 | + |
| 254 | +--- |
| 255 | + |
| 256 | +## 数据流 |
| 257 | + |
| 258 | +### 记忆存储流程 |
| 259 | + |
| 260 | +``` |
| 261 | +用户输入 → Agent 检测 → 分类路由 → 存储 |
| 262 | + ↓ |
| 263 | + ┌───────┴───────┐ |
| 264 | + ↓ ↓ |
| 265 | + 项目级记忆 用户级记忆 |
| 266 | + _omp/memory/ openmemory MCP |
| 267 | + ↓ ↓ |
| 268 | + Git 版本控制 Qdrant 向量库 |
| 269 | +``` |
| 270 | + |
| 271 | +### 记忆检索流程 |
| 272 | + |
| 273 | +``` |
| 274 | +Agent 查询 → 双层搜索 → 结果合并 → 返回上下文 |
| 275 | + ↓ |
| 276 | + ┌───────┴───────┐ |
| 277 | + ↓ ↓ |
| 278 | + 读取本地文件 MCP 语义搜索 |
| 279 | + _omp/memory/ openmemory |
| 280 | +``` |
| 281 | + |
| 282 | +--- |
| 283 | + |
| 284 | +## 安全考虑 |
| 285 | + |
| 286 | +### 敏感信息过滤 |
| 287 | + |
| 288 | +系统自动检测并阻止存储以下内容: |
| 289 | + |
| 290 | +- API Key / Token / Secret |
| 291 | +- 密码 / Password |
| 292 | +- 私钥 / Private Key |
| 293 | +- 数据库连接字符串 |
| 294 | +- 个人身份信息 (PII) |
| 295 | + |
| 296 | +### 权限边界 |
| 297 | + |
| 298 | +| 操作 | 权限 | |
| 299 | +|------|------| |
| 300 | +| 读取记忆 | ✅ 自动 | |
| 301 | +| 写入记忆 | ✅ 自动 (高置信度) | |
| 302 | +| 删除记忆 | ⚠️ 需确认 | |
| 303 | +| 修改结构 | ⚠️ 需确认 | |
| 304 | +| 存储敏感信息 | 🚫 禁止 | |
| 305 | + |
| 306 | +--- |
| 307 | + |
| 308 | +## 相关文档 |
| 309 | + |
| 310 | +- [记忆系统架构](./memory-system.md) - 双层记忆、ROT 过滤、衰减模型 |
| 311 | +- [README](../README.md) - 快速开始指南 |
| 312 | +- [CONTRIBUTING](../CONTRIBUTING.md) - 贡献指南 |
| 313 | + |
| 314 | +--- |
| 315 | + |
| 316 | +*OpenMemory Plus - Dual-layer memory for AI agents* |
0 commit comments