告别AI失忆症!Mem0+Milvus打造AI长期记忆,小白也能快速上手!
简介
文章介绍了Mem0,一个为AI智能体打造的记忆层解决方案,能有效解决AI失忆问题。Mem0通过持久化存储用户偏好和历史对话,使AI能在多轮对话中保持连贯性。文章详细展示了Mem0与传统RAG系统的区别,以及其核心工作流程:语义捕获、向量化、存储、检索和上下文增强。通过两个实践示例,展示了如何结合Mem0与阿里云Milvus构建具备长期记忆的AI Agent,以及如何利用图谱引擎与向量引擎协同分析信息间的复杂关联,为AI应用提供更高效、可扩展的长时记忆解决方案。
背景
跟 ChatGPT 对话,比跟真人社交还累!真人好歹能记住你名字吧?
想象一下——你昨天刚把沙发位置、爆米花口味、爱看的电影都告诉了 ChatGPT,而它永远是那个热情又健忘的助理,下次再对话还是会问:“哦?是吗?那太好了!请问您对什么类型的电影感兴趣呢?”
受够了这种单方面的“社牛”表演?Mem0 来了,专治 AI 失忆症,给你的“金鱼脑”助理装个大容量硬盘,让你们下次见面,能直接跳过多余的问答,从“好久不见”开始。
Mem0 介绍
Mem0 是为 AI 智能体开发打造的记忆层。它就像一个持久的“大脑”,能帮助 AI 智能体完成以下内容:
- 随时调取历史对话,追溯关键信息
- 精准记住用户的个人偏好与重要事实
- 在实践中总结经验,不断自我完善
git地址:https://github.com/mem0ai/mem0
记忆层的作用
如下图所示,无记忆层的情况下,即使 LLM 有超大的上下文窗口的情况下,再开一个新会话后上下文都会被重置。有记忆层 Mem0 的情况下,将保留上下文,召回需要的内容,并持续优化自身存储。

记忆层在 AI 智能体开发中的作用
如下图所示,Mem0 会与检索器(RAG)、LLM 、上下文并肩工作。与传统的基于检索的系统(如 RAG)不同,Mem0 会记录过往交互、保存长期知识,并让智能体的行为随时间而进化。仅会将记忆中相关的知识合并到 prompt 之中,输入给 LLM。

Mem0在AI智能体中的处理方式
下面是 Mem0 记忆层和使用 LLM 上下文窗口的主要区别:
| 能力 | LLM上下文窗口 | Mem0 记忆存储 |
| 记忆力 | 临时 | 持久化 |
| token 消耗 | 随着输入增加 | 优化(只获取需要的内容) |
| 内容召回 | 依赖于 LLM 对长上下文识别能力 | 压缩上下文,更接近意图 |
| 个性化 | 无 | 记录历史会话 |
记忆层和 RAG 对比
以 Mem0 为代表的记忆层与传统 RAG 对比有以下区别:
- 实体关联:理解并跨会话关联人物、主题,而非仅检索静态文档。
- 记忆策略:优先近期、高相关记忆,旧信息自动衰减。
- 会话连续:长期保留上下文,使得虚拟伴侣、学习助手等场景更连贯。
- 持续学习:根据用户反馈实时微调,个性化随时间更精准。
- 动态更新:新交互即时写入记忆,无需重新索引文档。
Mem0 核心流程
Mem0 的核心工作流程包括以下步骤:
-
语义捕获:利用 LLM 对会话流进行智能解析,自动捕获并抽象出具备长期价值的核心语义信息。
-
内容向量化:通过嵌入模型将这些语义信息编码为高维度的向量,为后续的相似度计算和高效检索奠定基础。
-
向量存储:将上一步生成的向量存储至向量数据库中,该数据库需要支持大规模、低延迟的语义搜索,在后面的例子中我们将使用阿里云 Milvus。
-
检索:系统接收到新的用户输入后,会立即在向量空间中进行语义相似度匹配,精准地调用出与当前情境最关联的历史记忆。
-
上下文增强:将调用出的历史记忆注入到当前的推理链路中,与现有上下文相结合,从而生成逻辑更连贯、内容更具个性化的响应。
阿里云Milvus基本原理介绍
基本原理与架构概述
Milvus 是专为向量相似性搜索设计的分布式数据库,其核心基于以下关键技术:
- 近似最近邻搜索(ANN):通过 HNSW、IVF、PQ 等算法实现高效向量检索,平衡精度与速度。
- 向量索引与查询分离:支持动态构建多种索引类型(如FLAT、IVF_FLAT、IVF_PQ、HNSW),适配不同场景需求。
- 向量数据分片与分布式计算:数据水平切分(Sharding)并行处理,实现高吞吐与低延迟。
采用云原生和存算分离的微服务架构。该架构分为接入、协调、执行和存储四层。各组件可独立扩展,确保了系统的高性能、高可用性和弹性。它依赖成熟的第三方组件(如 etcd、对象存储)进行数据和元数据管理,稳定可靠。

