虾折腾大赛+给你的OpenClaw装一颗「长期记忆」大脑!让小龙虾越用越聪明!
AI超元域
2026年03月12日 15:00

你有没有遇到过这种情况:跟你的 AI Bot 聊了半天,第二天再来,它一脸茫然地说"你好,请问有什么可以帮你的?"——好像昨天什么都没发生过。

今天这篇笔记,就帮你彻底解决这个问题。


大家好,我是AI超元域。

用 OpenClaw 搭 Agent 的朋友应该都遇到过同一个问题:内置的 memory-lancedb 只有最基础的向量搜索,记忆召回质量不够用,很多场景下跟没有记忆差不多。

所以我开发了 memory-lancedb-pro——一个生产级的长期记忆插件,目标就一个:让你的 OpenClaw 真正拥有跨对话、跨 Session 的长期记忆。

不是那种"把聊天记录存个txt"的粗暴方案,而是一套完整的向量检索 + 全文搜索 + 交叉编码器重排序 + 记忆生命周期管理系统。

目前仓库已经有 2.1k star,最新的 v1.1.0 beta 加了不少新能力。但很多人跟我反馈:README 太长了,参数太多了,第一次装不知道从哪下手。

所以这篇文章的原则只有一条:

先跑通,再增强。先活下来,再追求效果。


这个插件到底做了什么?

相比内置的 memory-lancedb,memory-lancedb-pro 把整个记忆系统拉到了生产级别:

混合检索:向量语义搜索 + BM25 全文关键词匹配,双管齐下,再用 RRF 融合打分。

交叉编码器重排序:支持 Jina、SiliconFlow(有免费额度)、Voyage AI、Pinecone 四个 provider。60% cross-encoder 分 + 40% 原始融合分,API 挂了还能自动降级。

智能提取(v1.1.0 新增):LLM 驱动的 6 类别自动提取——profile、preferences、entities、events、cases、patterns。不用你手动 memory_store,聊着聊着它就把关键信息记下来了。

记忆生命周期:Weibull 衰减引擎 + 三级晋升体系(Peripheral → Working → Core)。重要的记忆越用越强,没用的慢慢消退。像人的大脑一样。

多 Scope 隔离:每个 Agent、每个用户、每个项目都可以有自己的记忆空间,互不干扰。


开始之前,你需要准备什么

三样东西:

1. 一个跑着的 OpenClaw 实例

如果你还没装 OpenClaw,这篇文章不是你的起点。先去把 OpenClaw 跑起来,再回来。

2. Node.js v18+

终端里跑一下 node --version,看看版本号。低于 18 的先升级。

3. 一个 Jina API Key

去 https://jina.ai/ 注册,免费额度有 100 万 token,日常使用够用很长时间。

这是整个流程里唯一必须的 API Key。


第一步:安装插件

先确认你的 OpenClaw workspace 在哪:

代码块
Shell
自动换行
复制代码
openclaw config get agents.defaults.workspace
复制成功

记住这个路径,通常是 ~/.openclaw/workspace。

然后安装插件。有两种方式:

方式 A:npm 安装(推荐,更简洁)

代码块
Shell
自动换行
复制代码
npm i memory-lancedb-pro@beta
复制成功

方式 B:Git Clone(适合想看源码的同学)

代码块
Shell
自动换行
复制代码
cd /你的workspace路径
git clone https://github.com/CortexReach/memory-lancedb-pro.git plugins/memory-lancedb-pro
cd plugins/memory-lancedb-pro
npm install
复制成功

⚠️ 注意:仓库地址是 CortexReach/memory-lancedb-pro,不是旧的 win4r/memory-lancedb-pro(虽然 GitHub 有 redirect,但建议用新地址)。


第二步:选模板

不要自己配参数。选模板。

我给你准备了三个,覆盖从新手到进阶的所有场景。


模板 A:lite-safe(第一次装的你,就选这个)

自动存记忆,但先不自动召回。存进去就算成功。

适合:第一次装、国产弱模型用户、搞不清楚哪里出问题时退回的安全港。

