芥末
发布于 2026-03-10 / 0 阅读
0
0

MemOS OpenClaw 插件:给 Agent 增加长期记忆与技能沉淀

OpenClaw 这类 Agent 工具能完成代码生成、资料查询、自动化执行、文档整理等任务,但有一个问题很容易暴露出来:对话窗口里的上下文不是长期资产。

一次复杂的部署可能花了两个小时,中间经历了环境变量配置、依赖版本冲突、权限问题、服务启动失败、回滚与验证。当前对话里,Agent 能根据这些上下文继续推进;换一个新会话后,很多经验又要重新解释。

MemOS 要解决的正是这个问题:把 OpenClaw 与用户交互过程中产生的有效经验沉淀下来,变成长期记忆、任务摘要和可复用技能。这样 Agent 不只是“这次会做”,而是能在后续相似任务中直接复用过去的方法。

它提供了几个核心能力:

能力解决的问题
长期记忆保存用户偏好、项目背景、历史调试经验,避免每次重新说明
技能沉淀把多轮对话中的成功流程整理成 SKILL.md、脚本和验证步骤
团队记忆 Hub多个 Agent 之间按权限共享经验,同时保留各自私有记忆
本地存储敏感代码、密钥、内部架构等数据可以只留在本机
Memory Viewer用网页面板检索、编辑、迁移和分析记忆
混合检索结合全文检索和向量检索,提高记忆召回质量

OpenClaw 为什么需要长期记忆

大模型本身没有真正意义上的“永久记忆”。它能利用的是当前输入里的上下文,或者外部系统额外注入的资料。

如果只依赖对话上下文,实际使用中会遇到几个问题:

  1. 上下文窗口有限
    一次任务持续时间越长,历史信息越多,越容易被截断或压缩。

  2. 重复解释成本高
    项目结构、编码规范、部署环境、常用命令、禁用方案,每次新会话都要重新输入。

  3. 经验难以复用
    Agent 成功解决过一次问题,但没有被沉淀成结构化资产,下次遇到类似场景仍然可能从头试错。

  4. 多 Agent 协作时信息不一致
    写代码的 Agent 知道某个依赖版本有坑,写文档的 Agent 或自动化 Agent 未必知道。

MemOS 的设计思路不是把所有对话原样塞进数据库,而是把对话中的有效信息拆成不同类型的资产:记忆、任务、技能和团队知识。

flowchart LR
    A[OpenClaw 对话与工具调用] --> B[MemOS 采集上下文]
    B --> C[结构化任务摘要]
    B --> D[长期记忆]
    C --> E[可复用 Skill]
    D --> F[检索与上下文注入]
    E --> F
    F --> G[OpenClaw 后续任务复用]

这里的关键点是“筛选”和“结构化”。长期记忆系统如果只是无限追加聊天记录,很快会变成噪声仓库;只有把目标、步骤、失败原因、成功配置和验证方式整理出来,后续检索时才有价值。

从一次调试到一个可复用 Skill

MemOS 比普通记忆插件更进一步的地方,在于它会尝试把一段成功经验沉淀成技能。

假设 OpenClaw 帮你完成了一次项目部署。过程中可能经历了这些信息:

  • 项目使用什么技术栈;
  • 部署目标是本机、云服务器还是容器环境;
  • 哪些依赖版本不兼容;
  • 哪些环境变量必须配置;
  • 哪个启动命令最终可用;
  • 如何检查服务是否真正启动成功;
  • 遇到某个错误时应该怎么修。

如果这些内容只保存在聊天记录里,下次复用时仍然要靠检索片段再推理。MemOS 会进一步判断:这个流程是否足够稳定、是否有复用价值、是否可以变成标准操作。

一个可复用 Skill 通常包含三类内容:

组成部分作用
SKILL.md描述技能的适用场景、输入要求、执行步骤和注意事项
执行脚本把重复操作变成可调用命令,减少手工复制粘贴
验证检查确认任务是否完成,例如端口检查、接口探活、日志关键字检查

技能沉淀的大致流程如下:

flowchart TD
    A[完成一次复杂任务] --> B[提取目标、环境、步骤、问题和解决方案]
    B --> C{是否适合复用}
    C -- 否 --> D[保存为普通任务摘要和记忆]
    C -- 是 --> E[生成 SKILL.md]
    E --> F[生成脚本与验证检查]
    F --> G[注册为 OpenClaw 可调用 Skill]
    G --> H[后续相似任务直接调用]
    H --> I[根据新结果迭代 Skill]

这种设计适合处理那些“不是一次性问答,而是一套可重复流程”的任务,例如:

  • 初始化某类项目;
  • 部署固定技术栈;
  • 排查常见 CI(持续集成)失败;
  • 生成标准 PR(Pull Request)说明;
  • 按团队规范重构代码;
  • 将接口文档同步到指定格式。

如果后续发现更稳的命令、更快的检查方式或新的兼容性问题,Skill 也可以继续更新,而不是永远停留在第一次成功的版本。

多 Agent 协作时,记忆要能隔离也要能共享

单个 Agent 有长期记忆已经能减少重复输入;当 OpenClaw 被用于多 Agent 协作时,记忆系统还需要解决另一个问题:哪些信息应该共享,哪些信息必须隔离。

一个典型的 Agent 团队可能长这样:

flowchart LR
    U[用户] --> A[代码 Agent]
    U --> B[资料 Agent]
    U --> C[自动化 Agent]
    U --> D[文档 Agent]

    A --> H[(MemOS Hub)]
    B --> H
    C --> H
    D --> H

    A --> PA[(代码 Agent 私有记忆)]
    B --> PB[(资料 Agent 私有记忆)]
    C --> PC[(自动化 Agent 私有记忆)]
    D --> PD[(文档 Agent 私有记忆)]

MemOS 的 Hub 可以理解为团队记忆中心。每个 Agent 仍然有自己的私有记忆,避免不同角色之间互相污染;被标记为共享的经验,则进入团队知识中枢。

这种隔离与共享的组合很重要。

记忆类型例子是否适合共享
私有记忆某个 Agent 的临时推理过程、未验证猜测、角色专属偏好通常不共享
项目事实仓库结构、服务端口、部署环境、依赖版本适合共享
调试经验某个错误日志对应的修复方式适合共享
标准流程发布步骤、测试命令、PR 模板适合共享
敏感信息密钥、内部地址、账号凭据应谨慎处理,默认不共享

共享之后,一个 Agent 踩过的坑,不需要其他 Agent 再踩一次。例如代码 Agent 发现某个依赖版本不能升级,文档 Agent 在生成升级说明时就能引用这个结论;自动化 Agent 编写部署脚本时,也能避开同样的问题。

本地存储:敏感数据不必离开机器

Agent 任务经常涉及敏感信息,例如:

  • 业务代码;
  • 数据库连接串;
  • API Key;
  • 内部服务地址;
  • 私有部署架构;
  • 调试日志中的用户数据。

如果长期记忆全部上传到云端,很多团队不会放心。MemOS 本地版把数据保存在用户机器上,默认位置是:

~/.openclaw/memos-local/memos.db

这是一个 SQLite 数据库文件。SQLite 是嵌入式关系型数据库,不需要单独启动数据库服务,文件本身就可以承载数据存储。

本地版的几个特点:

特性说明
本地 SQLite 存储记忆数据保存在本机文件中,便于备份和审计
无遥测不主动收集使用数据
无第三方追踪不依赖外部追踪服务
可离线运行内置本地 Embedding 模型,不配置 API Key 也能跑
适合私有部署可放在私有服务器、低配云主机或边缘设备上运行

如果有多设备同步、团队远程共享等需求,也可以选择云端版本。两种形态都适合不同场景:

版本适合场景主要代价
本地版单机开发、敏感项目、离线环境、私有服务器多设备同步需要自行处理
云端版多设备使用、团队协作、远程访问需要评估数据合规和访问权限

Memory Viewer:用面板管理记忆

长期记忆如果只能通过接口或文件修改,排查问题会很麻烦。MemOS 提供了 Memory Viewer,把记忆、任务、技能、日志和配置做成了网页管理界面。

MemOS Memory Viewer 管理面板

这个面板的价值不只是“看起来方便”,而是能直接处理长期记忆系统最常见的维护问题:记忆是否准确、任务是否归档、技能是否过期、检索是否正常、工具调用是否失败。

