commit cfd76bed9afa1f4a8d09b05ee4ac6d2d043974ef Author: OpenClaw Backup Bot Date: Tue Apr 21 11:08:32 2026 +0800 feat: openclaw-memory-config skill - 记忆系统配置(Memory Search + Dreaming + Memory Wiki) diff --git a/README.md b/README.md new file mode 100644 index 0000000..c5fcbc6 --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# openclaw-memory-config + +OpenClaw 技能(Skill):一键配置 OpenClaw 记忆系统。 + +## 简介 + +本技能帮助用户在 OpenClaw 实例上配置完整的记忆系统,包含三大模块: + +1. **Memory Search** — 基于向量的语义记忆搜索 +2. **Dreaming** — 夜间自动记忆整理(短期 → 长期) +3. **Memory Wiki** — 结构化知识库(isolated 模式) + +## Embedding 服务 + +默认使用传米科技 trapi 的 embedding 端点: + +| 项目 | 值 | +|------|-----| +| Provider | `openai`(OpenAI 兼容) | +| Base URL | `https://lapi.transiglobal.com/v1` | +| 模型 | `bge-large-zh-v1.5` | + +复用 trapi API Key,无需单独配置 embedding provider。 + +## 使用方式 + +### 安装技能 + +```bash +openclaw skill install openclaw-memory-config.skill +``` + +### 配置 + +在 OpenClaw 对话中说: + +> "配置记忆" + +技能会引导完成: +1. **Memory Search**:配置 embedding → 构建索引 → 测试搜索 +2. **Dreaming**:启用夜间记忆整理(每天 4:30 自动运行) +3. **Memory Wiki**:确认内容目录 → 初始化 vault → 导入内容 → 创建每日维护定时任务 + +### 安全说明 + +- API Key 必须由用户提供,技能中不存储默认密钥 +- Memory Wiki 默认使用 isolated 模式,数据完全独立 +- 所有配置通过 `gateway config.patch` 标准方式写入 + +## 许可证 + +MIT diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..8c406d4 --- /dev/null +++ b/SKILL.md @@ -0,0 +1,261 @@ +--- +name: openclaw-memory-config +description: | + 配置 OpenClaw 记忆系统:Memory Search(向量搜索)、Dreaming(记忆整理)、Memory Wiki(知识库)。触发词:"配置记忆"、"配置 memory"、"memory search"、"配置搜索"、"配置 dreaming"、"配置梦境"、"配置 wiki"、"memory wiki"、"记忆配置"。使用本机已有 trapi embedding 端点,为用户提供完整的记忆系统初始化流程。 +--- + +# OpenClaw 记忆系统配置 + +一键配置 OpenClaw 记忆系统,包含 Memory Search(向量语义搜索)、Dreaming(夜间记忆整理)、Memory Wiki(知识库)三大模块。 + +## Embedding 服务信息 + +- **Provider**:`openai`(OpenAI 兼容格式) +- **Base URL**:`https://lapi.transiglobal.com/v1` +- **默认模型**:`bge-large-zh-v1.5` +- **说明**:复用 trapi 的 API Key,不需要单独的 embedding provider + +## 前置条件 + +1. 用户**必须提供 trapi API Key**(与 trapi provider 使用同一个 Key) +2. OpenClaw 已安装并运行 +3. 本机配置文件为 `openclaw.json`,使用 `gateway config.patch` 写入 + +--- + +## 模块 1:Memory Search(语义记忆搜索) + +### 步骤 1:配置 Embedding + +向用户索要 trapi API Key。未提供则终止流程。 + +使用 `gateway config.patch` 配置 `agents.defaults.memorySearch`: + +```json +{ + "agents": { + "defaults": { + "memorySearch": { + "provider": "openai", + "model": "bge-large-zh-v1.5", + "remote": { + "baseUrl": "https://lapi.transiglobal.com/v1", + "apiKey": "<用户提供的API_KEY>" + }, + "chunking": { + "tokens": 200, + "overlap": 30 + }, + "query": { + "maxResults": 10, + "minScore": 0.35, + "hybrid": { + "enabled": true, + "vectorWeight": 0.85, + "textWeight": 0.15, + "candidateMultiplier": 8, + "mmr": { + "enabled": true, + "lambda": 0.5 + }, + "temporalDecay": { + "enabled": true, + "halfLifeDays": 30 + } + } + } + } + } + } +} +``` + +### 步骤 2:构建索引 + +配置写入后,立即执行: + +```bash +openclaw memory index --force +``` + +### 步骤 3:测试搜索 + +索引构建完成后,用 `memory_search` 测试是否生效: + +1. 从用户的 memory 目录中找到已有内容的关键词 +2. 执行 `memory_search` 搜索 +3. 确认能返回相关结果,报告搜索质量 + +**测试关键词示例**(根据实际记忆内容选择): +- 搜索 "传米科技" → 应找到公司相关信息 +- 搜索 "Tailscale" → 应找到网络配置信息 +- 搜索最近的日期 → 应找到当天的日记 + +### 验证报告 + +| 测试项 | 关键词 | 结果 | +|--------|--------|------| +| 语义搜索 | <实际关键词> | ✅/❌ | +| 索引状态 | `openclaw memory status` | ✅/❌ | + +--- + +## 模块 2:Dreaming(夜间记忆整理) + +### 配置 + +使用 `gateway config.patch` 启用 dreaming: + +```json +{ + "plugins": { + "entries": { + "memory-core": { + "enabled": true, + "config": { + "dreaming": { + "enabled": true, + "frequency": "30 4 * * *", + "timezone": "Asia/Shanghai" + } + } + } + } + } +} +``` + +- **频率**:每天凌晨 4:30(在安全巡检和系统升级之后) +- **三个阶段**:Light(排序)→ REM(反思)→ Deep(提升到长期记忆) +- **输出**:`memory/dreaming/` 下的阶段报告 + `DREAMS.md` 日记 +- **长期记忆**:Deep 阶段会将高价值内容写入 `MEMORY.md` + +### 验证 + +运行 `/dreaming status` 确认 dreaming 已启用并显示下次执行时间。 + +--- + +## 模块 3:Memory Wiki(知识库) + +### 前置确认 + +**必须先向用户确认**:是否有需要放入 Wiki 的内容目录。 + +- **有**:继续配置 +- **没有**:跳过此模块,告知用户后续可随时配置 + +### 步骤 1:配置 Wiki + +使用 `gateway config.patch` 启用 memory-wiki(isolated 模式): + +```json +{ + "plugins": { + "entries": { + "memory-wiki": { + "enabled": true, + "config": { + "vaultMode": "isolated", + "vault": { + "path": "~/.openclaw/wiki/main", + "renderMode": "obsidian" + }, + "bridge": { + "enabled": false, + "readMemoryArtifacts": true, + "indexDreamReports": true, + "indexDailyNotes": true, + "indexMemoryRoot": true, + "followMemoryEvents": true + }, + "search": { + "backend": "shared", + "corpus": "all" + }, + "context": { + "includeCompiledDigestPrompt": false + }, + "render": { + "preserveHumanBlocks": true, + "createBacklinks": true, + "createDashboards": true + }, + "ingest": { + "autoCompile": true, + "maxConcurrentJobs": 1 + }, + "obsidian": { + "enabled": true + } + } + } + } + } +} +``` + +### 步骤 2:导入内容 + +用户提供内容目录后,使用 CLI 导入: + +```bash +openclaw wiki init +openclaw wiki ingest <用户提供的内容目录> +openclaw wiki compile +``` + +### 步骤 3:创建每日维护定时任务 + +创建定时任务(参考已有配置),每天凌晨 5:00 执行 Wiki 维护: + +``` +cron add: + name: "Wiki 每日维护(Sources 同步 + Lint)" + schedule: "0 5 * * *" (Asia/Shanghai) + sessionTarget: "isolated" + payload: + kind: "agentTurn" + message: | + 执行每日 Wiki 维护任务: + 1. 执行 wiki_lint 检查 + 2. 自动修复可修复的问题(缺失 frontmatter、匹配 sourceIds) + 3. 无法自动修复的问题(broken wikilinks)跳过 + 4. 再跑一次 wiki_lint 确认 + 5. 汇报结果 + toolsAllow: ["exec", "read", "edit", "write", "wiki_lint", "wiki_apply", "wiki_search", "wiki_get"] + timeoutSeconds: 600 + delivery: + mode: "announce" + channel: "feishu" +``` + +### 验证 + +- `wiki_status` 确认 vault 模式和健康状态 +- `wiki_search` 测试能否搜到导入的内容 +- `wiki_lint` 检查结构完整性 + +--- + +## 完整验证报告 + +全部模块配置完成后,输出汇总表: + +| 模块 | 配置项 | 状态 | +|------|--------|------| +| Memory Search | Embedding + 索引 | ✅/❌ | +| Memory Search | 语义搜索测试 | ✅/❌ | +| Dreaming | 启用 + cron | ✅/❌ | +| Memory Wiki | Vault 初始化 | ✅/❌(可能跳过) | +| Memory Wiki | 内容导入 | ✅/❌(可能跳过) | +| Memory Wiki | 定时维护任务 | ✅/❌(可能跳过) | + +## 故障排查 + +- **索引为空**:`openclaw memory index --force` 强制重建 +- **只有关键词匹配**:embedding provider 未配好,检查 API Key 和网络 +- **CJK 搜索失败**:`openclaw memory index --force` 重建 FTS +- **Dreaming 未运行**:检查 `/dreaming status` 和 cron 任务 +- **Wiki bridge 无数据**:isolated 模式下 bridge 关闭是正常的 +- **Wiki ingest 失败**:确认目录路径和文件权限