Mem0:LLM个性化、陪伴式开源框架

科技之歌 2024-08-16 13:31:04 阅读 82

Mem0上线GitHub仅仅2天就已经达到13K🌟!连续多天霸榜Trending第一!本文就Mem0做个简单介绍,供大家参考。

GitHub - mem0ai/mem0: The memory layer for Personalized AI

📚 Overview - Mem0.ai

Mem0 为大型语言模型提供了一个智能、自我改进的内存层,从而实现跨应用程序的个性化 AI 体验。该项目存储和管理用户特定信息,包括对话历史记录、偏好和元数据,帮助 AI 应用程序提供量身定制的结果。例如,在个性化学习助手中,长期记忆使其能够记住用户偏好、过去的交互和进度,从而提供更加个性化和有效的学习体验。

Mem0 是什么?

Mem0 以前称为 EmbedChain,反映了其在 AI 和机器学习领域的进展。由两位硅谷的印度工程师在2023年创立的,位于山景城,公司目前就两人。Mem0 是为大型语言模型 (LLM) 设计的创新内存层的开源项目,目的是增强各种应用中的个性化 AI 体验,允许 AI 记住用户偏好和先前交互的背景,可使 AI 交互随着时间的推移更具相关性和吸引力,让全球开发者和用户更轻松地使用复杂的 AI 工具。

Mem0 的内存层由包括 GPT-4 在内的复杂算法提供支持,并利用向量数据库等数据结构来高效地存储和检索上下文信息。Mem0 是大型语言模型 (LLM) 的尖端长期记忆解决方案,通过在整个 GenAI 堆栈中实现个性化,允许 LLM 回忆过去的交互并提供随每个用户而变化的定制响应。

主要特征:

自我改进记忆:自适应系统不断从用户交互中学习,随着时间的推移不断完善其理解。跨平台一致性:确保跨各种 AI 平台和应用程序的统一用户体验。集中式内存管理:通过 API 轻松存储和管理个人用户、代理和会话的内存和会话的长期、短期、语义和情景记忆。

Mem0 优点

增强的用户体验:提供个性化的互动,让您的 AI 应用脱颖而出。简化开发:API集成容易上手。可扩展的解决方案:设计用于伴随应用程序一起成长,从原型到可用于生产的系统。Mem0可以显著提升个性化AI的能力。通过记住用户的偏好等用户画像信息,AI产品就可以提供更加个性化服务,有较好的想象空间。传统的用户画像依赖于产研去设计schema,只能挖掘存储设计好的一些特征,而Mem0通过大模型,可以提供schame base和大模型自己挖掘的记忆,提供了一条更通用的方案。

核心功能

1️⃣用户、会话和AI代理内存:跨用户会话、交互和 AI 代理保留信息,确保连续性和上下文。

2️⃣自适应个性化:根据用户交互和反馈不断改进个性化。

3️⃣开发人员友好API:提供简单的 API,可无缝集成到各种应用程序中。

4️⃣平台一致性:确保不同平台和设备上的行为和数据一致。

5️⃣托管服务:提供托管解决方案,以便于部署和维护。

Mem0 与 RAG 有何不同?

Mem0 的大型语言模型 (LLM) 内存实现与检索增强生成 (RAG) 相比具有多项优势:

实体关系:Mem0 可以理解和关联不同交互中的实体,而 RAG 则从静态文档中检索信息。这可以更深入地理解上下文和关系。新近度、相关性和衰减:Mem0 优先考虑最近的交互并逐渐忘记过时的信息,确保记忆保持相关性和最新性,以便做出更准确的响应。情境连续性:Mem0 在会话之间保留信息,保持对话和交互的连续性,这对于虚拟伴侣或个性化学习助手等长期参与应用程序至关重要。自适应学习:Mem0 根据用户交互和反馈提高其个性化,使得记忆更加准确,并随着时间的推移更适合个人用户。动态更新:Mem0 可以使用新信息和交互动态更新其内存,而不像 RAG 那样依赖静态数据。这允许实时调整和改进,从而增强用户体验。

这些先进的内存功能使 Mem0 成为开发人员创建个性化和情境感知 AI 应用程序的强大工具。

应用场景

