Tablestore记忆存储在OpenClaw中的实现

更新时间:
复制为 MD 格式

OpenClaw通过@tablestore/openclaw-mem0插件集成表格存储(Tablestore),为智能体提供长期记忆能力:在对话中出现可提取的用户信息时(如偏好、习惯等),mem0 自动将其结构化后以向量形式存入 Tablestore,并在后续对话中自动检索注入上下文,让智能体随使用逐渐了解用户。本文介绍如何安装、配置该插件并验证其工作状态。

方案介绍

OpenClaw 原生记忆存在以下局限:上下文压缩(Compact)后记忆丢失、多 Agent 之间记忆隔离、本地 Embedding 部署复杂、数据备份与迁移困难。使用 Tablestore+mem0 做记忆存储,具备以下核心优势:

  • 云托管,免运维:Tablestore 为阿里云全托管服务,无需自建数据库,按量计费,中小规模场景成本友好。

  • 数据自主可控:数据存储于用户自己的阿里云账号,可通过 Tablestore 控制台直接查看,支持资源隔离、权限管理与监控告警。

  • 跨 Agent 记忆共享:同一 userId 下,多个 Agent 记忆互通,Compact 不影响历史记忆保留。

  • 智能结构化提取:自动从对话中抽取姓名、偏好、决策等关键事实,不堆积原始对话内容。

  • 混合检索召回:向量相似度与 BM25 关键词检索并用,兼顾语义理解与精确匹配,毫秒级响应。

前提条件

自动安装

向 OpenClaw 发送以下提示词,智能体会自动读取安装说明并引导完成配置:

请阅读https://tablestore-doc.oss-cn-hangzhou.aliyuncs.com/aliyun-tablestore-ai/openclaw/skill.md,并按照说明安装和配置tablestore plugin 用于 OpenClaw。
安装完成后告诉我你能做什么

如果智能体自动安装失败,请尝试手动方式安装。

手动安装

步骤一:安装插件

openclaw plugins install @tablestore/openclaw-mem0
说明

安装完成后,OpenClaw 会自动将 openclaw-mem0 设为 memory 槽位的提供方,并禁用内置的 memory-corememory-lancedb

由于 OpenClaw 使用 Node.js tar 模块解压插件包,在文件数量较多时(@tablestore/openclaw-mem0 含约 7000 个文件)可能会触发 120 秒超时。需通过以下方式绕过:先用 npm 下载,再用系统 tar 解压,最后从本地路径安装。

  1. 下载插件包到/tmp目录

    cd /tmp && npm pack @tablestore/openclaw-mem0
  2. 用系统 tar 解压,动态获取文件名,版本升级后无需修改命令

    mkdir -p /tmp/openclaw-mem0-install && tar xzf /tmp/$(ls /tmp/tablestore-openclaw-mem0-*.tgz | head -1 | xargs basename) -C /tmp/openclaw-mem0-install --strip-components=1
  3. 从本地路径安装

    openclaw plugins install /tmp/openclaw-mem0-install

步骤二:配置插件

修改 ~/.openclaw/openclaw.json,在 plugins.entries.openclaw-mem0 下添加 config 字段:

方式一:AccessKey 认证(使用已有实例)

{
  "plugins": {
    "entries": {
      "openclaw-mem0": {
        "enabled": true,
        "config": {
          "mode": "open-source",
          "oss": {
            "vectorStore": {
              "provider": "tablestore",
              "config": {
                "endpoint": "https://{实例名}.{Region}.ots.aliyuncs.com",
                "instanceName": "{实例名}",
                "accessKeyId": "{AccessKey ID}",
                "accessKeySecret": "{AccessKey Secret}"
              }
            },
            "embedder": {
              "provider": "openai",
              "config": {
                "apiKey": "{百炼 API Key}",
                "model": "text-embedding-v3",
                "baseURL": "https://dashscope.aliyuncs.com/compatible-mode/v1"
              }
            },
            "llm": {
              "provider": "openai",
              "config": {
                "apiKey": "{百炼 API Key}",
                "model": "qwen-plus",
                "baseURL": "https://dashscope.aliyuncs.com/compatible-mode/v1"
              }
            }
          }
        }
      }
    }
  }
}

方式二:AccessKey 认证(自动创建实例)

不填 endpointinstanceName,插件自动在指定地域创建 Tablestore 实例。可通过 regionId 指定地域,默认为 cn-hangzhou

说明

账号实例数量上限为10,详见使用限制

"vectorStore": {
  "provider": "tablestore",
  "config": {
    "accessKeyId": "{AccessKey ID}",
    "accessKeySecret": "{AccessKey Secret}",
    "regionId": "cn-hangzhou"
  }
}
重要

自动创建的实例默认不开启公网访问。如果在公网环境运行,需要在表格存储控制台选择新创建的实例,然后在实例管理 > 网络管理中启用公网访问。

方式三:ECS RAM Role 认证

在阿里云 ECS 上运行时,推荐使用 ECS RAM Role 代替 AccessKey,无需在配置文件中保存静态凭证。RAM Role 需绑定 AliyunOTSFullAccess 权限,详见实例RAM角色

"vectorStore": {
  "provider": "tablestore",
  "config": {
    "roleName": "{RAM 角色名称}",
    "regionId": "cn-hangzhou"
  }
}

已有实例时,将regionId替换为endpointinstanceName,参考方式一的配置结构。

说明

embedderllm 均通过 DashScope 的 OpenAI 兼容接口调用,填写百炼 API Key 即可,provideropenaiembedder 使用 text-embedding-v3(1024 维),llm 使用 qwen-plus 负责记忆提取。

步骤三:重启网关

openclaw gateway restart

步骤四:验证

openclaw mem0 stats

成功时输出:

[TablestoreVectorStore] OTS service status: enabled
Mode: open-source
User: default
Total memories: 0
Graph enabled: false
Auto-recall: true, Auto-capture: true

Total memories 为当前记忆条数,初始为 0,随使用积累增长。

使用记忆

自动提取与召回

配置生效后无需额外操作。在 TUI 或消息渠道与智能体对话时,mem0 会自动:

  • 提取:对话中出现可记录的用户信息(如饮食偏好、编程习惯、项目背景等)时自动写入 Tablestore

  • 召回:下次对话前自动检索相关记忆注入上下文,无需用户重复说明

搜索记忆

openclaw mem0 search "杭州"

返回语义上与检索词相关的记忆条目,可用于排查记忆是否正确写入或调试检索效果。

常见问题

问题

解决方法

插件未加载

检查 plugins.slots.memory 是否为 "openclaw-mem0",以及 plugins.entries["openclaw-mem0"].enabled 是否为 true

安装时下载超时

配置镜像源:npm config set registry https://registry.npmmirror.com,然后重新执行步骤一

AccessKeyId is invalid

检查 AccessKey ID 和 Secret 是否正确,账号是否正常

首次使用报 OTSObjectNotExist

正常现象,插件在首次访问时自动创建数据表和索引

自动创建实例失败

确认 AccessKey 拥有 AliyunOTSFullAccess 权限,或检查账号实例数量是否已达上限

Embedding 报错

确认百炼 API Key 正确且账号有调用额度

OTSAuthFailed(403)

自动创建的实例默认未开启公网访问,在表格存储控制台选择新创建的实例,然后在实例管理 > 网络管理中启用公网访问后重试