AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


15K star!超越RAG,让大模型拥有个性化记忆
发布日期:2024-07-23 11:34:15 浏览次数: 2399



 

通过RAG来增强LLM已经是目前很多的首选,但是最近有一个新的开源项目让大家看到了更好的选择的可能。

今天我们分享一个开源项目,它号称是RAG的下一代技术,让大模型可以拥有个性化的记忆,它就是:mem0



mem0 是什么



Mem0,前身为 EmbedChain, 是一款由 YC 孵化的开源技术,致力于为 AI 代理提供长期记忆能力。Mem0 旨在为大型语言模型 (LLM) 和 AI 代理提供一个记忆层,从而实现真正个性化的 AI 交互。它允许开发者通过集成长期记忆来增强他们的 AI 代理,从而带来更具适应性和个性化的 AI 体验。Mem0也是YC资助的项目。

简单的说,Mem0 为大语言模型提供了一个智能、自我改进的记忆层,实现了跨应用的个性化 AI 体验。

核心功能包括:

  • 多级内存:用户、会话和 AI 代理内存保留

  • 自适应个性化:基于交互的持续改进

  • 开发人员友好型 API:轻松集成到各种应用程序

  • 跨平台一致性:跨设备的统一行为

  • 托管服务:无忧托管解决方案





 在线Demo



Mem0称自己是 RAG 发展的下一个阶段,相比 RAG 的核心区别:关注实体和实体关系;关注最近、最相关的;上下文连续性;适应性学习;动态更新信息。而普通 RAG 只是单纯的从静态的文档中检索信息。

具体来说,Mem0 提供的记忆实现相比 RAG 具有以下优势:

  • 关注实体关系:Mem0 能理解和关联不同交互中的实体,而 RAG 则从静态文档中检索信息。这使得 Mem0 对上下文和关系的理解更深刻。

  • 最近性、相关性和衰减:Mem0 优先考虑最近的交互,并逐渐忘记过时的信息,确保记忆保持相关和最新,以提供更准确的响应。

  • 上下文连续性:Mem0 在多个会话中保留信息,保持对话和交互的连续性,这对于长期参与应用,如虚拟伴侣或个性化学习助手来说至关重要。

  • 自适应学习:Mem0 根据用户交互和反馈改进其个性化,使记忆随着时间的推移更加准确和贴合个人用户。

  • 动态更新信息:Mem0 能够根据新的信息和交互动态更新其记忆,而 RAG 依赖于静态数据。这允许实时调整和改进,提升用户体验。

这些先进的记忆功能使 Mem0 成为开发者创建个性化和上下文感知 AI 应用的强大工具。




安装和使用



Mem0 还提供了开发者友好的 API,安装和使用也很简单。

通过pip安装mem0

pip install mem0ai

基本用法:

import osfrom mem0 import Memory
os.environ["OPENAI_API_KEY"] = "xxx"
# Initialize Mem0m = Memory()
# Store a memory from any unstructured textresult = m.add("I am working on improving my tennis skills. Suggest some online courses.", user_id="alice", metadata={"category": "hobbies"})print(result)# Created memory: Improving her tennis skills. Looking for online suggestions.
# Retrieve memoriesall_memories = m.get_all()print(all_memories)
# Search memoriesrelated_memories = m.search(query="What are Alice's hobbies?", user_id="alice")print(related_memories)
# Update a memoryresult = m.update(memory_id="m1", data="Likes to play tennis on weekends")print(result)
# Get memory historyhistory = m.history(memory_id="m1")print(history)

上述的示例代码展示了如何添加记忆、检索记忆、搜索、更新和获取记忆历史。

注意代码里的metadata, 这里相当于定义了一个schema,让LLM从非结构化数据里提取相关的记忆信息。

高级使用,在面向生成的环境中,可以增加向量数据库比如Qdrant

from mem0 import Memory
config = {"vector_store": {"provider": "qdrant","config": {"host": "localhost","port": 6333,}},}
m = Memory.from_config(config)

 




实现原理



从本质上讲,Mem0 是AI 应用程序和内存存储之间的智能中介。与 LLM 集成后,Mem0 可管理信息的存储、检索和优先级排序。

以下是简化的工作流程:

  1. 当用户与AI交互时,Mem0会存储来自交互的相关信息。

  2. 在后续交互中,Mem0 检索相关的过去信息,为 LLM 提供背景信息。

  3. 系统不断更新对最相关信息的理解,以适应用户的需求。

Mem0 使用先进的矢量存储技术来有效地管理和查询大量数据,确保快速和相关的信息检索。

在源码中可以看到项目包含4个核心模块:embeddings、llms、memory、vector_stores,最重要的就是memory部分,提供对记忆的处理能力。结合前面的快速上手,我们可以看到,mem0的memory部分提供的能力简单点说就是记忆的“增删改查”,具体如下:

Store a MemoryRetrieve MemoriesSearch MemoriesUpdate a MemoryMemory HistoryDelete Memory





参考例子



在mem0的文档中还提供了一些例子来方便大家更好的理解其作用,比如个人AI助理、AI旅行助手、客服AI助手等,都包含说明和 示例的代码。

以下是使用mem0来构建一个只能旅游助手的代码。

import osfrom openai import OpenAIfrom mem0 import Memory
# Set the OpenAI API keyos.environ['OPENAI_API_KEY'] = 'sk-xxx'
class PersonalTravelAssistant:def __init__(self):self.client = OpenAI()self.memory = Memory()self.messages = [{"role": "system", "content": "You are a personal AI Assistant."}]
def ask_question(self, question, user_id):# Fetch previous related memoriesprevious_memories = self.search_memories(question, user_id=user_id)prompt = questionif previous_memories:prompt = f"User input: {question}\\n Previous memories: {previous_memories}"self.messages.append({"role": "user", "content": prompt})
# Generate response using GPT-4oresponse = self.client.chat.completions.create(model="gpt-4o",messages=self.messages)answer = response.choices[0].message.contentself.messages.append({"role": "assistant", "content": answer})
# Store the question in memoryself.memory.add(question, user_id=user_id)return answer
def get_memories(self, user_id):memories = self.memory.get_all(user_id=user_id)return [m['text'] for m in memories]
def search_memories(self, query, user_id):memories = self.memory.search(query, user_id=user_id)return [m['text'] for m in memories]
# Usage exampleuser_id = "traveler_123"ai_assistant = PersonalTravelAssistant()
def main():while True:question = input("Question: ")if question.lower() in ['q', 'exit']:print("Exiting...")break
answer = ai_assistant.ask_question(question, user_id=user_id)print(f"Answer: {answer}")memories = ai_assistant.get_memories(user_id=user_id)print("Memories:")for memory in memories:print(f"- {memory}")print("-----")
if __name__ == "__main__":main()



总结



Mem0 作为一种革命性的AI记忆技术,为构建个性化的AI应用提供了全新的解决方案。Mem0 不仅可以提高AI代理的智能水平,还可以为用户带来更加个性化和人性化的AI体验。相信在不久的将来,Mem0 将会应用到更多的AI应用场景中,为我们带来更加智能和便捷的生活体验。




项目信息



  • 项目名称: mem0

  • GitHub 链接:https://github.com/mem0ai/mem0

  • Star 数:15K


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询