在 LangChain 中集成 Mem0 记忆系统教程
目录
- 简介
- 环境准备
- 基础配置
- 核心组件说明
- 1. 提示模板设计
- 2. 上下文检索
- 3. 响应生成
- 4. 记忆存储
- 工作流程解析
- 使用示例
- 关键特性
- 完整代码与效果
简介
Mem0 是一个强大的记忆系统,可以帮助 AI 应用存储和检索历史对话信息。本教程将介绍如何在 LangChain 应用中集成 Mem0,实现一个具有记忆能力的旅行顾问 AI。
环境准备
首先需要安装必要的依赖:
pip install langchain openai mem0
基础配置
首先,我们需要设置基本的配置信息:
from openai import OpenAI
from mem0 import Memory
from mem0.configs.base import MemoryConfig
from mem0.embeddings.configs import EmbedderConfig
from mem0.llms.configs import LlmConfig# 集中管理配置
API_KEY = "your-api-key"
BASE_URL = "your-base-url"# 配置 Mem0
config = MemoryConfig(llm = LlmConfig(provider="openai",config={"model": "qwen-turbo","api_key": API_KEY,"openai_base_url": BASE_URL}),embedder = EmbedderConfig(provider="openai",config={"embedding_dims": 1536,"model": "text-embedding-v2","api_key": API_KEY,"openai_base_url": BASE_URL})
)mem0 = Memory(config=config)
核心组件说明
1. 提示模板设计
我们使用 LangChain 的 ChatPromptTemplate
来构建对话模板:
prompt = ChatPromptTemplate.from_messages([SystemMessage(content="""You are a helpful travel agent AI..."""),MessagesPlaceholder(variable_name="context"),HumanMessage(content="{input}")
])
2. 上下文检索
retrieve_context
函数负责从 Mem0 中检索相关记忆:
def retrieve_context(query: str, user_id: str) -> List[Dict]:memories = mem0.search(query, user_id=user_id)seralized_memories = ' '.join([mem["memory"] for mem in memories["results"]])return [{"role": "system", "content": f"Relevant information: {seralized_memories}"},{"role": "user","content": query}]
3. 响应生成
generate_response
函数使用 LangChain 的链式调用生成回复:
def generate_response(input: str, context: List[Dict]) -> str:chain = prompt | llmresponse = chain.invoke({"context": context,"input": input})return response.content
4. 记忆存储
save_interaction
函数将对话保存到 Mem0:
def save_interaction(user_id: str, user_input: str, assistant_response: str):interaction = [{"role": "user", "content": user_input},{"role": "assistant", "content": assistant_response}]mem0.add(interaction, user_id=user_id)
工作流程解析
-
记忆检索:当用户发送消息时,系统会使用 Mem0 的
search
方法检索相关的历史对话。 -
上下文整合:系统将检索到的记忆整合到提示模板中,确保 AI 能够理解历史上下文。
-
响应生成:使用 LangChain 的链式调用生成回复。
-
记忆存储:将新的对话内容存储到 Mem0 中,供future使用。
使用示例
if __name__ == "__main__":print("Welcome to your personal Travel Agent Planner!")user_id = "john"while True:user_input = input("You: ")if user_input.lower() in ['quit', 'exit', 'bye']:breakresponse = chat_turn(user_input, user_id)print("Travel Agent:", response)
关键特性
- 用户隔离:通过
user_id
实现多用户数据隔离 - 语义搜索:Mem0 使用向量嵌入进行语义相似度搜索
- 上下文感知:AI 能够理解并利用历史对话信息
- 灵活扩展:易于集成到现有的 LangChain 应用中
完整代码与效果
from openai import OpenAI
from mem0 import Memory
from mem0.configs.base import MemoryConfig
from mem0.embeddings.configs import EmbedderConfig
from mem0.llms.configs import LlmConfigfrom langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from typing import List, Dict
# 集中管理配置
API_KEY = "your api key"
BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"# OpenAI客户端配置
openai_client = OpenAI(api_key=API_KEY,base_url=BASE_URL,
)# LangChain LLM配置
llm = ChatOpenAI(temperature=0,openai_api_key=API_KEY,openai_api_base=BASE_URL,model="qwen-turbo"
)# Mem0配置
config = MemoryConfig(llm = LlmConfig(provider="openai",config={"model": "qwen-turbo","api_key": API_KEY,"openai_base_url": BASE_URL}),embedder = EmbedderConfig(provider="openai",config={"embedding_dims": 1536,"model": "text-embedding-v2","api_key": API_KEY,"openai_base_url": BASE_URL})
)mem0 = Memory(config=config)prompt = ChatPromptTemplate.from_messages([SystemMessage(content="""You are a helpful travel agent AI. Use the provided context to personalize your responses and remember user preferences and past interactions. Provide travel recommendations, itinerary suggestions, and answer questions about destinations. If you don't have specific information, you can make general suggestions based on common travel knowledge."""),MessagesPlaceholder(variable_name="context"),HumanMessage(content="{input}")
])def retrieve_context(query: str, user_id: str) -> List[Dict]:"""Retrieve relevant context from Mem0"""memories = mem0.search(query, user_id=user_id)seralized_memories = ' '.join([mem["memory"] for mem in memories["results"]])context = [{"role": "system", "content": f"Relevant information: {seralized_memories}"},{"role": "user","content": query}]return contextdef generate_response(input: str, context: List[Dict]) -> str:"""Generate a response using the language model"""chain = prompt | llmresponse = chain.invoke({"context": context,"input": input})return response.contentdef save_interaction(user_id: str, user_input: str, assistant_response: str):"""Save the interaction to Mem0"""interaction = [{"role": "user","content": user_input},{"role": "assistant","content": assistant_response}]mem0.add(interaction, user_id=user_id)def chat_turn(user_input: str, user_id: str) -> str:# Retrieve contextcontext = retrieve_context(user_input, user_id)# Generate responseresponse = generate_response(user_input, context)# Save interactionsave_interaction(user_id, user_input, response)return responseif __name__ == "__main__":print("Welcome to your personal Travel Agent Planner! How can I assist you with your travel plans today?")user_id = "john"while True:user_input = input("You: ")if user_input.lower() in ['quit', 'exit', 'bye']:print("Travel Agent: Thank you for using our travel planning service. Have a great trip!")breakresponse = chat_turn(user_input, user_id)print(f"Travel Agent: {response}")
参考链接:https://docs.mem0.ai/integrations/langchain
相关文章:

在 LangChain 中集成 Mem0 记忆系统教程
目录 简介环境准备基础配置核心组件说明1. 提示模板设计2. 上下文检索3. 响应生成4. 记忆存储 工作流程解析使用示例关键特性完整代码与效果 简介 Mem0 是一个强大的记忆系统,可以帮助 AI 应用存储和检索历史对话信息。本教程将介绍如何在 LangChain 应用中集成 Me…...
PTA练习题
文章目录 L1-101 别再来这么多猫娘了!(字符串查找-替换)L2-049 鱼与熊掌(set/暴力/vector)L2-050 懂蛇语(字符串匹配)L2-051 满树的遍历(前序)L2-001 紧急救援(最短路) L…...

华润电力招聘认知能力测评及性格测评真题题库考什么?
华润电力招聘测评包含逻辑推理、数字推理、语言理解三大类型的问卷。共计58题。测评限时60分钟。其中逻辑推理、数字推理、语言推理分别限时20分钟,如逾时未完成相关测试,测试将自动终止,请注意测评时间。为了确保测评的连贯性,建…...

Maven Profile在插件与依赖中的深度集成
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

手机平板等设备租赁行业MDM方案解析
目录 引言:MDM 在租赁行业的重要性日益凸显 用户场景:租赁公司面临的主要挑战 1. 设备丢失、逾期未还 2. 手动配置和恢复效率低 3. 非授权使用频繁 4. 时区设置混乱影响运维 5. 缺乏实时监管能力 EasyControl MDM:租赁设备的远程管控…...
【前端】使用HTTPS
在前端本地开发环境中使用 HTTPS 主要取决于你用的是哪个构建工具(如 Vite、Webpack、Vue CLI 等)。 目录 ViteWebpack本地生产环境 npx serve浏览器提示“不安全”解决方法上传github注意不要把key传上去 Vite npm install --save-dev types/node #安…...
Python应用“面向对象”小练习
大家好!面向对象编程是一种以 “对象” 为核心的编程思想。对象可以看作是具有特定属性和行为的实体。例如,一个学生可以是一个对象,他的属性包括姓名和年龄,行为可以是打招呼。 代码呈现: # 定义类和对象 class Student:def __init__(sel…...

