Tablestore OpenMemory MCP : 跨会话、跨模型的智能记忆解决方案

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: 本文介绍了Mem0的原理与应用场景,并基于Mem0构建了Tablestore OpenMemory MCP服务,实现个性化旅行规划助理。Mem0是一种为大型语言模型设计的智能记忆层,通过向量数据库持续学习用户交互信息,实现跨会话的个性化记忆管理。该服务提供多种MCP工具,便于集成到各类AI应用中。最后演示了个性化旅行规划应用,并介绍了服务的运行与配置方式。

本文将介绍 Mem0 相关原理、应用场景,随后引入基于 Mem0 的 Tablestore OpenMemory MCP 服务,并利用该服务实现“个性化旅行规划助理”,并在最后给出如何运行和配置该 MCP。


1. Mem0 简介


Mem0 是一种为大型语言模型(LLM)设计的开源智能记忆层,旨在通过持续学习用户交互信息,实现跨会话的个性化与上下文连续性。其核心是构建一个动态更新的记忆系统,使AI能像人类一样"记住"用户偏好、历史行为等。其核心机制是:

  1. 通过 LLM 从最新对话中动态提取关键事实或偏好并生成候选记忆。
  2. 借助向量数据库(如 Chroma、Qdrant 等向量数据库)检索相似旧记忆,并由 LLM 决策对候选记忆执行新增、更新、删除或忽略等操作,保持记忆库精炼一致。
  3. 对外提供简介的 Python SDK 和托管/自托管两种部署方式,易于嵌入各类聊天机器人、教育助手等个性化AI应用。


image.png