阿里云 Milvus 系统架构图
可能大家都想学习AI大模型技术,也_想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把都打包整理好,希望能够真正帮助到大家_。

使用场景
阿里云 Milvus 适用于任何需要进行“相似性”匹配的场景。其核心应用包括:
-
图像视频搜索:如电商平台的以图搜图、安防领域的人脸识别和视频轨迹追踪。
-
文本语义搜索:构建智能客服、企业内部文档知识库和代码搜索引擎,能精准理解用户意图,而非简单的关键词匹配。
-
个性化推荐系统:根据用户的行为和偏好向量,实时推荐最相似的商品、音乐、新闻或视频。
-
前沿科学与安全:在生物信息学中加速药物分子筛选,或在网络安全领域进行异常流量和欺诈行为检测。
-
智能驾驶数据准备与挖掘:对点云图像、车载传感器收集的音视频等多模态数据进行向量数据的实时查询。
更多介绍:https://www.aliyun.com/product/milvus
接下来,本教程将通过两个示例,带你实践如何结合 Mem0 与 Milvus 实现:
- 构建具备长期记忆的 AI Agent
- 利用图谱引擎与向量引擎协同分析信息间的复杂关联。
实践一、有记忆的AI Agent开发流程
前提条件
- 已创建阿里云 Milvus 实例。具体操作,请参见 快速创建 Milvus 实例 [1]。
- 已开通服务并获得 API-KEY。具体操作,请参见 开通 DashScope 并创建 API-KEY [2]。
代码开发
LangGraph 是一个业界成熟的用于构建有状态和多角色的Agents 应用的框架。限于篇幅将不对 LangGraph 过多介绍,可以参考官方文档 [3]。
- 依赖库安装
pip install langgraph langchain-openai mem0ai
- 核心代码
包含以下核心步骤:
-
环境变量设置 OpenAI 方式访问百炼 qwen 大模型;LLM 设置 qwen-plus 作为语言大模型;Mem0 配置 qwen-plus 作为语义识别和处理大模型、使用 text-embedding-v3 作为 embedding 模型、使用 Milvus 作为向量存储数据库。
-
设置 LangGraph 会话状态,用于获取对话上下文。
-
对话 Agent 开发,使用 Mem0 的 search 接口获取相关的记忆、使用 Mem0 的 add 接口存储相关记忆到向量库 Milvus 中。
-
编排 LangGraph,设置节点和边。
-
设置 LangGraph 流式输出。
-
入口 main 函数进行人机交互。
from typing import Annotated, TypedDict, List
from langgraph.graph import StateGraph, START
from langgraph.graph.message import add_messages
from langchain_openai import ChatOpenAI
from mem0 import Memory
import os
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
# 设置环境变量,百炼平台qwen模型的key和baseurl
os.environ["OPENAI_API_KEY"] = "sk-xx"
os.environ["OPENAI_BASE_URL"] = "https://dashscope.aliyuncs.com/compatible-mode/v1"
# LLM设置
llm = ChatOpenAI(model="qwen-plus", temperature=0.2, max_tokens=2000)
# Mem0设置,LLM、embedding和向量库
config = {
"llm": {
"provider": "openai",
"config": {
"model": "qwen-plus",
"temperature": 0.2,
"max_tokens": 2000,
}
},
"embedder": {
"provider": "openai",
"config": {
"model": "text-embedding-v3",
"embedding_dims": 128,
}
},
"vector_store": {
"provider": "milvus",
"config": {
"collection_name": "mem0_test1",
"embedding_model_dims": "128",
"url": "http://c-xxx.milvus.aliyuncs.com:19530",
"token": "root:xxx",
"db_name": "default",
},
},
"version": "v1.1",
}
mem0 = Memory.from_config(config)
# 设置LangGraph对话状态
class State(TypedDict):
messages: Annotated[List[HumanMessage | AIMessage], add_messages]
mem0_user_id: str
graph = StateGraph(State)
# 对话Agent开发,包含Mem0记忆读取和记忆存储
def chatbot(state: State):
messages = state["messages"]
user_id = state["mem0_user_id"]
try:
# Retrieve relevant memories
memories = mem0.search(messages[-1].content, user_id=user_id,)
# Handle dict response format
memory_list = memories['results']
context = "Relevant information from previous conversations:\n"
for memory in memory_list:
context += f"- {memory['memory']}\n"
system_message = SystemMessage(content=f"""You are a helpful customer support assistant. Use the provided context to personalize your responses and remember user preferences and past interactions.
{context}""")
full_messages = [system_message] + messages
print(full_messages)
response = llm.invoke(full_messages)
# Store the interaction in Mem0
try:
interaction = [
{
"role": "user",
"content": messages[-1].content
},
{
"role": "assistant",
"content": response.content
}
]
result = mem0.add(interaction, user_id=user_id,)
print(f"Memory saved: {len(result.get('results', []))} memories added")
except Exception as e:
print(f"Error saving memory: {e}")
return {"messages": [response]}
except Exception as e:
print(f"Error in chatbot: {e}")
# Fallback response without memory context
response = llm.invoke(messages)
return {"messages": [response]}
# 设置LangGraph调度节点和边
graph.add_node("chatbot", chatbot)
graph.add_edge(START, "chatbot")
graph.add_edge("chatbot", "chatbot")
compiled_graph = graph.compile()
# 设置LangGraph流式输出
def run_conversation(user_input: str, mem0_user_id: str):
config = {"configurable": {"thread_id": mem0_user_id}}
state = {"messages": [HumanMessage(content=user_input)], "mem0_user_id": mem0_user_id}
for event in compiled_graph.stream(state, config):
for value in event.values():
if value.get("messages"):
print("Customer Support:", value["messages"][-1].content)
return
# 入口函数交互入口
if __name__ == "__main__":
print("Welcome to Customer Support! How can I assist you today?")
mem0_user_id = "alice" # You can generate or retrieve this based on your user management system
while True:
user_input = input("You: ")
if user_input.lower() in ['quit', 'exit', 'bye']:
print("Customer Support: Thank you for contacting us. Have a great day!")
break
run_conversation(user_input, mem0_user_id)
验证效果
如下图所示,第一次执行代码我们没有任何上下文,我们提问和电影相关的问题并且和 LLM 说了不喜欢惊悚片,LLM 最终根据我们的要求推荐了一些合适的影片。

