当LangGraph遇上Mem0:如何让你的AI Agent具有更智能的记忆与个性化的体验?

AI Agent(智能体)的记忆(Memory)被认为是一项必备的基础能力,它用来提取、存储会话中的重要信息并用于后续的检索与使用。可以把记忆简单地分成短期记忆与长期记忆两种,用来“记住”不同类型的信息:

在这里插入图片描述

短期记忆通常用来缓存一次会话过程的上下文与推理过程;而长期记忆则为AI 智能体提供了持久的重要信息存储与快速检索能力。

目前无论是LangChain/LlamaIndex这样的底层LLM框架,还是一些低代码平台,在短期记忆能力上都有相对完善的解决方案;但在长期记忆能力的实现上则相对不足,特别是更智能的个性化记忆能力

本文介绍一种广受欢迎的AI记忆开源解决方案:Mem0(Mem0背后公司的一款基于Mem0的AI聊天应用获得了OpenAI的投资):

1. AI应用需要怎样的长期记忆
2. Mem0是怎么工作的
3. 用LangGraph+Mem0实现个性化Agent体验

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费

一、AI应用需要怎样的长期记忆

很多时候,我们希望AI应用能够提供一种更个性化的人工智能体验:随着时间的推移,AI能够记住每个使用者的一些独特信息,比如个人资料、专业细节、偏好、个人计划、习惯等,并能够在未来的交互中轻松地检索到这些信息,用来实现更针对性与个性化的AI体验。比如:

  • 个性化的AI学习。记住不同学员的特点与习惯以提供针对性的教学过程。

  • 个性化的AI客户服务。 根据客户的历史交互与信息提供更智能的服务体验。

  • 个性化的AI个人助理。 根据个人偏好与习惯提供更有吸引力的推荐与帮助。

  • 个性化的AI医疗咨询。根据咨询者的信息、病史、用药等做更精准的诊断。

注意这些信息需要在跨越多用户、多次会话、甚至多个AI应用时保留与检索。

除此之外,参考人类的记忆习惯,我们还希望AI的长期记忆能够:

  • 智能记忆: 并非简单对话历史的存储,而是智能的理解、提取与记住重要信息与相关事实。

比如:从一次旅游规划对话中识别客户偏好的酒店类型、出行习惯。

  • 自适应学习: 随着用户的不断使用与交互,能够持续提高个性化信息的丰富性与准确性。

比如:在多次对话中不断完善对客户信息与画像的了解。

  • 动态更新: 根据新的交互信息动态更新记忆内容。

比如:在对话中识别出使用者的工作发生了变化,需要更新之前的记忆。

  • 更准确的检索与响应: 优先考虑最近最相关的记忆信息,及时忘记过时信息,以提供更准确的个性化上下文。

比如:回忆最近一段时间的客户用餐爱好,并做针对性推荐。

以上这些能力要求,也正是Mem0已经具备的核心特性。

二、Mem0是怎么工作的?

简单地说,Mem0就是为基于LLM的AI应用而设计的独立记忆层。通过它可以帮助AI应用实现跨应用持久、智能、自适应与动态的长期记忆与回忆能力,以用来实现真正的个性化AI体验。

Mem0的主要构成与工作方式用下图表示:

在这里插入图片描述

  • Mem0提供了简单的记忆管理API用来集成到你自己的AI应用

  • Mem0借助LLM与嵌入模型来智能的生成与更新记忆,并实现语义检索

  • Mem0的后端需借助向量数据库或者图数据库来组织、存储与检索记忆

以Mem0简单的增加记忆(add方法)为例,其核心处理过程大致为:

在这里插入图片描述

可以看到,Mem0借助了LLM来实现对记忆事实的提取,并能够根据新的交互信息来动态更新历史记忆,以保留最新的个性化记忆,并遗忘无用的记忆。由于借助了LLM,因此提示词就显得非常重要。如果你需要定制自己的记忆提取的提示词,可以在创建Memory对象时,设置custom_prompt参数。

三、用LangGraph+Mem0创建个性化体验的AI Agent

现在,让我们来创建一个具有个性化记忆能力的AI Agent,相对LangChain框架中的记忆组件,Mem0提供了更强大与智能的另外一种选项。

这里仍然用之前我们演示使用的智能体:一个带有网络搜索功能的简单对话机器人。 但这次我们增加了长期记忆选项,用来实现跨多次会话、多用户甚至多Agent的个性化交互能力。工作流程如下:

【创建记忆】

创建一个Mem0的Memory对象,向量数据库使用嵌入式的Chroma,LLM使用OpenAI的gpt-4o-mini模型(OpenAI的Key在环境变量配置):

from mem0 import Memory  
from typing import Annotated, TypedDict, List  
from langgraph.graph import StateGraph, START, END  
from langgraph.graph.message import add_messages  
from langchain_openai import ChatOpenAI  
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage  
from langchain_community.tools.tavily_search import TavilySearchResults  
from langgraph.prebuilt import ToolNode  
  