主要页面可以按功能分成六类:

页面用途
Memories按时间线查看记忆,支持新增、编辑、删除和语义搜索
Tasks查看任务摘要,追踪每次调试或执行过程的结构化记录
Skills管理 Skill,查看版本历史,下载可复用技能
Analytics查看读写统计、活跃度、记忆分布等指标
Logs查看工具调用日志、输入输出和耗时,定位执行问题
Settings在线调整模型、检索和相关配置

面板默认绑定在 127.0.0.1,也就是只允许本机访问;再配合密码保护和 Session Cookie,可以降低外部网络误访问带来的风险。对于本地开发环境来说,这种默认策略比直接监听公网地址安全得多。

检索机制:全文检索与向量检索双通道

长期记忆能不能真正提高 Agent 质量,核心取决于两件事:

  1. 该记住的内容有没有被正确保存;
  2. 需要时能不能把正确记忆找出来。

MemOS 在检索层使用了“全文检索 + 向量检索”的双通道方案。

flowchart TD
    A[用户新请求] --> B[查询改写与语义理解]
    B --> C[FTS5 全文检索]
    B --> D[向量检索]
    C --> E[RRF 融合排序]
    D --> E
    E --> F[MMR 重排]
    F --> G[选择高相关且低重复的记忆]
    G --> H[注入 OpenClaw 上下文]

几个关键组件分别承担不同职责:

组件全称 / 含义解决的问题
FTS5SQLite Full-Text Search 5,SQLite 的全文检索模块精确匹配关键词、命令、错误码、文件名
向量检索把文本转成 Embedding 向量后按语义相似度召回找到表达不同但意思相近的记忆
RRFReciprocal Rank Fusion,倒数排名融合合并多个检索通道的结果,避免单一路径偏差
MMRMaximal Marginal Relevance,最大边际相关性在相关性和多样性之间平衡,减少重复内容
SHA-256 去重基于内容哈希识别重复片段避免相同记忆反复堆积
语义分块按语义边界切分内容让每条记忆保持完整含义,避免切得过碎或过长

全文检索适合找“精确出现过”的东西,比如错误码、函数名、文件路径:

ModuleNotFoundError: No module named 'xxx'
docker compose up
.env.local

向量检索适合找“意思相近”的东西。比如用户问“之前那个部署端口冲突怎么处理”,记忆里可能没有“端口冲突”这几个字,而是记录了“服务启动失败,因为 3000 端口被占用,改为 3001 后恢复”。语义检索能把这种记录找出来。

RRF 和 MMR 的组合,则是为了避免两个极端:

  • 只靠关键词,容易漏掉语义相关内容;
  • 只靠向量,可能召回看似相关但细节不准确的内容;
  • 召回太多相似片段,会浪费上下文窗口。

历史记忆迁移与去重

已经使用 OpenClaw 一段时间后,历史对话里通常积累了不少经验。MemOS 的 Memory Viewer 提供 Import 入口,可以把原有记忆迁移进来。

迁移过程要重点关注两件事:不要丢数据,也不要把重复内容原样堆进去。

MemOS 记忆导入与迁移页面

导入页面承担的是“把旧资产整理进新系统”的角色。迁移时可以对历史对话、调试经验和技术方案进行智能去重;如果导入过程被打断,也支持断点续传。迁移完成后,还可以继续生成任务摘要或沉淀 Skill,让旧对话不只是归档,而是变成可检索、可复用的知识资产。

安装与配置

MemOS OpenClaw 插件可以通过 npm 安装。安装完成后,启动 OpenClaw Gateway 即可进入管理面板。

安装插件

openclaw plugins install @memtensor/memos-lite-openclaw-plugin
openclaw gateway start

启动后访问:

http://127.0.0.1:18799

Memory Viewer 会在本机浏览器打开。

通过界面配置

Settings 页面可以配置 Embedding、摘要模型和 Skill 演化使用的模型。

MemOS Settings 配置页面

这个页面适合不想直接改 JSON 的场景。模型、接口地址和密钥可以在界面里调整,不需要手工翻配置文件。

通过 openclaw.json 配置

也可以直接编辑 openclaw.json。一个典型配置如下:

{
  "plugins": {
    "slots": {
      "memory": "memos-lite"
    },
    "entries": {
      "memos-lite": {
        "config": {
          "embedding": {
            "provider": "openai_compatible",
            "model": "bge-m3",
            "endpoint": "https://your-api-endpoint/v1",
            "apiKey": "sk-••••••"
          },
          "summarizer": {
            "provider": "openai_compatible",
            "model": "gpt-4o-mini",
            "endpoint": "https://your-api-endpoint/v1",
            "apiKey": "sk-••••••"
          },
          "skillEvolution": {
            "summarizer": {
              "provider": "openai_compatible",
              "model": "claude-4.6-opus",
              "endpoint": "https://your-api-endpoint/v1",
              "apiKey": "sk-••••••"
            }
          }
        }
      }
    }
  }
}

配置里有三块比较关键:

配置项作用
embedding把记忆文本转成向量,用于语义检索
summarizer对任务、对话和记忆进行摘要压缩
skillEvolution.summarizer用于 Skill 生成、更新和优化

如果使用本地内置 Embedding 模型,可以不配置外部 API Key;如果希望接入 OpenAI Compatible 接口,则需要填写对应的 endpointapiKey

修改配置后重新启动 Gateway:

openclaw gateway start

适合与不适合的使用场景

MemOS 的收益主要来自“长期积累”和“复用”。如果任务本身是一次性的、没有上下文延续,长期记忆带来的价值不会特别明显。

场景是否适合原因
长期维护同一个代码仓库适合项目结构、规范、历史坑位都值得沉淀
经常做类似部署或排障适合可以把成功流程变成 Skill
多 Agent 分工协作适合团队记忆能减少重复沟通
敏感项目本地开发适合本地 SQLite 存储更容易控制数据边界
临时问答不太需要没有明显长期复用价值
高度合规环境需要评估要确认本地文件、模型接口和访问权限符合要求
不希望维护额外服务需要权衡Gateway、面板和数据库都需要纳入开发环境管理

使用时需要注意的坑

1. 不要把所有内容都当成记忆

长期记忆不是聊天记录备份。错误猜测、临时尝试、未验证方案如果被长期保存,后续可能误导 Agent。

更合理的做法是只沉淀这些内容:

  • 已验证成功的命令;
  • 明确失败的方案和失败原因;
  • 项目长期有效的规则;
  • 用户稳定偏好;
  • 可复用流程;
  • 关键环境约束。

2. Skill 要有验证步骤

一个 Skill 如果只有执行步骤,没有验证方式,Agent 很难判断任务是否真的完成。部署类 Skill 至少应该包含:

# 示例:检查服务端口
curl -f http://127.0.0.1:3000/health

# 示例:检查进程
ps aux | grep your-service

# 示例:检查容器状态
docker ps

验证步骤越明确,Skill 越容易自动化复用。

3. 共享记忆要控制权限

团队 Hub 不能简单理解成“所有 Agent 共用一个数据库”。共享范围需要谨慎设计,尤其是密钥、客户数据、内部网络地址等信息,应该默认保守处理。

4. 定期清理过期记忆

项目依赖、部署方式和团队规范都会变化。过期记忆如果没有清理,可能导致 Agent 继续使用旧方案。Memory Viewer 里的时间线、搜索和 Analytics 页面可以帮助定位长期未更新或重复出现的记忆。

5. 检索不是越多越好

注入上下文的记忆太多,会挤占模型处理当前任务的空间。更好的策略是召回少量高相关、低重复的内容。FTS5、向量检索、RRF 和 MMR 的组合,目的也是为了让上下文更精确,而不是更庞大。

小结

MemOS 给 OpenClaw 补上的不是简单的“聊天记录保存”,而是一套围绕 Agent 经验资产构建的基础设施:对话可以沉淀成记忆,复杂任务可以沉淀成 Skill,多 Agent 可以通过 Hub 共享已验证经验,敏感数据也可以留在本地 SQLite 中管理。

当 Agent 使用频率变高后,真正影响效率的往往不是单次回答有多快,而是过去的经验能不能在下一次任务中继续发挥作用。MemOS 的价值就在这里:让 OpenClaw 从每次重新开始,变成持续积累、持续复用。


评论