第一次提问
可以看到了一些 Memory saved 的打印,查看 Milvus 向量库,可以看到对应的 collection 已经有了几个 Entity。

点开数据页面,可以看到 Mem0 已将上下文经过 LLM 处理概括地保存到 metadata 字段中,并且对应的用户是 alice,数据为了可以被检索也已经被向量化存储到 vectors 字段中。

重新执行代码,因为我们已经有了记忆的存在,再问一下“我喜欢什么电影”,可以看到 Mem0 从 Milvus 中召回了相关的内容,并将内容合并到了 prompt 中发送给 LLM,我们得到了相关的电影推荐而不需要再和 LLM 重复介绍我们的喜好。

实践二:通过图谱引擎+向量引擎解析信息之间复杂关系
方案概述
Mem0 支持图谱记忆(Graph Memory)。借助图谱记忆,用户可以创建并利用信息之间的复杂关系,从而生成更细致、更具上下文感知能力的响应。这一融合使用户能够同时发挥向量检索与图谱技术的优势,实现更准确、更全面的信息检索与内容生成。
记忆层添加记录的方式如下图所示,Mem0 通过 LLM 提取内容后,通过添加或者更新的方式,同时将内容 embedding 到向量库和提取实体&关系到图谱数据库中。

记忆层添加记录
记忆层检索记录的方式如下图所示,Mem0 通过 LLM 提取内容后,同时将内容 embedding 到向量库检索和提取实体&关系到图谱数据库中检索,双路检索后将结果合并输出。

