OpenClaw集成长记忆服务

更新时间:
复制 MD 格式

OpenClaw是一款支持本地部署的多渠道AI助手框架,可接入WhatsApp、Telegram、飞书、iMessage20+消息渠道,并通过插件机制扩展记忆、技能、工具能力。

本文介绍如何在OpenClaw中将AnalyticDB for PostgreSQL长记忆服务作为OpenClaw的持久化记忆后端,使Agent具备跨会话、跨设备的长期记忆能力。

应用场景

  • 多渠道统一记忆:用户在Telegram上告知偏好,切换到飞书或iMessage后助手依然记得,所有渠道共享同一份长期记忆。

  • 轻量端侧部署:客户端无需部署向量数据库或Embedding模型,事实提取、向量化、语义检索均由长记忆服务完成,OpenClaw实例资源占用更低。

  • Agent记忆隔离:在OpenClaw的多Agent场景下,可为每个Agent配置独立的记忆命名空间,不同Agent之间互不串扰。

前提条件

说明

ADBPG长记忆插件基于Apache License 2.0开源协议,是上游@mem0/openclaw-mem0的衍生作品,针对AnalyticDB for PostgreSQL长记忆服务的接入做了最小化适配。本方案无需客户端部署任何向量数据库、Embedding模型或大语言模型,记忆管理的全部能力由服务端提供。

操作步骤

步骤一:安装OpenClawMemory插件

  1. 全局安装OpenClaw(如尚未安装)。

    npm install -g openclaw@latest
  2. 安装ADBPG长记忆插件。

    openclaw plugins install @adbpg-ai/openclaw-mem0
  3. 确认插件已被识别。

    openclaw plugins list | grep openclaw-mem0

    输出中应能看到Memory (Mem0) — ADBPG Build条目,状态为enabled

说明

OpenClawMemory插件以独占槽位方式工作。如果环境中已经安装了上游的@mem0/openclaw-mem0,请先卸载再安装ADBPG适配版:

openclaw plugins uninstall openclaw-mem0
openclaw plugins install @adbpg-ai/openclaw-mem0

步骤二:配置openclaw.json

编辑配置文件~/.openclaw/openclaw.json,添加openclaw-mem0插件配置。

{
  "plugins": {
    "allow": ["openclaw-mem0"],
    "slots": {
      "memory": "openclaw-mem0"
    },
    "entries": {
      "openclaw-mem0": {
        "enabled": true,
        "config": {
          "mode": "platform",
          "apiKey": "${ADBPG_API_KEY}",
          "baseUrl": "${ADBPG_URL}",
          "userId": "alice"
        },
        "hooks": {
          "allowConversationAccess": true
        }
      }
    }
  }
}

配置项说明

配置项

说明

plugins.slots.memory

必须设为openclaw-mem0,表明Memory槽位由本插件占用。

mode

固定为platform,表示使用远程REST服务作为后端。

apiKey

AnalyticDB for PostgreSQL长记忆服务API Key,建议通过${ADBPG_API_KEY}环境变量注入,避免明文写入配置。

baseUrl

AnalyticDB for PostgreSQL长记忆服务地址。

userId

用户标识,用于隔离不同用户的记忆。建议使用应用层的真实用户ID(如邮箱、UUID)。省略此字段时回退到当前操作系统用户名(例如root),适合单用户验证场景,但生产环境应显式指定。

重启网关使配置生效:

openclaw gateway restart

步骤三:验证基础记忆操作

OpenClaw提供了mem0命令行子命令,可直接对长记忆服务执行读写。

  1. 健康检查。

    openclaw mem0 status
  2. 记录一条偏好。

    openclaw mem0 add "我每天早上喜欢喝一杯黑咖啡" --user-id alice

    预期输出:

    Added 1 memory(s):
      :  [ADD]
  3. 语义检索。

    openclaw mem0 search "饮品偏好" --user-id alice

    预期输出(命中刚刚记录的偏好):

    [
      {
        "id": "<memory-id>",
        "memory": "每天早上喝一杯黑咖啡",
        "score": 0.62,
        "scope": "long-term",
        "categories": ["preferences"]
      }
    ]
  4. 列出当前用户的全部记忆。

    openclaw mem0 list --user-id alice
说明

AnalyticDB for PostgreSQL长记忆服务采用异步处理机制:记录操作返回PENDING状态表示已入队,服务端完成事实提取与向量化通常需要数秒。请避免在写入后立即检索同一条记忆。

步骤四:通过TUI对话验证端到端读写