个性化学习助手:长期记忆使学习助手能够记住用户的偏好、过去的互动和进度,从而提供更加定制化、有效的学习体验。客户支持 AI 代理:通过保留以前交互的信息,客户支持机器人可以提供更准确、更具情境感知的帮助,提高客户满意度并缩短解决时间。医疗助理:长期记忆使医疗助理能够跟踪患者病史、用药时间表和治疗计划,确保个性化和一致的护理。虚拟伴侣:虚拟伴侣可以利用长期记忆,通过记住个人详细信息、偏好和过去的对话来与用户建立更深层次的关系,使互动更有意义。生产力工具:长期记忆可帮助生产力工具记住用户习惯、常用文档和任务历史记录,从而简化工作流程并提高效率。游戏 AI:在游戏中,具有长期记忆的 AI 可以通过记住玩家的选择、策略和进度并相应地调整游戏环境来创造更身临其境的体验。

Mem0 有什么不足?

mem0当前未看到提供一些通用的schema,提供graph base的管理支持用户的memory应该区分短中长期记忆,mem0当前是未区分的,需要有解决方案无法自定义的记忆管理规则尚不支持结合RAG 和用户对话历史,初始化记忆完全依赖LLM,成本较大

快速入门

安装

要安装 Mem0,您可以使用 pip。在终端中运行以下命令:

<code>pip install mem0ai

基本用法

初始化Mem0

基本的

from mem0 import Memory

m = Memory()

进阶版

生产环境中,首先运行 Qdrant:

docker pull qdrant/qdrant

docker run -p 6333:6333 -p 6334:6334 \

-v $(pwd)/qdrant_storage:/qdrant/storage:z \

qdrant/qdrant

然后,使用 qdrant 服务器实例化内存:

from mem0 import Memory

config = {

"vector_store": {

"provider": "qdrant",

"config": {

"host": "localhost",

"port": 6333,

}

},

}

m = Memory.from_config(config)

储存记忆

# For a user

result = m.add("Likes to play cricket on weekends", user_id="alice", metadata={"category": "hobbies"})code>

print(result)

输出:

[

{

'id': 'm1',

'event': 'add',

'data': 'Likes to play cricket on weekends'

}

]

找回记忆

# Get all memories

all_memories = m.get_all()

print(all_memories)

输出:

[

{

'id': 'm1',

'text': 'Likes to play cricket on weekends',

'metadata': {

'data': 'Likes to play cricket on weekends',

'category': 'hobbies'

}

},

# ... other memories ...

]

# Get a single memory by ID

specific_memory = m.get("m1")

print(specific_memory)

输出:

{

'id': 'm1',

'text': 'Likes to play cricket on weekends',

'metadata': {

'data': 'Likes to play cricket on weekends',

'category': 'hobbies'

}

}

搜索记忆

related_memories = m.search(query="What are Alice's hobbies?", user_id="alice")code>

print(related_memories)

输出:

[

{

'id': 'm1',

'text': 'Likes to play cricket on weekends',

'metadata': {

'data': 'Likes to play cricket on weekends',

'category': 'hobbies'

},

'score': 0.85 # Similarity score

},

# ... other related memories ...

]

更新记忆

result = m.update(memory_id="m1", data="Likes to play tennis on weekends")code>

print(result)

输出:

{

'id': 'm1',

'event': 'update',

'data': 'Likes to play tennis on weekends'

}

记忆历史

history = m.history(memory_id="m1")code>

print(history)

输出:

[

{

'id': 'h1',

'memory_id': 'm1',

'prev_value': None,

'new_value': 'Likes to play cricket on weekends',

'event': 'add',

'timestamp': '2024-07-14 10:00:54.466687',

'is_deleted': 0

},

{

'id': 'h2',

'memory_id': 'm1',

'prev_value': 'Likes to play cricket on weekends',

'new_value': 'Likes to play tennis on weekends',

'event': 'update',

'timestamp': '2024-07-14 10:15:17.230943',

'is_deleted': 0

}

]

删除记忆

m.delete(memory_id="m1") # Delete a memorycode>

m.delete_all(user_id="alice") # Delete all memoriescode>

重置内存

m.reset() # Reset all memories

原理分析

结合下面的示例代码,mem0的原理大致如下:

通过LLM+制定的metadata,抽取记忆信息,重点是定制一个合适的prompt来抽取有效信息相关记忆信息通过向量化存储,因此可以支持记忆信息检索记忆支持更新,例如demo里的hobbies更新

具体来说:

通过 MEMORY_DEDUCTION_PROMPT 结合用户的data,抽取记忆,得到extracted_memories然后通过data查询相关的existing_memories然后将extracted_memories、existing_memories 拼接到一起,交予大模型,让大模型调用合适的tool来更新记忆,tools : [ADD_MEMORY_TOOL, UPDATE_MEMORY_TOOL, DELETE_MEMORY_TOOL]根据function call的结果,调用tool_calls更新记忆