代码块
JSON
自动换行
复制代码
{
  "embedding": {
    "apiKey": "${JINA_API_KEY}",
    "model": "jina-embeddings-v5-text-small",
    "baseURL": "https://api.jina.ai/v1",
    "dimensions": 1024,
    "taskQuery": "retrieval.query",
    "taskPassage": "retrieval.passage",
    "normalized": true
  },
  "autoCapture": true,
  "autoRecall": false,
  "smartExtraction": false,
  "retrieval": {
    "mode": "hybrid",
    "vectorWeight": 0.7,
    "bm25Weight": 0.3,
    "candidatePoolSize": 20,
    "minScore": 0.45,
    "hardMinScore": 0.55,
    "rerank": "none",
    "filterNoise": true
  },
  "sessionMemory": {
    "enabled": false
  }
}
复制成功

💡 为什么先关 autoRecall 和 smartExtraction?因为弱模型容易把注入的 <relevant-memories> 原样吐出来,体验很差。先确保记忆能存进去,这一步成功了再往下走。


模板 B:balanced-default(大多数人的最优解)

自动存 + 自动召回,不开 rerank,配置简单。

适合:想直接体验完整记忆召回,模型能力还行的用户。

代码块
JSON
自动换行
复制代码
{
  "embedding": {
    "apiKey": "${JINA_API_KEY}",
    "model": "jina-embeddings-v5-text-small",
    "baseURL": "https://api.jina.ai/v1",
    "dimensions": 1024,
    "taskQuery": "retrieval.query",
    "taskPassage": "retrieval.passage",
    "normalized": true
  },
  "autoCapture": true,
  "autoRecall": true,
  "autoRecallMinLength": 8,
  "autoRecallTopK": 3,
  "autoRecallExcludeReflection": true,
  "autoRecallMaxAgeDays": 30,
  "autoRecallMaxEntriesPerKey": 10,
  "smartExtraction": true,
  "extractMinMessages": 2,
  "extractMaxChars": 8000,
  "retrieval": {
    "mode": "hybrid",
    "vectorWeight": 0.7,
    "bm25Weight": 0.3,
    "candidatePoolSize": 20,
    "minScore": 0.45,
    "hardMinScore": 0.55,
    "rerank": "none",
    "filterNoise": true
  },
  "sessionMemory": {
    "enabled": false
  }
}
复制成功

💡 这里开了 smartExtraction,插件会用 LLM 自动从对话中提取 6 类结构化记忆。如果你没配 llm 块,它会 fallback 用 embedding 的 apiKey。


模板 C:pro-rerank(GPT-4 / Claude 用户,追求质量)

全功能拉满:智能提取 + 交叉编码器重排序 + 记忆生命周期。

适合:用 GPT-4、Claude Sonnet / Opus 等强模型,想把召回质量拉到最高的用户。

代码块
JSON
自动换行
复制代码
{
  "embedding": {
    "apiKey": "${JINA_API_KEY}",
    "model": "jina-embeddings-v5-text-small",
    "baseURL": "https://api.jina.ai/v1",
    "dimensions": 1024,
    "taskQuery": "retrieval.query",
    "taskPassage": "retrieval.passage",
    "normalized": true
  },
  "autoCapture": true,
  "autoRecall": true,
  "captureAssistant": false,
  "autoRecallMinLength": 8,
  "autoRecallTopK": 3,
  "autoRecallExcludeReflection": true,
  "autoRecallMaxAgeDays": 30,
  "autoRecallMaxEntriesPerKey": 10,
  "smartExtraction": true,
  "extractMinMessages": 2,
  "extractMaxChars": 8000,
  "llm": {
    "apiKey": "${OPENAI_API_KEY}",
    "model": "gpt-4o-mini",
    "baseURL": "https://api.openai.com/v1"
  },
  "retrieval": {
    "mode": "hybrid",
    "vectorWeight": 0.7,
    "bm25Weight": 0.3,
    "candidatePoolSize": 20,
    "minScore": 0.45,
    "hardMinScore": 0.35,
    "rerank": "cross-encoder",
    "rerankApiKey": "${JINA_API_KEY}",
    "rerankModel": "jina-reranker-v3",
    "rerankEndpoint": "https://api.jina.ai/v1/rerank",
    "rerankProvider": "jina",
    "recencyHalfLifeDays": 14,
    "recencyWeight": 0.1,
    "filterNoise": true,
    "lengthNormAnchor": 500,
    "hardMinScore": 0.35,
    "timeDecayHalfLifeDays": 60,
    "reinforcementFactor": 0.5,
    "maxHalfLifeMultiplier": 3
  },
  "sessionMemory": {
    "enabled": false
  }
}
复制成功