openclaw tui提供Agent的本地终端对话界面。验证目标是:在TUI中产生的记忆,可以通过CLI命令读取和检索,确认长记忆服务的读写闭环。

前提

  • 已为OpenClaw配置默认Agent模型,例如阿里云百炼qwen-plus系列。如尚未配置,可执行:

    openclaw onboard --auth-choice qwen-standard-api-key-cn \
                     --modelstudio-standard-api-key-cn <your-dashscope-api-key>

    或参考OpenClaw模型配置文档

  • 已启动网关。

    openclaw gateway restart

验证流程

  1. 打开TUI并与Agent对话。

    openclaw tui

    输入一条偏好后退出TUI(Ctrl+C/exit):

    用户:我是个左撇子。
    
    Agent:好的,我会记住这一点。
  2. 等待异步处理(通常几秒内完成),然后在命令行查询。

    # 列出当前命名空间下的所有记忆
    openclaw mem0 list
    
    # 用与原话字面不重叠的query做语义检索
    openclaw mem0 search "用手习惯"

    预期:list返回值中包含一条由ADBPG从对话中抽取的fact;search使用与原话字面不同的查询能命中该条记忆,验证向量化语义检索生效。

说明
  • TUICLI默认使用相同的userId命名空间。若在openclaw.json中显式指定了userId,CLI命令需要通过--user-id <userId>参数传入相同的值;若未指定,两端均回退至当前操作系统用户名(如root)。

  • Agent在每轮对话中会自动调用Memory插件:回答前从ADBPG检索相关记忆并注入到上下文(auto-recall),回答后从对话内容中抽取新事实写入ADBPG(auto-capture),无需用户显式调用工具。

使用记忆

自动提取与召回

完成上述配置后,无需任何额外操作。在TUI或任意已接入的消息渠道中与Agent对话时,插件会自动完成以下两件事:

  • 抽取:当对话中出现可沉淀的用户信息(饮食偏好、编程习惯、项目背景、住所变化等),插件在agent_end钩子触发后自动通过记忆提取接口,将对话送往AnalyticDB for PostgreSQL长记忆服务,由服务端LLM抽取结构化事实并向量化存入数据库。

  • 召回:下一轮对话开始时(before_prompt_build钩子触发),插件会以当前用户输入为查询,通过记忆搜索接口从长记忆服务做语义检索,并将命中的记忆注入Agent的系统提示,使Agent天然具备跨会话的记忆能力,用户无需重复说明背景信息。

搜索记忆

openclaw mem0 search "杭州"

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

注意检索使用向量相似度,查询词与命中条目无需字面共词,例如查询“住宿偏好”即可命中“喜欢住民宿”一类记忆。

Agent工具

除自动钩子外,插件还为Agent注册了以下工具,使Agent可以在推理过程中显式调用:

工具

说明

memory_search

按自然语言检索记忆,支持scope(session / long-term / all)参数。

memory_add

显式存储一条事实。

memory_get

ID获取单条记忆。

memory_list

列出当前用户/Agent的全部记忆。

memory_update

更新已有记忆的文本内容。

memory_delete

删除单条或批量记忆。

命令行参考

# 健康检查
openclaw mem0 status

# 记忆操作
openclaw mem0 add "..."           --user-id <uid>
openclaw mem0 search "..."        --user-id <uid>
openclaw mem0 search "..."        --user-id <uid> --scope long-term
openclaw mem0 list                --user-id <uid>
openclaw mem0 get <memory_id>
openclaw mem0 update <memory_id> "..."
openclaw mem0 delete <memory_id>
openclaw mem0 delete --all        --user-id <uid> --confirm

# 多Agent场景
openclaw mem0 search "..."        --user-id <uid> --agent <agent-name>
openclaw mem0 list                --user-id <uid> --agent <agent-name>

FAQ

  • Q:为什么记录后立即检索查不到?

    A:服务端采用异步处理机制,记录操作仅将任务入队,事实提取与向量化在后台完成(通常几秒内)。请在记录后等待一段时间再检索。

  • Q:可以同时启用OpenClaw的多个Agent,让每个Agent有独立的记忆吗?

    A:可以。OpenClawAgent场景下,本插件会基于session_key自动将不同Agent的记忆路由到独立的命名空间(<userId>:agent:<agentName>),无需额外配置。

  • Q:如何关闭自动记忆功能,只通过工具调用手动管理记忆?

    A:在插件配置中将autoRecallautoCapture置为false。Agent仍可通过memory_searchmemory_add等工具显式操作记忆。