本质上全部委托给大模型,通过prompt做了一定的约束

案例demo:AI Agent 助手

使用 Mem0 创建个性化的客服助手 AI Agent。客户支持 AI Agent利用 Mem0 在交互过程中保留信息,从而实现个性化和高效的支持体验。

使用 pip 安装必要的软件包:

pip install openai mem0ai

完整代码示例

以下是使用 Mem0 创建并与客户支持 AI 代理交互的简化代码:

from openai import OpenAI

from mem0 import Memory

# Set the OpenAI API key

os.environ['OPENAI_API_KEY'] = 'sk-xxx'

class CustomerSupportAIAgent:

def __init__(self):

"""

Initialize the CustomerSupportAIAgent with memory configuration and OpenAI client.

"""

config = {

"vector_store": {

"provider": "qdrant",

"config": {

"host": "localhost",

"port": 6333,

}

},

}

self.memory = Memory.from_config(config)

self.client = OpenAI()

self.app_id = "customer-support"

def handle_query(self, query, user_id=None):

"""

Handle a customer query and store the relevant information in memory.

:param query: The customer query to handle.

:param user_id: Optional user ID to associate with the memory.

"""

# Start a streaming chat completion request to the AI

stream = self.client.chat.completions.create(

model="gpt-4",code>

stream=True,

messages=[

{"role": "system", "content": "You are a customer support AI agent."},

{"role": "user", "content": query}

]

)

# Store the query in memory

self.memory.add(query, user_id=user_id, metadata={"app_id": self.app_id})

# Print the response from the AI in real-time

for chunk in stream:

if chunk.choices[0].delta.content is not None:

print(chunk.choices[0].delta.content, end="")code>

def get_memories(self, user_id=None):

"""

Retrieve all memories associated with the given customer ID.

:param user_id: Optional user ID to filter memories.

:return: List of memories.

"""

return self.memory.get_all(user_id=user_id)

# Instantiate the CustomerSupportAIAgent

support_agent = CustomerSupportAIAgent()

# Define a customer ID

customer_id = "jane_doe"

# Handle a customer query

support_agent.handle_query("I need help with my recent order. It hasn't arrived yet.", user_id=customer_id)

唤起记忆

可以使用以下代码获取任意时间点的所有记忆:

memories = support_agent.get_memories(user_id=customer_id)

for m in memories:

print(m['text'])

关键点

初始化:使用必要的内存配置和 OpenAI 客户端设置初始化 CustomerSupportAIAgent 类。处理查询:handle_query 方法向 AI 发送查询并将相关信息存储在内存中。检索记忆:get_memories 方法获取与客户相关的所有存储的记忆。

总结

Mem0 的 LLM 记忆实现方法与检索增强生成 (RAG) 等传统方法相比具有明显优势。与从静态文档中检索信息的 RAG 不同,Mem0 的记忆层可以理解和关联不同交互中的实体,保持上下文连续性并优先考虑相关的最新信息。这种动态更新功能可确保记忆保持最新状态,从而提供针对单个用户交互量身定制的准确响应。

记忆层利用多种类型的记忆,例如语义记忆和情景记忆,来创建一个模仿人类记忆过程的强大系统。这包括从交互中推断用户偏好、巩固记忆和动态更新存储的信息。该系统能够根据持续学习调整和个性化交互,这对于需要长期参与和上下文理解的应用程序特别有价值。

除了 Mem0 之外,其他几个针对大型语言模型 (LLM) 的高级记忆层项目也在通过创新的内存管理增强 AI 功能。 MemoryBank 增强了 LLM 的长期记忆能力,利用艾宾浩斯遗忘曲线的原理来管理记忆的保留和衰退,是有助于AI 伴侣和虚拟助手的打造。vLLM 专注于高吞吐量和内存效率高的推理,具有 PagedAttention 和 OpenAI 兼容 API 等功能,支持各种 Hugging Face 模型。Ret-LLM 引入了一种通用的读写内存结构,并提供了一个用于高效更新和查询的 API。HippoRAG 受到神经生物学过程的启发,对人类的长期记忆功能进行建模,以改进 AI 中基于情境的检索。这些项目将复杂的记忆功能集成到 LLM 中,突破了个性化和情境感知 AI 交互的界限。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。