乐于分享
好东西不私藏

Dify记忆能力实战(下):Mem0插件接入,实现跨会话智能记忆

Dify记忆能力实战(下):Mem0插件接入,实现跨会话智能记忆

    上篇尝试了Dify内置的两种记忆机制:上下文记忆AI记住“刚聊了什么”,会话变量AI记住“用户是什么样的人”。但两者都有一个共同的边界——记忆止步于单次会话,会话结束即清零

   本文正式进入Dify记忆能力的2阶段:外部持久化记忆,基于Mem0插件实现跨会话、永不过期的智能记忆。笔者采用Mem0官方推荐的轻量私有化部署模式:只需要一个PostgreSQL数据库(带pgvector扩展),加上LLM和Embedding模型的API密钥,在Dify插件里配好JSON即可。不需要部署完整的Mem0 API服务、认证和Dashboard,适合快速上手验证。


1. 安装PostgreSQL + pgvector

    Mem0的记忆存储依赖向量数据库。我们使用官方的pgvector/pgvector:pg16镜像,它已经预装了vector扩展,开箱即用。

docker run -d \  --name pgvector-db \  -p 5432:5432 \  -e POSTGRES_USER=postgres \  -e POSTGRES_PASSWORD=postgres \  -e POSTGRES_DB=mem0db \  -v $(pwd)/pgvector_data:/var/lib/postgresql/data \  pgvector/pgvector:pg16

    参数解释:

    POSTGRES_USER和POSTGRES_PASSWORD:账号密码都设置为postgres;

    POSTGRES_DB:自动创建一个名为mem0db的数据库;

    -v $(pwd)/pgvector_data:数据持久化到本地目录,防止容器删除后数据丢失;

    ⚠️ 关键:虽然镜像自带了vector插件,但必须在数据库中手动开启扩展,否则Mem0自动建表时会报错。

docker exec -it pgvector-db psql -U postgres -d mem0db -c "CREATE EXTENSION IF NOT EXISTS vector;"

    输出“CREATE EXTENSION”,说明扩展已成功开启。

2. Dify中配置Mem0插件

    在Dify插件市场中搜索mem0,笔者推荐使用“mem0ai ”插件。它功能最全,提供了包括添加、搜索、更新、删除在内的12项记忆管理工具,并且专门支持私有化部署模式(Self-Hosted Mode)。

    🌈 Mem0插件的价值,就在于把“记忆”从黑盒变成了你可以查看、编辑、删除的白盒资产。

    笔者下载的插件版本为0.3.1,在插件配置界面中,需要填写LLM配置、向量模型配置、向量数据库配置三个必填项。笔者采用硅基流动的LLM、Embedder模型,向量表的纬度需要和Embedder模型纬度保持一致。

    • LLM配置

{  "provider": "openai",  "config": {    "model": "Qwen/Qwen2.5-72B-Instruct",    "api_key": "sk-xxx(API秘钥)",    "openai_base_url": "https://api.siliconflow.cn/v1",    "temperature": 0.1,    "max_tokens": 256  }}
    • 向量模型配置

{  "provider": "openai",  "config": {    "model": "BAAI/bge-large-zh-v1.5",    "api_key": "sk-xxx(API秘钥)",    "openai_base_url": "https://api.siliconflow.cn/v1"  }}
    • 向量数据库配置

{  "provider""pgvector",  "config": {    "connection_string":"postgresql://postgres:postgres@host.docker.internal:5432/mem0db?sslmode=disable&keepalives=1&keepalives_idle=30&keepalives_interval=10&keepalives_count=3&connect_timeout=5",    "collection_name""mem0",    "embedding_model_dims":1024   }}

    ⚠️ 注意:Mac上Docker容器内访问宿主机服务,请使用host.docker.internal而非localhost

    保存配置后,如果连接成功,插件状态会自动点亮绿灯。

3. 搭建会话记忆助手

    在Dify中创建一个Chatflow关注本公众号,在后台【私信】中回复“手抄报”,获取本案例DSL,引入mem0ai插件。核心架构如下:

开始节点 → mem0检索节点 → LLM节点 → mem0存储节点 → 回答节点

    关键配置:user_id 隔离机制

    在测试环境下,如何固定user_id?有两种方式:

   方式一(推荐):mem0插件的user_id字段中直接填入{{sys.user_id}}。Dify会自动映射当前用户的唯一标识,无论测试还是发布都有效。

    方式二:在流水线中自定义一个变量节点A,设置user_id值,然后在插件中填入{{节点A.user_id}}。手动控制更灵活,适合多用户模拟测试。

    🧨 排除干扰:为了避免LLM节点自带的上下文记忆干扰测试结果,需要关闭LLM节点的记忆功能。这样每一次提问都是“失忆”状态,AI完全依赖Mem0来回忆——这才是对记忆能力的真正考验。

    笔者在记忆相关模块后添加了输出节点,在测试面板中可以直接看到记忆的检索和存储过程。

4. 记忆助手测试

    轮次01:保存记忆

    告诉聊天助手一些信息:“我叫小明,正在参与一个项目,项目编号是9527。”助手提示记忆写入(Mem0已经将这条信息向量化后存入pgvector)。当前的user_id为a94fb6ae-991c-4c69-86f3-26c94d3fc4c7。

    轮次02:查询记忆

    问下聊天助手:“我叫什么名字?我参与的项目编号是什么?”助手通过Mem0检索到历史记忆,准确返回了刚才的输入信息。

    ✅记忆能力验证通过!

5. 记忆落地验证

    在终端执行以下命令进入数据库查看原始数据:

docker exec -it pgvector-db psql -U postgres -d mem0db

    查询记忆表:

SELECT id, payload FROM mem0;

    可以看到表中完整记录了user_id、交互内容、向量嵌入等结构化数据

    👏🏻 你的记忆资产,完全掌握在自己手里!

下篇预告:完全体·本地Mem0服务搭建

    至此,我们通过“轻量私有化模式”跑通了Mem0插件,实现了Dify的跨会话记忆。但这个方案仍有局限——记忆只服务于当前这一个Dify应用。

    如果我有多个Dify应用,或者还有OpenClaw、Hermes等其他Agent框架,它们之间能否共享同一个记忆库?答案是肯定的。

下一篇,我们将基于docker-compose部署完整的Mem0服务,包含:

    • API服务:统一记忆读写接口

    • Dashboard:可视化管理所有记忆

    • 持久化存储:一套记忆库,供多个Dify应用、多个Agent框架共享

    届时,你的智能体将拥有一套全局统一的记忆系统——无论哪个Agent、哪个应用,都认得你、记得你。敬请期待!