如何调试CATIA CAA程序导致的CATIA异常崩溃问题
问题背景:我采用CATIA CAA编写了一个界面的小程序,功能运行成功,但是每次运行完,关闭CATIA的时候,都会弹出这个对话框,这个对话框的意思是CATIA运行崩溃,点击确定后,CATIA就会意外关…...

SQL查询效率以及索引设计
1. SQL 查询效率与数据库缓冲池机制 1.1. 数据库缓冲池(Buffer Pool) 磁盘 I/O 需要消耗的时间很多,而在内存中进行操作,效率则会高很多,为了能让数据表或者索引中的数据随时被我们所用,DBMS 会申请占用内…...

day37打卡
知识点回顾:浙大疏锦行 过拟合的判断:测试集和训练集同步打印指标模型的保存和加载 仅保存权重保存权重和模型保存全部信息checkpoint,还包含训练状态 早停策略 作业:对信贷数据集训练后保存权重,加载权重后继续训练50…...

分布式缓存:证明分布式系统的 CAP 理论
文章目录 Pre一、分布式系统背景与特点二、CAP 三要素详解三、CAP 定理的反证证明四、CP 架构与 AP 架构对比典型场景 五、CAP 理论在系统设计中的应用六、总结 Pre 分布式缓存:CAP 理论在实践中的误区与思考 分布式缓存:BASE理论实践指南 分布式 - 从…...

软件设计师“面向对象设计”真题考点分析——求三连
一、考点分值占比与趋势分析 综合知识历年考察统计 年份考题数分值占比考察重点2018334%继承类型、设计原则2019445.3%多态实现、类关系2020556.7%设计模式应用、接口隔离2021334%消息通信、封装特性2022668%开闭原则、组合模式2023556.7%模板方法、适配器模式2024445.3%单一…...
vue项目webpack、vite、rollup、parcel四种构建工具对比
以下是 Vue 项目中使用 Webpack 与其他主流构建工具(Vite、Rollup、Parcel)的对于项目的使用对比: 一、核心工具对比 特性WebpackViteRollupParcel构建原理Bundle-based(打包)ESM-based(原生模块)Bundle-based(专注库)Zero-config(自动分析)开发速度较慢(全量打包)…...
系统架构中的限流实践:构建多层防护体系(二)
系统架构中的限流实践:构建多层防护体系 一、接入层限流:流量拦截第一关二、应用层限流(服务内限流)Java生态方案对比三、分布式限流(跨服务限流)四、数据层限流(数据库/缓存限流)1. 数据库防护策略2. 缓存优化方案五、中间件层限流(消息队列/分布式服务)六、客户端限…...
Linux常见设备
linux上设备的分类? 设备分两种,字符设备和块设备。 块设备(Block Device):以固定大小数据块访问的设备(如磁盘、SSD),通常挂载后使用。 字符设备(Character Device)&…...

AI大模型学习二十八、ACE-Step:生成式AI音乐大模型简介与安装(一)
一、说明 先来一首创作的歌: 在大模型和生成式AI模型大规模发达的今天,利用大模型生成音乐也是其中一个重要的发展方向。今天我们就介绍一个这样的音乐生成模型ACE-Step,可基于关键字和歌词生成歌曲;基于歌曲生成伴奏等等功能。 …...
AI时代新词-AI芯片(AI - Specific Chip)
一、什么是AI芯片? AI芯片(AI - Specific Chip)是指专为人工智能(AI)计算任务设计的芯片。与传统的通用处理器(如CPU)相比,AI芯片针对深度学习、机器学习等AI应用进行了优化&#x…...
【多智能体系统开发框架AutoGen解析与实践】
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心架构图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现案例1:基础问答系统案例2:多专家协作 运行结果验证 三、性能对比测试方法论量化…...