其关键流程,如上图所示,Mem0 在拿到对话信息后,会利用 LLM 对关键性的事实信息进行提取(New extracted memories),随后利用向量数据库的检索能力,获取相关记忆(Top's similar memories),之后将新旧记忆一同提交给大模型进行分析,生成针对不同记忆的操作(ADD,UPDATE,DELETE,NOOP),接着执行相关操作,实现对向量数据库的更新。


经由以上过程,可以让AI在多轮、多会话场景中记住用户偏好、历史交互及相关元数据,方便在后续对话过程中,通过向量检索,持续输出更加个性化、连贯且成本更低的响应。


2.应用场景


由于 Mem0 可以在交互过程中,记忆用户的偏好、历史互动等个性化信息,所以可以方便的构建一些更加个性化的应用,例如:个性化学习助手、游戏AI、虚拟伴侣等,具体如下图所示。

 image.png


3.Tablestore OpenMemory MCP服务


3.1服务简介

模型上下文协议(Model Context Protocol,MCP)是一个开放协议,支持大型语言模型(LLM)应用程序与外部数据源及工具之间的无缝集成。 无论是开发AI驱动的集成开发环境(IDE)、增强聊天界面功能,还是创建定制化AI工作流,MCP均提供了一种标准化方案, 可将LLMs与其所需的关键背景信息高效连接。


为了提供更好的用户体验,我们在 Mem0 的 openmemory-mcp 基础上,进行改造,提供一套基于阿里云表格存储的 Mem0 MCP 服务,该服务可以在 sse 和 stdio 两种模式下运行,同时提供大量用户可自行配置的参数,例如:Mem0 使用的大语言模型、MCP 工具的描述性文本、使用的 Tablestore 实例信息等。


该服务共包含四个 MCP 工具:

  1. add_memories: 添加用户记忆。
  2. search_memories: 检索用户记忆。
  3. list_memories: 列出用户所有记忆。
  4. delete_all_memories: 删除用户所有记忆。


利用这些工具可以将对记忆的操作融入与大模型的对话过程,降低 Mem0 使用门槛。


3.2 服务演示


为了体现Tablestore OpenMemory MCP服务的能力,我们将 AI 客户端 Cline 作为 MCP 客户端,进行效果展示。演示流程以程序员代码偏好为例,共包含三个部分,分别为代码偏好添加,代码偏好检索和代码偏好更新,具体流程及预期如下图所示:

 image.png 


3.2.1 代码偏好添加


首先,通过对话,要求模型记忆我们的编码偏好:

 image.png

此时,会触发 Mem0 的 add 功能,Mem0 自动利用 LLM 进行候选记忆提取,再生成相关操作序列(由于此时数据库中没有数据,生成操作均为 ADD):

 image.png 

这时,可以发现用户相关信息被添加进入 Tablestore 实例:



image.png 

3.2.2 代码偏好检索

随后,询问以下内容,进行代码偏好检索(为了防止大模型从对话上下文中得知我们的相关信息,我们重新启动一个session):

 image.png 

可以看到,模型成功检索到相关记忆信息“常量全部采用大写字母加下划线进行命名”,相似度分数约为0.86。同时,模型能够正确回答我的代码偏好相关信息:

 image.png

3.2.3 代码偏好更新

现在,我们尝试更改代码偏好信息,要求模型记忆“喜欢使用小写字母加下划线命名变量”,Mem0 会自动化的检索相关内容并进行更新:

 image.png 

此时,触发了代码偏好更新,同时,Tablestore 实例产生变化:

 image.png 

4. “个性化旅行规划助理” 效果演示

任何其他需要“长期用户记忆+即时智能推荐”的产品均可利用此能力进行产品设计。


本节将通过一个实际例子“个性化旅行规划助理”,对 Tablestore OpenMemory MCP服务的个性化支持能力进行演示,同时,由于记忆被托管于阿里云表格存储(Tablestore),使得记忆从应用和模型中分离,我们可以随意的切换应用、模型对相同的记忆进行访问,本节也同时会对这一能力进行展示。


4.1 演示流程

演示流程主要由两部分组成,分别为个性信息添加与旅行方案生成,如下图所示:

 image.png 

  1. 首先在 AI 客户端 Cline 中,使用阿里云百炼上的 qwen-coder-plus 作为语言生成模型,添加用户个性信息随后,
  2. 在另一个 AI 客户端 CherryStudio 中,切换为 qwen-max 大模型,进行个性化的旅行方案生成,验证我们的 Memory 可以跨会话跨模型进行方便的存储和提取。


4.2 演示效果

首先在 AI 客户端 Cline 中,使用 qwen-coder-plus 作为语言生成模型,添加用户个性信息:

 image.png 

可以看到,正确生成相关操作序列,将用户的个性化信息,喜欢吃辣的东西、现在住在上海和爱看科幻电影添加进入 Tablestore 实例:

 image.png 

随后,切换应用及模型,在 AI 客户端 CherryStudio  中,利用 qwen-max 进行周末外出游玩计划制定:

 image.png 

可以看到,模型正确的访问相关记忆信息,制定了一份依赖于用户的个性化方案,充分考虑到了用户住在上海,嗜辣以及爱看科幻电影,将其它地方的记忆使用了起来,做到了跨会话跨模型进行方便的存储和提取。


5.如何运行 MCP 服务


本 MCP 服务可以通过 uvx 指令快速启动,本章将介绍如何运行该 MCP 服务。


5.1安装 uv

安装 uv 有两种方式可以选择:

  1. 使用现有的 python3 安装 uv,在命令行输入如下指令:
pip3 install uv
  1. 使用源码安装:
curl -LsSf https://astral.sh/uv/install.sh | sh


5.2 配置环境变量

本 MCP 服务的参数需要通过环境变量进行配置,具体变量设置见下方表格:

变量名

必填

含义

默认值

SERVER_HOST

MCP server 的 host

0.0.0.0

SERVER_PORT

MCP server 的 port

8765

TABLESTORE_INSTANCE_NAME

是(yes)

实例名

-

TABLESTORE_ENDPOINT

是(yes)

实例访问地址

-

TABLESTORE_ACCESS_KEY_ID

是(yes)

秘钥 ID

-

TABLESTORE_ACCESS_KEY_SECRET

是(yes)

秘钥 SECRET

-

TABLESTORE_STS_TOKEN

STS Token

None

TABLESTORE_VECTOR_DIMENSION

向量维度

1536

OPENAI_API_KEY

是(yes)

百炼API KEY

-

OPENAI_BASE_URL

是(yes)

兼容 OpenAI 的大模型的 URL。

如果使用阿里云百炼,可以使用: https://dashscope.aliyuncs.com/compatible-mode/v1

-

LLM_MODEL

大语言模型的名字

qwen-plus

EMBEDDER_MODEL

编码模型的名字

text-embedding-v4

TOOL_ADD_MEMORIES_DESCRIPTION

添加记忆的MCP TOOL描述文字

参考settings.py

TOOL_SEARCH_MEMORIES_DESCRIPTION

检索记忆的MCP TOOL描述文字

参考settings.py

TOOL_LIST_MEMORIES_DESCRIPTION

显示所有记忆的MCP TOOL描述文字

参考settings.py

TOOL_DELETE_ALL_MEMORIES_DESCRIPTION

删除所有记忆的MCP TOOL描述文字

参考settings.py

MCP_STDIO_USER_ID

stdio模式下使用的用户id

stdio_default_user

MCP_STDIO_CLIENT_NAME

stdio模式下使用的客户端名

stdio_default_client


其中,需要注意 LLM_MODEL(大语言模型名字)的设置,该字段将决定 Mem0 能否顺利运行。因大模型的返回具有不确定性,若模型选择不当,可能导致程序内部,部分结果无法正确解析,出现报错,目前测试发现 qwen-plus、qwen-max-0125 、qwen-turbo、qwen-long 兼容 Mem0 框架,qwen-max、qwq-plus 等不兼容 Mem0 框架。


5.3 使用uvx运行mcp服务

使用 uvx 运行的工具会在临时的隔离环境中安装和运行。uvx命令可以在不安装工具的情况下直接运行工具。

我们的服务支持 sse 和 stdio 两种模式启动。



5.3.1 sse 模式启动

首先,在命令行输入 sse 模式启动指令:

export OPENAI_API_KEY="<你的百炼_api_key>"
export OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
export TABLESTORE_ENDPOINT="<your_tablestore_endpoint>"
export TABLESTORE_INSTANCE_NAME="<your_tablestore_instance_name>"
export TABLESTORE_ACCESS_KEY_ID="<your_tablestore_access_key_id>"
export TABLESTORE_ACCESS_KEY_SECRET="<your_tablestore_access_key_secret>"
uvx tablestore-openmemory-mcp --transport=sse

在命令行键入指令后,会输出以下信息:

 image.png 

显示,服务启动在 0.0.0.0:8765,这时我们可以按照以下格式在 AI 客户端 Cline  中配置服务相关信息:

"tablestore-openmemory-sse": {
  "autoApprove": [
  "search_memories",
  "delete_all_memories",
  "list_memories",
  "add_memories"
  ],
  "disabled": true,
  "timeout": 60,
  "type": "sse",
  "url": "http://localhost:8765/mcp/{client_name}/sse/{user_id}"
}

url中可以自行随意指定client_nameuser_id调整 Mem0操作对象,可以做到不同场景和不同用户的隔离。若不需要自动触发工具调用,可以去掉autoApprove字段。


5.3.2 stdio 模式启动


我们可以通过在命令行中输入如下参数进行启动:

export OPENAI_API_KEY="<你的百炼_api_key>"
export OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
export TABLESTORE_ENDPOINT="<your_tablestore_endpoint>"
export TABLESTORE_INSTANCE_NAME="<your_tablestore_instance_name>"
export TABLESTORE_ACCESS_KEY_ID="<your_tablestore_access_key_id>"
export TABLESTORE_ACCESS_KEY_SECRET="<your_tablestore_access_key_secret>"
uvx tablestore-openmemory-mcp --transport=stdio

同时,stdio 模式可以直接在 cline 中进行配置,AI 客户端 Cline  会自动启动基于标准输入输出流的服务,具体配置如下:


"tablestore-openmemory-stdio": {
  "autoApprove": [
    "search_memories",
    "delete_all_memories",
    "list_memories",
    "add_memories"
  ],
  "disabled": false,
  "timeout": 60,
  "type": "stdio",
  "command": "uvx",
  "args": [
    "tablestore-openmemory-mcp",
    "--transport",
    "stdio"
  ],
  "env": {
    "OPENAI_API_KEY": "<你的百炼_api_key>",
    "OPENAI_BASE_URL": "https://dashscope.aliyuncs.com/compatible-mode/v1",
    "TABLESTORE_ENDPOINT": "<your_tablestore_endpoint>",
    "TABLESTORE_INSTANCE_NAME": "<your_tablestore_instance_name>",
    "TABLESTORE_ACCESS_KEY_ID": "<your_tablestore_access_key_id>",
    "TABLESTORE_ACCESS_KEY_SECRET": "<your_tablestore_access_key_secret>",
  }
}

若需要提供一些额外配置,需要在env字段根据5.2节中表格进行设置。若不需要自动触发工具调用,可以去掉autoApprove字段。



6. 总结


Tablestore OpenMemory MCP 服务基于 Mem0,结合阿里云表格存储,提供标准化的模型上下文协议(MCP)接口,支持多种记忆操作工具(如添加、检索、删除记忆),便于集成到各类 AI 应用中,支持用户级、会话级和代理级的长期与短期上下文记忆管理,提升AI 在多轮对话中的个性化与连贯性。


最后,欢迎加入我们的钉钉公开群 (钉钉群号: 36165029092),与我们一起探讨 Agent Memory 相关问题。

 image.png

相关实践学习
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
NoSQL 物联网 存储
IoT+Tablestore快速构建智能售货机应用
### 一、 背景介绍         近年来,物联网(IoT)技术发生了巨大的变化。NB-IoT、LoRa等技术的产生解决了网络覆盖、设备功耗成本问题;尤其是最近5G技术的商用,意味着支持海量设备连接进行高质量数据通讯即将有坚实的基础设施支持。
|
7月前
|
存储 NoSQL Java
Tablestore集成MCP协议: 标量与向量混合检索的新范式
基于表格存储(Tablestore)实现的MCP(Model Context Protocol)服务,支持文档存储与混合检索工具两大功能。通过Cherry-Studio界面和通义千问qwen-max模型进行演示,展示了文本数据上传、向量嵌入及查询过程。此外,详细说明了Python和Java版本的本地运行步骤、环境配置及二次开发方法,并提供了集成三方工具如Cherry Studio的应用示例。Tablestore凭借混合查询、Serverless低成本、弹性扩展等优势,为MCP场景提供高效解决方案。
765 3
|
存储 NoSQL 关系型数据库
基于TableStore的海量气象格点数据解决方案实战 王怀远
基于TableStore的海量气象格点数据解决方案实战 王怀远
557 0
基于TableStore的海量气象格点数据解决方案实战 王怀远
|
存储 运维 NoSQL
基于Tablestore的一站式物联网存储解决方案-场景篇
## 前言 随着5G时代的来临,万物互联概念的兴起,物联网渐渐覆盖到了各行各业中。本系列文章将为大家介绍基于表格存储Tablestore的一站式物联网存储解决方案。以共享充电宝场景为例,实现物联网场景下元数据、时序数据存储,高并发更新、分析计算等需求。 ## 背景 共享经济是近年来兴起的一种概念,共享概念极大方便了人们的生活。例如共享单车、共享车位、共享充电宝等等。这些场景里包含了大量的设备元
1308 1
|
存储 NoSQL 数据可视化
基于Tablestore的一站式物联网存储解决方案-Flink 实时计算
## 需求分析 在共享充电宝场景中,会有一些对实时性要求较高的计算场景。例如大屏展示每个省份、每个机柜的营收情况。这类场景不同于离线计算类的场景,需要实时地根据订单数据的变化来统计营业额,并不能采用前文中介绍的Spark近实时流批计算来实现。整个场景需求链路为根据订单增量变化,触发计算逻辑,计算结果写入Tablestore表中,提供给大屏展示。大致可以归纳成**增量写入-实时
707 0
基于Tablestore的一站式物联网存储解决方案-Flink 实时计算
|
存储 NoSQL 大数据
基于TableStore的海量气象格点数据解决方案实战
前言 气象数据是一类典型的大数据,具有数据量大、时效性高、数据种类丰富等特点。气象数据中大量的数据是时空数据,记录了时间和空间范围内各个点的各个物理量的观测量或者模拟量,每天产生的数据量常在几十TB到上百TB的规模,且在爆发性增长。
5893 0
|
存储 NoSQL 关系型数据库
基于Tablestore打造亿量级订单管理解决方案
一、方案背景 订单系统存在于各行各业,如电商订单、银行流水、运营商话费账单等,是一个非常广泛、通用的系统。对于这类系统,在过去十几年发展中已经形成了经典的做法。但是随着互联网的发展,以及各企业对数据的重视,需要存储和持久化的订单量越来越大。
19113 0
|
存储 NoSQL 物联网
基于Tablestore的一站式物联网存储解决方案-表设计篇
## 前言 本章节主要讲解表格存储Tablestore的实例、表的创建步骤和共享充电宝场景的数据表设计。 ​ ## 表设计 ### 表功能设计 这里按照功能需求分为三张数据表:元数据表、订单数据表、元数据时序表 - 元数据表 元数据表保存了机柜的最新状态数据。用户租借、归还充电宝,以及运维人员上下线机柜,都会更新元数据表记录。在元数据表上建立索引,可提供多维查询的能力。对元数据表按照字段进行
959 0
|
SQL 存储 NoSQL
基于Tablestore的一站式物联网存储解决方案-数据操作篇
## 前言 上一章节介绍了共享充电宝场景的表结构设计。本章节主要为大家介绍如何使用表格存储Tabelstore数据表实现基本数据读写、批量更新,以及利用多元索引特性实现多维度查询功能。 ## 准备工作 - 测试数据说明 | 数据表 | 数据表名 | 数据行数 | 说明 | | --- | --- | --- | --- | | 元数据表 | cabinet | 一千万行 | 模拟一千万台机柜 |
648 0
|
存储 分布式计算 NoSQL
基于Tablestore的一站式物联网存储解决方案-Spark 分析
## 前言 上一章节[《基于Tablestore的一站式物联网存储解决方案-数据操作篇》](https://ata.alibaba-inc.com/articles/213053) 为大家介绍了如何读写表格存储Tablestore中的数据。可以看到,无论是主键读写还是索引查询,都属于在线实时查询的场景。这些场景都要求某个查询或某个任务的服务响应时间极低(秒级别甚至毫秒级别)。然而,在共享充电宝场景
489 0