微信扫码
与创始人交个朋友
我要投稿
通过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 os
from mem0 import Memory
os.environ["OPENAI_API_KEY"] = "xxx"
# Initialize Mem0
m = Memory()
# Store a memory from any unstructured text
result = 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 memories
all_memories = m.get_all()
print(all_memories)
# Search memories
related_memories = m.search(query="What are Alice's hobbies?", user_id="alice")
print(related_memories)
# Update a memory
result = m.update(memory_id="m1", data="Likes to play tennis on weekends")
print(result)
# Get memory history
history = 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 可管理信息的存储、检索和优先级排序。
以下是简化的工作流程:
当用户与AI交互时,Mem0会存储来自交互的相关信息。
在后续交互中,Mem0 检索相关的过去信息,为 LLM 提供背景信息。
系统不断更新对最相关信息的理解,以适应用户的需求。
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 os
from openai import OpenAI
from mem0 import Memory
# Set the OpenAI API key
os.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 memories
previous_memories = self.search_memories(question, user_id=user_id)
prompt = question
if previous_memories:
prompt = f"User input: {question}\\n Previous memories: {previous_memories}"
self.messages.append({"role": "user", "content": prompt})
# Generate response using GPT-4o
response = self.client.chat.completions.create(
model="gpt-4o",
messages=self.messages
)
answer = response.choices[0].message.content
self.messages.append({"role": "assistant", "content": answer})
# Store the question in memory
self.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 example
user_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+中大型企业
2024-07-18
2024-05-05
2024-06-20
2024-09-04
2024-05-19
2024-07-09
2024-07-09
2024-07-07
2024-06-13
2024-07-07