记忆层检索记录
前提条件
- 已创建阿里云 Milvus 实例。具体操作,请参见 快速创建 Milvus 实例 [1]。
- 已开通服务并获得 API-KEY。具体操作,请参见 开通 DashScope 并创建 API-KEY [2]。
代码开发
- 依赖库安装
pip install kuzu rank-bm25 mem0ai
- 核心代码
包含以下核心步骤:
-
环境变量设置 OpenAI 方式访问百炼 qwen 大模型;LLM 设置 qwen-plus 作为语言大模型;Mem0 配置 qwen-plus 作为语义识别和处理大模型、使用 text-embedding-v3 作为 embedding 模型、使用 Milvus 作为向量存储数据库、使用 kuzu 作为图谱数据库。
-
初始化 Mem0,添加数据,将同时添加内容到向量库和图谱库中。
-
提问测试。
from langchain_openai import ChatOpenAI
from mem0 import Memory
# 设置环境变量,百炼平台qwen模型的key和baseurl
os.environ["OPENAI_API_KEY"] = "sk-xx"
os.environ["OPENAI_BASE_URL"] = "https://dashscope.aliyuncs.com/compatible-mode/v1"
# LLM设置
llm = ChatOpenAI(model="qwen-plus", temperature=0.2, max_tokens=2000)
# Mem0设置,LLM、embedding和向量库
config = {
"llm": {
"provider": "openai",
"config": {
"model": "qwen-plus",
"temperature": 0.2,
"max_tokens": 2000,
}
},
"embedder": {
"provider": "openai",
"config": {
"model": "text-embedding-v3",
"embedding_dims": 128,
}
},
"vector_store": {
"provider": "milvus",
"config": {
"collection_name": "mem0_test3",
"embedding_model_dims": "128",
"url": "http://c-xxx.milvus.aliyuncs.com:19530",
"token": "root:xxx",
"db_name": "default",
},
},
"graph_store": {
"provider": "kuzu",
"config": {
"db": "./mem0-example.kuzu"
}
},
"version": "v1.1",
}
# 初始化Mem0,添加数据,将同时添加内容到向量库和图谱库中
m = Memory.from_config(config)
m.add("我喜欢去徒步旅行", user_id="alice123")
m.add("我喜欢打羽毛球", user_id="alice123")
m.add("我讨厌打羽毛球", user_id="alice123")
m.add("我的朋友叫约翰,约翰有一只叫汤米的狗", user_id="alice123")
m.add("我的名字是爱丽丝", user_id="alice123")
m.add("约翰喜欢徒步旅行,哈利也喜欢徒步旅行", user_id="alice123")
m.add("我的朋友彼得是蜘蛛侠", user_id="alice123")
# 按照score分数倒序排列,输出结果
def get_res(res):
sorted_results = sorted(res['results'], key=lambda x: x['score'], reverse=True)
res['results'] = sorted_results
print(json.dumps(res, ensure_ascii=False, indent=2))
# 提问测试
get_res(m.search("我的名字是什么?", user_id="alice123"))
get_res(m.search("谁是蜘蛛侠?", user_id="alice123"))
验证效果
如下图所示,是“我的名字是什么?”的返回,可以看到 results 中是向量返回,返回的“名字是爱丽丝”得分并不高,relations 中是图谱返回,解析出了我的名字是“爱丽丝”,关系为 has_name。

如下图所示,是“谁是蜘蛛侠?”的返回,可以看到 results 中是向量返回,返回的“朋友彼得是蜘蛛侠”得分最低,relations 中是图谱返回,解析出了蜘蛛侠的名字是“彼得”,关系为是。

通过以上两个例子,可以发现,有图谱能力的加持,可以补齐向量库缺失信息之间深层分析的短板。
随着 AI 应用越来越深入日常生活,系统对用户上下文和历史信息的理解变得尤为重要。Mem0 与 Milvus 的结合,为人工智能提供了一套高效、可扩展的长时记忆解决方案。通过向量数据库持久化存储语义记忆,AI 不仅能记住过去的交互,还能在后续对话中持续调用和更新这些信息。这一能力让智能助手、客服机器人等应用更加连贯、个性化和实用。
在大模型时代,我们如何有效的去学习大模型?
现如今大模型岗位需求越来越大,但是相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
掌握大模型技术你还能拥有更多可能性:
• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;
• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;
• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;
• 更优质的项目可以为未来创新创业提供基石。
可能大家都想学习AI大模型技术,也_想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把都打包整理好,希望能够真正帮助到大家_。

一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,下面是我整理好的一套完整的学习路线,希望能够帮助到你们学习AI大模型。

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

三、AI大模型经典PDF书籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

四、AI大模型各大场景实战案例

结语
【一一AGI大模型学习 所有资源获取处(无偿领取)一一】
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

更多推荐
所有评论(0)