0


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

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 回忆过去的交互并提供随每个用户而变化的定制响应。

主要特征:

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

Mem0 优点

  1. 增强的用户体验:提供个性化的互动,让您的 AI 应用脱颖而出。
  2. 简化开发:API集成容易上手。
  3. 可扩展的解决方案:设计用于伴随应用程序一起成长,从原型到可用于生产的系统。
  4. 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。在终端中运行以下命令:

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"})
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")
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")
print(result)

输出:

{
  'id': 'm1',
  'event': 'update',
  'data': 'Likes to play tennis on weekends'
}
记忆历史
history = m.history(memory_id="m1")
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 memory

m.delete_all(user_id="alice") # Delete all memories
重置内存
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",
            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="")

    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 交互的界限。


本文转载自: https://blog.csdn.net/kunpengtingting/article/details/140652143
版权归原作者 科技之歌 所有, 如有侵权,请联系我们删除。

“Mem0:LLM个性化、陪伴式开源框架”的评论:

还没有评论