<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>向量检索 on 老朱的赛博工位</title><link>https://blog.zjkun.top/tags/%E5%90%91%E9%87%8F%E6%A3%80%E7%B4%A2/</link><description>Recent content in 向量检索 on 老朱的赛博工位</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 22 Oct 2026 00:50:00 +0800</lastBuildDate><atom:link href="https://blog.zjkun.top/tags/%E5%90%91%E9%87%8F%E6%A3%80%E7%B4%A2/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenClaw 记忆系统拆解：文件即记忆，附 memory_search 修了半年的实录</title><link>https://blog.zjkun.top/posts/openclaw-5-memory-system/</link><pubDate>Thu, 22 Oct 2026 00:50:00 +0800</pubDate><guid>https://blog.zjkun.top/posts/openclaw-5-memory-system/</guid><description>OpenClaw 的记忆不是黑盒：MEMORY.md + 每日日志 + 专项档案的文件层，加向量/关键词混合检索的索引层。这篇带我 6 月到 10 月的三次真实故障全录：JSON 反斜杠、检索瘫痪 48 天、根因缺 OPENAI_API_KEY 到 bge-m3 修复上线。</description><content:encoded><![CDATA[<p>我这套 OpenClaw 用了大半年，记忆是我用得最重的功能，也是坏得最多次的功能。这篇把设计和三次真实事故一起写干净。</p>
<h2 id="文件层记忆的第一现场">文件层：记忆的第一现场</h2>
<p>OpenClaw 的记忆本体就是一堆 Markdown，按热度分层：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>workspace/
</span></span><span style="display:flex;"><span>├── MEMORY.md            # 长期精炼记忆（画像/项目/待办/钦定规则）——主会话每次注入
</span></span><span style="display:flex;"><span>└── memory/
</span></span><span style="display:flex;"><span>    ├── daily/           # 每日原始日志 YYYY-MM-DD.md——当天事实随手写
</span></span><span style="display:flex;"><span>    ├── projects/        # 专项档案（某条业务线的完整历史）
</span></span><span style="display:flex;"><span>    ├── profiles/ contacts/ schedules/ context/   # 人物/日程/上下文档案
</span></span><span style="display:flex;"><span>    └── ── 结构化知识 → ~/.openclaw/wiki/main/（entities/concepts/syntheses/sources）
</span></span></code></pre></div><p>运转节奏：<strong>当天事写 daily，定期（我放在每天 23:56 的 cron 维护班）把 daily 提炼进 MEMORY.md，过时内容清理或迁 projects 档案</strong>。主人说&quot;记住这个&quot;，必须立刻落文件——没有&quot;心里记一下&quot;这回事，因为每次会话都是全新醒来。关联信息用 <code>[[双向链接]]</code>，这玩法直接抄 Obsidian。</p>
<p>这条路上我交过的学费是体积：这些文件每次会话都注入，就是持续的 token 成本。9/25 大瘦身，TOOLS.md 12.6KB→3.7KB、开机注入总量 42KB→20KB，手法就一招——<strong>细节全部下沉到 projects 档案，常驻只留指针</strong>。</p>
<h2 id="索引层坏过三次的位置">索引层：坏过三次的位置</h2>
<p>文件多了要找回来，靠内置 <code>memory_search</code>（向量语义+关键词两路并行，和我做 RAG 项目的混合检索同一个架构）。它的三次事故：</p>
<p><strong>事故一（6/19）：一个反斜杠消失在搜索里。</strong> 现象：前一天的发布记录搜不到。根因：<code>openclaw.json</code> 里 <code>memorySearch.extraPaths</code> 写了<strong>单反斜杠</strong>路径，JSON 未转义，自定义目录（profiles/projects 等）全部加载失败。修复：改双反斜杠 <code>\\</code>，重启网关。附带发现：session-memory hook 也没把旧会话落盘——从此我定了规矩：<strong>重要对话手动写 daily，不赌自动 hook</strong>。</p>
<p><strong>事故二（9/3 起，瘫了近 50 天）：语义那条腿断了。</strong> 现象：memory_search 持续不可用。当时定位到&quot;openai provider 无 API key&quot;，先拿 <code>qmd</code> CLI 和直接读文件兜底，业务照常跑——<strong>检索坏了不等于记忆丢了，文件才是事实源</strong>，这是这个架构最让我安心的一点。</p>
<p><strong>事故三（10/21 根治）：根因查实。</strong> 配置里只有 extraPaths 没写 embedding provider → 系统<strong>默认走 OpenAI 的 embeddings 接口要 <code>OPENAI_API_KEY</code></strong> → 本机没这个 key → 语义检索废了，qmd 也是同一个死因。当天修复：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#75715e">// agents.defaults.memorySearch
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;provider&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;openai-compatible&#34;</span><span style="color:#960050;background-color:#1e0010">,</span>
</span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;model&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;BAAI/bge-m3&#34;</span><span style="color:#960050;background-color:#1e0010">,</span>
</span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;remote&#34;</span><span style="color:#960050;background-color:#1e0010">:</span> { <span style="color:#f92672">&#34;baseUrl&#34;</span>: <span style="color:#e6db74">&#34;https://api.siliconflow.cn/v1&#34;</span>, <span style="color:#f92672">&#34;apiKey&#34;</span>: <span style="color:#e6db74">&#34;&lt;复用我 .env 里的 SILICONFLOW key&gt;&#34;</span> }
</span></span></code></pre></div><p>然后 <code>openclaw memory index --force</code> 全量重建索引，<code>config validate</code> 通过，实测查询返回正常（vectorScore 有值了）。选 bge-m3 是因为它本来就是我 RAG 学习项目的同款，硅基流动免费档够用，同路还有 bge-reranker-v2-m3 以后精排可以直接复用。<strong>成本：零</strong>（key 现成，模型白嫖）。</p>
<h2 id="验收记忆是否真的在">验收记忆是否真的在</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>openclaw memory status      <span style="color:#75715e"># 索引状态</span>
</span></span><span style="display:flex;"><span>openclaw memory index --force  <span style="color:#75715e"># 重建</span>
</span></span><span style="display:flex;"><span>qmd update <span style="color:#f92672">&amp;&amp;</span> qmd embed --no-gpu  <span style="color:#75715e"># 备用 CLI 索引</span>
</span></span></code></pre></div><p>再加一条行为层的验收：隔几天新开一个会话，问它&quot;我 9 月干过什么&quot;——能从 daily 和 MEMORY.md 里答对，这套记忆才算活着。</p>
<hr>
<p><strong>「OpenClaw 实战」系列</strong>（随我用随更）：① <a href="/posts/openclaw-1-install-windows/">Windows 安装上线篇</a> · ② <a href="/posts/openclaw-2-architecture/">架构扫盲</a> · ③ <a href="/posts/openclaw-3-console-tips/">控制台与日常使用</a> · ④ <a href="/posts/openclaw-4-model-provider/">模型接入</a> · ⑤ <a href="/posts/openclaw-5-memory-system/">记忆系统</a> · ⑥ <a href="/posts/openclaw-6-cron-cost/">定时任务与降本</a> · ⑦ <a href="/posts/openclaw-7-plugins-deps/">增加依赖</a></p>
]]></content:encoded></item></channel></rss>