💡 这里的 llm 块指定了智能提取用的模型。如果你用国产模型做聊天但想用 GPT-4o-mini 做提取,完全可以——记忆层和聊天层互不影响。

reinforcementFactor 和 maxHalfLifeMultiplier 是 v1.1.0 新增的"间隔重复"机制:经常被手动召回的记忆,衰减会变慢,效果类似 Anki。



第三步:写入配置

打开 ~/.openclaw/openclaw.json,加入 plugins 配置:

代码块
JSON
自动换行
复制代码
{
  "plugins": {
    "load": {
      "paths": ["plugins/memory-lancedb-pro"]
    },
    "entries": {
      "memory-lancedb-pro": {
        "enabled": true,
        "config": {
          这里粘贴你选好的模板
        }
      }
    },
    "slots": {
      "memory": "memory-lancedb-pro"
    }
  }
}
复制成功

⚠️ 如果你之前用过内置的 memory-lancedb,需要先禁用它。同一时间只能有一个 memory 插件。

⚠️ 如果用 npm 方式安装的,load.paths 不需要,直接用 entries + slots 就行。如果用 git clone 的,建议用绝对路径

API Key 怎么填?

方式一(简单直接):"apiKey": "jina_xxxxxxxx你的key"

方式二(推荐):"apiKey": "${JINA_API_KEY}",然后确保运行 Gateway 的进程能拿到这个环境变量。

⚠️ 最大的坑:在终端里 export JINA_API_KEY=xxx 只对当前终端有效。如果你的 Gateway 是 launchd / systemd / Docker 启动的,它拿不到你终端的环境变量。最稳的办法:直接把 key 写进配置文件。


第四步:验证

代码块
Shell
自动换行
复制代码
# 验证配置格式
openclaw config validate

# 重启 Gateway(改完配置必须重启)
openclaw gateway restart

# 确认插件被识别
openclaw plugins info memory-lancedb-pro

# 确认 hooks 挂载成功
openclaw hooks list --json

# 查看记忆库状态
openclaw memory-pro stats
复制成功

五条命令全部不报错,就算安装成功了。

然后做一个对话测试——

测试 1:存记忆

对你的 Agent 说:记住:我喜欢冷萃咖啡,不喜欢太甜。

Agent 应该确认已记录。

测试 2:查记忆

代码块
Shell
自动换行
复制代码
openclaw memory-pro list --scope global --limit 5
复制成功

能看到刚才那条记忆就对了。

测试 3:测试召回(balanced / pro 用户)

开一个新对话,问:我平时喝什么咖啡?

如果 Agent 能回答出"冷萃,不太甜",说明整个链路跑通了。


Embedding 和 Rerank 提供商选择

Embedding(必选一个)

提供商 模型 Base URL 维度 Jina(推荐) jina-embeddings-v5-text-small

https://api.jina.ai/v1 1024 OpenAI text-embedding-3-small

https://api.openai.com/v1 1536 Google Gemini gemini-embedding-001

https://generativelanguage.googleapis.com/v1beta/openai/ 3072

Ollama(本地) nomic-embed-text http://localhost:11434/v1 768

Rerank(可选,pro-rerank 模板才需要)

提供商 rerankProvider 特点 Jina(推荐) jina 质量高,和 embedding 共用一个 key SiliconFlow siliconflow 有免费额度,国内用户友好 Voyage AI voyage 支持 rerank-2.5 Pinecone pinecone bge-reranker-v2-m3