#个性化长期记忆,采用chrona向量库存储  
mem0 = Memory.from_config({  
    "version":"v1.1",  
    "llm": {  
        "provider": "openai",  
        "config": {  
            "model": "gpt-4o-mini"  
        }    },  
    "vector_store": {  
        "provider": "chroma",  
        "config": {  
            "collection_name": "chat_memory",  
            "path": "./db",  
        }  
    }  
})

【创建LangGraph工作流与Agent】

定义LangGraph中的节点行为,最后创建工作流,并添加节点与边。这里针对Mem0的主要修改集中在chatbot这个节点方法中。简单解释如下:

  • 为了区分不同用户的记忆,会在state中保留一个mem0_user_id。在添加记忆或者检索记忆时都需要携带这个user_id。(在实际应用中,这个id很可能是你的某个客户ID)

  • 在chatbot回复之前,先根据输入消息内容检索关联的个性化记忆(search),并把检索到的记忆组装成System Message。(这是一个常见的优化点,即如何检索出更相关的记忆,可以参考RAG优化中的一些方法)

  • System Message与用户消息一起作为上下文输入给LLM,从而在生成响应时,大模型能够根据个性化的记忆作出响应。

  • 在本轮交互结束后,调用add接口将该用户的本次对话信息添加到记忆中。Mem0会自动识别和合并,以用于下次检索。

#定义LangGraph的State  
class State(TypedDict):  
    messages: Annotated[List[HumanMessage | AIMessage], add_messages]  
    mem0_user_id: str  
  
# 调用搜索引擎的工具节点,利用ToolNode构建  
tools = [TavilySearchResults(max_results=1)]  
tool_node = ToolNode(tools)  
  
#定义chatbot节点  
def chatbot(state: State):  
    messages = state["messages"]  
    user_id = state["mem0_user_id"]  
  
    # 取出关联的个性化记忆,并组装成context,放在system message中  
    memories = mem0.search(messages[-1].content, user_id = user_id)["results"]  
    context = "历史对话中的相关信息有:\n"  
    for memory in memories:  
        context += f"- {memory['memory']}\n"  
    system_message = SystemMessage(content=f"你是一个乐于助人的客户支持助手。利用所提供的上下文来个性化你的回复,并会记住用户的偏好和过去的交互。\n{context}")  
  
    # 组装消息,并调用LLM(注意绑定tools)  
    full_messages = [system_message] + messages  
    llm = ChatOpenAI(model="gpt-4o-mini") .bind_tools(tools)  
    response = llm.invoke(full_messages)  
  
    # 记住本地对话的信息  
    mem0.add(f"User: {messages[-1].content}\nAssistant: {response.content}", user_id=user_id)  
    return {"messages": [response]}  
  
# 一个辅助方法:判断是否需要调用工具  
def should_continue(state):  
    messages = state["messages"]  
    last_message = messages[-1]  
  
    #根据大模型的反馈来决定是结束,还是调用工具  
    if not last_message.tool_calls:  
        return "end"  
    else:  
        return "continue"  
  
# 定义一个graph  
workflow = StateGraph(State)  
workflow.add_node("llm", chatbot)  
workflow.add_node("search", tool_node)  
workflow.set_entry_point("llm")  
  
# 一个条件边,即从agent出来的两个分支及条件  
workflow.add_conditional_edges(  
    "llm",  
    should_continue,  
    {  
        "continue": "search",  
        "end": END,  
    },  
)  
  
# action调用后返回agent  
workflow.add_edge("search", "llm")  
graph = workflow.compile()

【测试Agent的记忆能力】

准备如下的简单测试代码:

if __name__ == "__main__":  
    print("AI: 你好!有什么可以帮助你?")  
    mem0_user_id = "testuser"  # You can generate or retrieve this based on your user management system  
    while True:  
        user_input = input("输入: ")  
        if user_input.lower() in ['quit', 'exit', 'bye']:  
            break  
  
        config = {"configurable": {"thread_id": mem0_user_id}}  
        state = {"messages": [HumanMessage(content=user_input)], "mem0_user_id": mem0_user_id}  
  
        response = graph.invoke(state,config)  
        print("AI: ",response["messages"][-1].content)

我们首先做一些简单的交互对话,试图让Agent产生一些“记忆”:

这里的会话中传递了一些个性化的信息:最近爱看足球、不喜欢坐飞机、对历史文化名城感兴趣等。

现在让我们退出,然后重新启动应用,并开始新的对话:

可以看到,AI知道你最近对足球比赛感兴趣,并进行了推荐。继续上面的对话:

没错,AI也了解你对历史文化名城感兴趣,所以做了更贴心更针对性的规划。

注意,这里Agent的记忆是和user_id相关的(测试代码中为testuser),如果你更换这个user_id,那么将不会获得之前testuser的记忆信息,而会重新开始创建新的用户记忆。

四、小结

借助Mem0你可以快速地给自己的AI应用与智能体添加额外的持久记忆体,以记住用户偏好、曾经的互动、任务的进度等,从而构建自适应的学习与记忆能力,实现完全个性化的AI应用体验。这在个人助理、客户服务、智能咨询、企业生产力应用等领域都可以有广泛的应用。


五、最后分享

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 2024行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

在这里插入图片描述

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值