巴别之塔 - Tower of Babel

Mem0:用三个 prompt 打造 19K 星的网红 AI 项目

在快速发展的人工智能世界中,Mem0 作为一个杰出项目脱颖而出,在 GitHub 上获得了超过 19,000 颗星。这个创新系统旨在通过独特的记忆层设计来增强 AI 持续学习和适应个别用户需求的能力。Mem0 成功的核心在于三个精心设计的提示 (prompt),这些提示驱动了它的功能。

Mem0 的核心概念

Mem0 利用向量数据库和智能提示来帮助 AI 系统记住用户偏好,适应个人需求,并随时间改进。其工作流程包括四个主要步骤:

  1. 记忆提取: 在这个初始步骤中,Mem0 处理新数据,如用户的聊天历史或最近的交互。它使用MEMORY_DEDUCTION_PROMPT来分析这些输入并提取相关记忆。AI 检查用户的输入和任何可用的元数据,然后以简洁的要点格式生成事实、偏好和记忆的列表。

    例如,如果用户在对话中提到喜欢意大利食物并讨厌寒冷天气,Mem0 可能会提取出"喜欢意大利菜"和"偏爱温暖气候"这样的记忆。这一步骤至关重要,因为它将复杂的、非结构化的交互提炼成简单、结构化的记忆点。

  2. 记忆搜索: 一旦提取出记忆,Mem0 将它们转换为嵌入向量 - 捕捉记忆语义含义的高维向量表示。然后使用这些嵌入向量在向量数据库中搜索类似的现有记忆。

    系统使用高效的相似度搜索算法来找到与新记忆在语义上接近的记忆。例如,如果新记忆是关于意大利食物偏好的,它可能会找到关于最喜欢的餐厅或烹饪习惯的现有记忆。这一步骤不使用特定的提示,而是依赖于向量数据库的功能。

  3. 记忆更新: 在识别出类似的现有记忆后,Mem0 使用UPDATE_MEMORY_PROMPT来决定如何将新信息与现有知识库整合。AI 会得到以下信息:

    • 来自数据库的现有记忆
    • 这些记忆与新记忆的相似度分数
    • 新记忆本身

    基于这些信息,AI 会做出如下决策:

    • 将新记忆作为全新条目添加
    • 修改现有记忆以纳入新细节
    • 合并多个相关记忆
    • 删除过时或矛盾的信息

    例如,如果用户之前喜欢披萨但现在提到更喜欢意大利面,Mem0 可能会将现有的"喜欢披萨"记忆更新为"相比披萨更喜欢意大利面"。

  4. 基于记忆的响应: 当用户提出问题或请求信息时,Mem0 首先在其向量数据库中搜索相关记忆。它使用与步骤 2 相同的嵌入和相似度搜索过程,但这次是为了找到与用户查询相关的记忆。

    一旦检索到相关记忆,Mem0 使用MEMORY_ANSWER_PROMPT来生成响应。这个提示指导 AI 以自然和连贯的方式将检索到的记忆融入回答中。

    例如,如果用户询问餐厅推荐,而 Mem0 有关于用户食物偏好和饮食限制的记忆,它可以基于这些信息提供个性化的建议。

这四个步骤协同工作,创建了一个动态系统,能够持续从用户交互中学习,维护最新的知识库,并提供个性化的响应。这个过程使 Mem0 能够适应不断变化的用户偏好并随时间积累知识,使每次交互都更加个性化和具有上下文相关性。

提示分析