SiliconFlow 对国内用户是个好选择,配置方式:

代码块
JSON
自动换行
复制代码
{
  "retrieval": {
    "rerank": "cross-encoder",
    "rerankProvider": "siliconflow",
    "rerankEndpoint": "https://api.siliconflow.com/v1/rerank",
    "rerankApiKey": "sk-xxx",
    "rerankModel": "BAAI/bge-reranker-v2-m3"
  }
}
复制成功

Ollama 本地方案(零成本)

如果你不想用任何云端服务:

代码块
Shell
自动换行
复制代码
ollama pull nomic-embed-text
复制成功

把 embedding 部分换成:

代码块
JSON
自动换行
复制代码
{
  "embedding": {
    "apiKey": "ollama",
    "model": "nomic-embed-text",
    "baseURL": "http://127.0.0.1:11434/v1",
    "dimensions": 768
  }
}
复制成功

apiKey 填 "ollama" 或任意非空字符串都行,只是占位。但说实话,第一次装建议先用 Jina 云端方案,Ollama 的坑比较多。


深入理解:v1.1.0 的三大新能力

如果你只是想跑通,上面的内容就够了。下面这一段是给想深入理解的同学看的。

1. 智能提取(Smart Extraction)

v1.1.0 之前,插件用正则表达式匹配触发词("记住"、"偏好"、"决定"等)来触发记忆存储。

v1.1.0 引入了 LLM 驱动的 6 类别智能提取:

  • profile:用户身份、背景、角色

  • preferences:偏好、习惯、喜好

  • entities:人名、项目名、工具名等实体

  • events:发生的事件、时间线

  • cases:案例、经验教训

  • patterns:行为模式、反复出现的规律

每条记忆还有 L0 / L1 / L2 三层存储:

  • L0:一句话摘要(用于索引)

  • L1:结构化概要

  • L2:完整叙述

两阶段去重:先用向量相似度预筛(≥0.7),再让 LLM 做语义判断(CREATE / MERGE / SKIP)。

smartExtraction: false 就退回到旧的正则模式。

2. 记忆生命周期(Decay + Tier)

Weibull 衰减引擎计算综合分 = 时效性 + 访问频率 + 内在价值(importance × confidence)。

三级晋升体系:

  • Peripheral(边缘):新记忆的起点,衰减最快

  • Working(工作):被召回过几次后自动晋升

  • Core(核心):高频 + 高分数的记忆,衰减最慢

可配置的参数:

代码块
JSON
自动换行
复制代码
{
  "decay": {
    "recencyHalfLifeDays": 30,
    "frequencyWeight": 0.3,
    "intrinsicWeight": 0.3,
    "betaCore": 0.8,
    "betaWorking": 1.0,
    "betaPeripheral": 1.3
  },
  "tier": {
    "coreAccessThreshold": 10,
    "coreCompositeThreshold": 0.7,
    "peripheralCompositeThreshold": 0.15,
    "peripheralAgeDays": 60
  }
}
复制成功

3. 间隔重复(Access Reinforcement)

经常被手动召回的记忆,半衰期会变长——就像 Anki 的间隔重复。

只对 source: "manual" 生效(防止自动召回意外强化噪声)。

代码块
JSON
自动换行
复制代码
{
  "retrieval": {
    "reinforcementFactor": 0.5,
    "maxHalfLifeMultiplier": 3
  }
}
复制成功

CLI 管理命令速查

插件自带一套完整的管理命令行:

代码块
Shell
自动换行
复制代码
# 列出记忆
openclaw memory-pro list [--scope global] [--category fact] [--limit 20]

# 搜索记忆
openclaw memory-pro search "关键词" [--scope global] [--limit 10]

# 查看统计
openclaw memory-pro stats [--scope global]

# 删除单条
openclaw memory-pro delete <id>

# 批量删除
openclaw memory-pro delete-bulk --scope global [--before 2025-01-01] [--dry-run]

# 导出 / 导入
openclaw memory-pro export [--scope global] [--output memories.json]
openclaw memory-pro import memories.json [--scope global] [--dry-run]