接口性能测试-工具JMeter的学习
接口登录链接http://111.230.19.204:8080/blog_login.html 一、JMeter基本使用流程 1、启动Jmeter 2、在“测试计划”下添加线程组 3、在“线程组”下添加“HTTP”取样器 4、填写“HTTP请求”的相关请求数据 5、在“线程组”下添加“查看结果树”监听器 6、点击“启动”按钮…...

python如何离线安装pandas,numpy
1.首先在有网的电脑上正常安装python(和离线环境一样的版本) 然后 pip install pandas (不嫌麻烦的话也可以自己手动去pandas PyPI 一个个下载) 安装好后导出相关包,使用如下指令 2.然后相关依赖包就…...

Java Swing 自定义JOptionPane
运行后的样式 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class demoB {public static void main(String[] args) {SwingUtilities.invokeLater(() -> {JFrame jf new JFrameDemo();jf.se…...
项目亮点 封装request请求模块
封装网络请求模块 统一管理和复用 在项目根目录的utils文件夹下 request模块更新 const http axios.create({baseURL: http://geek.itheima.net/v1_0,timeout: 5000 })定义根域名和超时时间 请求拦截器 请求发送之前拦截,做自定义的配置 // 添加请求拦截器 re…...
通过 Terraform 构建您的第一个 Azure Linux 虚拟机
欢迎来到 Azure Terraformer 第一期,我们将深入探讨如何在 Azure 上使用 Terraform 构建强大且可扩展的云解决方案。今天,我们将演示如何为 Azure Linux 虚拟机 (VM) 预配相关资源,例如资源组、公共 IP、网络接口和子网,以及如何从 Azure Key Vault 安全地获取 SSH 公钥。我…...
Linux连接服务器全攻略:从基础到进阶
在Linux系统下连接服务器是开发、运维人员的必备技能。无论是远程管理服务器、传输文件,还是进行开发调试,熟练掌握连接服务器的方法都能大幅提升工作效率。本文将从原理到实操,带你全面掌握Linux连接服务器的多种方式。 一、SSH协议基础 SSH…...
pg库分表操作步骤- PostgreSQL 分区表
原表结构 CREATE TABLE message (id VARCHAR(32) PRIMARY KEY,t_id VARCHAR(32),content TEXT,time TIMESTAMP,user_id VARCHAR(10),receive_user_id VARCHAR(10),type SMALLINT,send_flag SMALLINT,remark VARCHAR(50),receive_time TIMESTAMP );一、主表定义(父表…...
讯飞AI相关sdk集成springboot
星火认知大模型对话:(以spark 4.0 ultra 为例) demo上的功能比较简陋,网络上搜到的比较残缺,很多功能缺失,我这里自己收集资料和运用编程知识做了整理,得到了自己想要的一些功能,比…...
在麒麟系统(Kylin OS)上安装`geckodriver`
在麒麟系统(Kylin OS)上安装geckodriver并配置其通过--connect-existing和--marionette-port 2828参数连接到已存在的Firefox实例,可以按照以下步骤操作: 1. 安装Firefox浏览器 在麒麟系统中,可以通过以下命令安装Fi…...

【图像大模型】Stable Diffusion XL:下一代文本到图像生成模型的技术突破与实践指南
Stable Diffusion XL:下一代文本到图像生成模型的技术突破与实践指南 一、架构设计与技术演进1.1 核心架构革新1.2 关键技术突破1.2.1 双文本编码器融合1.2.2 动态扩散调度 二、系统架构解析2.1 完整生成流程2.2 性能指标对比 三、实战部署指南3.1 环境配置3.2 基础…...
[闲谈]C语言的面向对象
C语言的面向对象 文章目录 C语言的面向对象一、面向对象编程的核心概念1. 封装2. 继承3. 多态 二、C语言实现封装的方法1. 定义结构体封装数据2. 实现成员方法3. 初始化对象4.应用场景5.注意事项 三、模拟继承的两种模式详解1. 组合模式(Composition Pattern&#x…...

C 语言指针之手写内存深度剖析与手写库函数:带你从0开始手撸库 附录1.5 万字实战笔记
一、指针入门:从野指针到空指针 1.1 野指针的第一次暴击:沃日 哪里来的Segmentation Fault ?????? 刚学指针时写过一段让我及其楠甭的代码,我x了xx的,最后才发现是为…...