让我们深入分析驱动这个系统的三个关键提示,并分析它们的角色。

  1. MEMORY_DEDUCTION_PROMPT

    从提供的文本中推导出事实、偏好和记忆。
    仅以要点形式返回事实、偏好和记忆:
    自然语言文本:{user_input}
    用户/代理详情:{metadata}
    推导事实、偏好和记忆的约束:
    - 事实、偏好和记忆应该简洁明了。
    - 不要以"这个人喜欢披萨"开始。而应该以"喜欢披萨"开始。
    - 不要记住提供的用户/代理详情。只记住事实、偏好和记忆。
    推导出的事实、偏好和记忆:
    

    分析:这个提示对于初始的记忆提取步骤至关重要。它的作用是将原始用户输入转化为结构化的、简洁的记忆点。提示的设计鼓励:

    • 简洁性:通过指示使用要点形式并以动作词开始 (例如,“喜欢披萨"而不是"这个人喜欢披萨”),它确保记忆紧凑且易于处理。
    • 相关性:它明确告诉 AI 专注于事实、偏好和记忆,过滤掉无关信息。
    • 隐私:通过指示不记住用户/代理详情,它有助于维护用户隐私。

    这个提示的有效性在于其能够将复杂的交互提炼成简单、可操作的记忆点,这些记忆点可以轻松存储和检索。

  2. UPDATE_MEMORY_PROMPT

    你是合并、更新和组织记忆的专家。当提供现有记忆和新信息时,你的任务是合并和更新记忆列表,以反映最准确和最新的信息。你还会得到每个现有记忆与新信息的匹配分数。确保利用这些信息做出明智的决定,决定哪些记忆需要更新或合并。
    指南:
    - 消除重复的记忆,合并相关记忆,以确保列表简洁和更新。
    - 如果一个记忆直接与新信息矛盾,请批判性地评估两条信息:
        - 如果新记忆提供了更近期或更准确的更新,用新记忆替换旧记忆。
        - 如果新记忆看起来不准确或细节较少,保留旧记忆并丢弃新记忆。
    - 在所有记忆中保持一致且清晰的风格,确保每个条目简洁而信息丰富。
    - 如果新记忆是现有记忆的变体或扩展,更新现有记忆以反映新信息。
    以下是任务的详细信息:
    - 现有记忆:
    {existing_memories}
    - 新记忆:{memory}
    

    分析:这个提示是 Mem0 维护最新且连贯的记忆数据库能力的基石。它的作用是智能地将新信息与现有记忆合并。关键方面包括:

    • 冲突解决:它提供了明确的指南,说明如何处理矛盾的信息,确保保留最准确和最新的数据。
    • 效率:通过消除重复项和合并相关记忆,它保持记忆数据库紧凑和相关。
    • 一致性:保持一致风格的指示确保记忆数据库保持连贯且易于理解。
    • 适应性:提示允许用新的变体或扩展来更新现有记忆,使系统能够随时间演变其理解。

    这个提示对记忆管理的复杂方法使 Mem0 能够持续学习和适应,而不会积累冗余或过时的信息。

  3. MEMORY_ANSWER_PROMPT

    你是基于提供的记忆回答问题的专家。你的任务是利用记忆中给出的信息,对问题提供准确和简洁的回答。
    指南:
    - 根据问题从记忆中提取相关信息。
    - 如果没有找到相关信息,确保你不要说没有找到信息。相反,接受问题并提供一般性回答。
    - 确保答案清晰、简洁,并直接回答问题。
    以下是任务的详细信息:
    

    分析:这个提示对于 Mem0 有效利用存储的记忆来回应用户查询至关重要。它的作用是指导 AI 制定既相关又用户友好的回答。关键特点包括:

    • 相关性:它指示 AI 只提取与当前问题相关的信息,确保回答集中。
    • 优雅处理未知情况:通过指示 AI 在没有找到相关信息时提供一般性回答,它即使在记忆数据库缺乏特定信息时也能维持流畅的用户体验。
    • 清晰和简洁:强调清晰简洁的答案确保用户容易理解回答。

    这个提示使 Mem0 能够提供个性化、具有上下文感知的回答,大大增强了用户体验,使 AI 看起来更智能和适应性更强。

结论

Mem0 的病毒式成功很大程度上可以归功于这三个精心设计的提示。它们共同创造了一个系统,能够从用户交互中提取有意义的信息,智能地更新和管理记忆数据库,并利用这种个性化知识提供相关且简洁的回答。这种 AI 记忆管理方法代表了创建更具适应性和个性化 AI 系统的重要进步,解释了该项目在开发者和 AI 爱好者中的受欢迎程度。

#VectorDB #RAG