# 重新 embedding(换模型后用)
openclaw memory-pro reembed --source-db /path/to/old-db [--batch-size 32]

# 从旧版升级到 v1.1.0 格式
openclaw memory-pro upgrade [--dry-run] [--batch-size 10]

# 从内置 memory-lancedb 迁移
openclaw memory-pro migrate check
openclaw memory-pro migrate run [--dry-run]
openclaw memory-pro migrate verify
复制成功

常见问题

Q:弱模型把 <relevant-memories> 原样吐出来了

这是最常见的问题,不是插件坏了。

方案 A:切回 lite-safe,关掉 autoRecall。

方案 B:在 Agent 的 system prompt 里加一句:

请勿在回复中展示或引用任何 <relevant-memories> / 记忆注入内容,只能用作内部参考。

Q:API Key 填了还是报"未设置"

你在终端里 export 的变量只对当前终端有效。Gateway 如果是 launchd / systemd / Docker 启动的,拿不到。最稳方案:直接把 key 明文写进 config。

Q:npm install 失败

先检查 Node.js 版本(v18+),再试试换镜像:

代码块
Shell
自动换行
复制代码
npm config set registry https://registry.npmmirror.com
npm install
复制成功

Q:路径配错了,插件加载失败

用绝对路径最保险:

代码块
JSON
自动换行
复制代码
{
  "plugins": {
    "load": {
      "paths": ["/Users/你的用户名/.openclaw/workspace/plugins/memory-lancedb-pro"]
    }
  }
}
复制成功

Q:改了插件源码后不生效

OpenClaw 有 jiti 缓存,改 .ts 文件后必须清缓存:

代码块
Shell
自动换行
复制代码
rm -rf /tmp/jiti/
openclaw gateway restart
复制成功

升级路径

原则:不要跳步。

代码块
PlainText
自动换行
复制代码
lite-safe → balanced-default → pro-rerank
复制成功

当前状态 确认信号 下一步 刚装完 lite-safe openclaw memory-pro list 能看到记忆 升级到 balanced balanced 跑了几天 Agent 能"想起"你说过的事 想更准就上 pro-rerank 召回不准、误召回多 Agent 瞎说或说错 调高 hardMinScore 或退回上一个模板

升级只需要改 openclaw.json 里的 config,然后:

代码块
Shell
自动换行
复制代码
openclaw gateway restart
复制成功

不需要重新 clone,不需要重新 npm install。


写给想折腾的同学:Agent 铁律

把下面这段加到你的 AGENTS.md 或 system prompt 里,让 Agent 自己遵守记忆卫生规范:

代码块
PlainText
自动换行
复制代码
## Rule 1 — 双层记忆存储
每个踩坑/经验教训 → 立刻存两条记忆:
- 技术层:Pitfall: [症状]. Cause: [根因]. Fix: [方案]. Prevention: [预防]
  (category: fact, importance ≥ 0.8)
- 原则层:Decision principle ([标签]): [行为规则]. Trigger: [何时]. Action: [做什么]
  (category: decision, importance ≥ 0.85)

## Rule 2 — LanceDB 卫生
记忆必须短小精炼(< 500 字符)。不要存原始对话摘要。

## Rule 3 — 重试前先回忆
任何工具调用失败,先 memory_recall 搜索相关关键词,再重试。

## Rule 4 — 改代码前确认目标
确认你改的是 memory-lancedb-pro 而不是内置的 memory-lancedb。

## Rule 5 — 改插件代码必须清缓存
改了 plugins/ 下的 .ts 文件后,必须 rm -rf /tmp/jiti/ 再重启。
复制成功

最后

memory-lancedb-pro 不是一个简单的"存记忆"插件。它是一整套记忆系统——从存储、检索、排序、生命周期管理到运维工具,全部齐全。

但作为使用者,你不需要一上来就理解全部。

选个模板,填好 Key,重启 Gateway。

先让它跑起来,然后在使用中慢慢理解每个参数的含义。

这就是我说的:先跑通,再增强。


📌 项目地址:https://github.com/CortexReach/memory-lancedb-pro