全部产品
Search
文档中心

云原生数据仓库AnalyticDB:AnalyticDB for MySQL + Mem0 实践指南

更新时间:Mar 13, 2026

Mem0(“mem-zero”)是一个专为 AI 应用设计的智能记忆层。它通过自动化的记忆提取、整合与检索,能够将无状态的 AI Agent 转变为具备上下文感知和持久记忆能力的智能系统。本教程将引导您完成基于 AnalyticDB for MySQL + Mem0 的 Agent Memory 管理实践,内容涵盖记忆的添加、检索、更新、搜索、删除以及历史追溯等核心操作,帮助您快速构建具备长期记忆能力的 AI 应用。

准备工作

在开始之前,请确保您已完成以下准备工作:

  1. 已创建AnalyticDB for MySQL 版集群,并确保其版本支持向量检索功能(如余弦相似度)。具体操作请参见:企业版、基础版及湖仓版快速入门

  2. 获取支持 AnalyticDB for MySQL 的 Mem0 框架版本。

    说明

    请通过钉钉联系阿里云服务支持(钉钉账号:x5v_rm8wqzuqf),获取对应安装包。

  3. 已获取模型服务 API Key,本教程使用阿里云百炼大模型服务平台,请开通服务并获取 API Key,详情请参考文档:获取API Key

操作指南

环境准备

  • 准备 AnalyticDB for MySQL

    1. 在您的 AnalyticDB for MySQL 集群中创建一个用于本教程的数据库。

      CREATE DATABASE mem0;
    2. 如果您计划通过公网连接,请在 AnalyticDB for MySQL 控制台为集群开启公网访问地址,并将您运行 Demo 环境的公网 IP 地址添加到白名单中。

  • 安装 Mem0 及依赖

    1. 检查 Python 环境:确保您的运行环境中已安装 Python。本教程在 Python 3.12.2 版本下验证通过。

      # 使用Mac, 检查Python版本, 如无请至官网安装 https://www.python.org/
      python3 --version
      
      # 使用Linux, 检查Python版本, 如无使用 yum 进行安装, sudo yum install python
      python --version
    2. 安装 Mem0 框架:解压您获取的 Mem0 框架文件,并安装必要的依赖库。

      # 解压并安装
      unzip mem0.zip 
      cd mem0
      pip install .
      pip install pymysql dbutils

配置并初始化

  • 配置环境变量:

    为了安全起见,建议将大模型的 API Key 配置为环境变量。

    echo "export DASHSCOPE_API_KEY='<YOUR_DASHSCOPE_API_KEY>'" >> ~/.bashrc
    # 可选,默认为新加坡
    echo "export DASHSCOPE_BASE_URL='https://dashscope-intl.aliyuncs.com/compatible-mode/v1'" >> ~/.bashrc   
    
    source ~/.bashrc
    
    #检查是否生效
    echo $DASHSCOPE_API_KEY
    echo $DASHSCOPE_BASE_URL  
  • 初始化 Mem0 实例:

    在您的 Python 脚本中,配置并初始化一个 Memory 实例。

    • LLM 配置:使用阿里云百炼的 qwen-plus 模型。

    • Embedder 配置:使用阿里云百炼的 text-embedding-v4 模型,向量维度为 1536。

    • Vector Store 配置:使用 aliyun_adb,并填入您的 AnalyticDB for MySQL 连接信息。

    from mem0 import Memory
    
    # This example must connect to an adb instance with 1536 vector dimensions specified.
    config = {
        "llm": {
            "provider": "bailian",
            "config": {"model": "qwen-plus"},
        },
        "embedder": {
            "provider": "bailian",
            "config": {"model": "text-embedding-v4", "embedding_dims": 1536},
        },
        "vector_store": {
            "provider": "aliyun_adb",
            "config": {
                "host": "<adb host>",
                "port": 3306,
                "database": "mem0",
                "user": "<your user name>",
                "password": "<your password>",
                "collection_name": "adb_mem0_demo"
            }
        }
    }
    
    
    """
    Suppose we have two users, Mike and Julia
    1、Mike is a vegetarian, who likes fruit and playing basketball
    2、Julia is a carnivore, who likes steak and playing badminton
    """
    
    m = Memory.from_config(config_dict=config)

核心记忆操作演示

  • 添加与获取记忆:

    使用 m.add() 方法为用户添加记忆,m.get_all() 方法获取用户的全部记忆。

    • 代码

      # add memorys for Mike
      result = m.add("I'm a vegetarian", user_id="Mike")
      memory_id = result["results"][0]["id"] ,
      print("add a memory for Mike:" + "I'm a vegetarian" + ", result => ", result , "\n")
      
      
      result = m.add("I like durian", user_id="Mike")
      print("add a memory for Mike:" + "I like durian" + ", result => " , result , "\n")
      
      # Get all memories for a user
      result = m.get_all(user_id="Mike")
      print("Get all memories for a user:" + "Mike" + ", result => " , result , "\n")
    • 结果分析
      返回的结果是一个列表,包含了 Mike 的两条记忆及其元数据,如 ID、内容、创建时间等。

      add a memory for Mike:I'm a vegetarian, result =>  {'results': [{'id': '32ac2932-10da-422b-beba-bb5a2b4666aa', 'memory': "I'm a vegetarian", 'event': 'ADD'}]} 
      
      add a memory for Mike:I like durian, result =>  {'results': [{'id': '40098c00-9f96-4486-af8b-5c79612fea10', 'memory': 'I like durian', 'event': 'ADD'}]} 
      
      Get all memories for a user:Mike, result =>  {'results': [{'id': '40098c00-9f96-4486-af8b-5c79612fea10', 'memory': 'I like durian', 'hash': 'dfd43e3d0a6ddc82cda440e0a1d39e7f', 'metadata': None, 'created_at': '2025-10-29T20:52:54.156926-07:00', 'updated_at': None, 'user_id': 'Mike'}, {'id': '32ac2932-10da-422b-beba-bb5a2b4666aa', 'memory': "I'm a vegetarian", 'hash': '27f3478f622dd27dd71969f131bd886f', 'metadata': None, 'created_at': '2025-10-29T20:52:51.126628-07:00', 'updated_at': None, 'user_id': 'Mike'}]} 
  • 更新与删除记忆:

    Mem0 支持通过记忆 ID 手动删除,或在添加新记忆时自动处理冲突。

    • 代码

      result = m.delete(memory_id=memory_id)
      print("Manual Delete a memory:" + "I like durian" + ", result => " , result , "\n")
      
      result = m.add("I hate things that taste like durian", user_id="Mike")
      print("Automatic Delete a contradictory historical memory for Mike:" + "I like durian" + ", result => " , result , "\n")
      
      # Get all memories for a user
      result = m.get_all(user_id="Mike")
      print("Get all memories for a user:" + "Mike" + ", result => " , result , "\n")
    • 结果分析

      Manual Delete a memory:I like durian, result =>  {'message': 'Memory deleted successfully!'} 
      
      Automatic Delete a contradictory historical memory for Mike:I like durian, result =>  {'results': [{'id': 'dc308443-ae8c-4cb3-851f-060adfc39eaf', 'memory': 'I like durian', 'event': 'DELETE'}]} 
      
      Get all memories for a user:Mike, result =>  {'results': []} 
      • 添加冲突记忆后,add 方法的返回结果会包含一个 DELETE 事件,表明旧的、冲突的记忆(“I like durian”)已被自动移除。

      • 再次调用 get_all 时,会发现旧的记忆已不复存在,体现了 Mem0 的自适应与自洽能力。

  • 检索与搜索记忆:

    Mem0 支持通过元数据进行精确过滤检索,以及通过语义进行相似性搜索。

    1. 准备数据:为 Mike 和 Julia 添加带有 agent_id 和 metadata 的记忆。

      • 代码

        # Mike Memory
        result = m.add("I'm a vegetarian", user_id="Mike", agent_id="diet-assistant")
        print("add a memory for Mike:" + "I'm a vegetarian" + ", result => ", result , "\n")
        
        result = m.add("I like durian, watermelon and strawberries", user_id="Mike", metadata={"category": "hobbies"})
        print("add a memory for Mike with meta:" + "I like durian, watermelon and strawberries" + ", result => " , result , "\n")
        
        result = m.add("I like playing basketball", user_id="Mike", agent_id="fitness-assistant")
        print("add a memory for Mike:" + "I like playing basketball" + ", result => " , result , "\n")
        
        
        # Julia Memory
        result = m.add("I'm a carnivore", user_id="Julia", agent_id="diet-assistant")
        print("add a memory for Julia:" + "I'm a carnivore" + ", result => " , result , "\n")
        
        result = m.add("I like steak", user_id="Julia", metadata={"category": "hobbies"})
        print("add a memory for Julia:" + "I like steak" + ", result => " , result , "\n")
        
        result = m.add("I like playing badminton", user_id="Julia", agent_id="fitness-assistant")
        print("add a memory for Julia:" + "I like playing badminton" + ", result => " , result , "\n")
        
      • 结果分析

        add a memory for Mike:I'm a vegetarian, result =>  {'results': [{'id': 'a0fadb7e-c6b7-46b2-b0b8-6b036d879015', 'memory': "I'm a vegetarian", 'event': 'ADD'}]} 
        
        add a memory for Mike with meta:I like durian, watermelon and strawberries, result =>  {'results': [{'id': 'efec6c25-c2a7-454f-8344-367018c5b607', 'memory': 'I like durian, watermelon and strawberries', 'event': 'ADD'}]} 
        
        add a memory for Mike:I like playing basketball, result =>  {'results': [{'id': '75da451c-dbf7-45aa-b9ab-72aab54df7b8', 'memory': 'I like playing basketball', 'event': 'ADD'}]} 
        
        add a memory for Julia:I'm a carnivore, result =>  {'results': [{'id': '93a03639-195e-40ef-9f5f-55d366b76333', 'memory': "I'm a carnivore", 'event': 'ADD'}]} 
        
        add a memory for Julia:I like steak, result =>  {'results': [{'id': 'e30faceb-ba71-4b27-b052-28863f26abf9', 'memory': 'I like steak', 'event': 'ADD'}]} 
        
        add a memory for Julia:I like playing badminton, result =>  {'results': [{'id': '90d45867-b198-415f-99e8-7375b4c6c35b', 'memory': 'I like playing badminton', 'event': 'ADD'}]} 
    2. 精确过滤检索:使用 get_all 方法并传入过滤条件。

      • 代码

        # Get all memories for a specific agent belonging to a user
        result = m.get_all(user_id="Mike", agent_id="fitness-assistant")
        print("Get all memories for a specific agent belonging to a user:" + "Mike" + ", result => " , result , "\n")
        
        
        # Get all memories belonging to a user with filter
        result = m.get_all(user_id="Julia", filters={"category": "hobbies"})
        print("Get all memories belonging to a user with filter:" + "Julia" + ", result => " , result , "\n")
      • 结果分析

        Get all memories for a specific agent belonging to a user:Mike, result =>  {'results': [{'id': '75da451c-dbf7-45aa-b9ab-72aab54df7b8', 'memory': 'I like playing basketball', 'hash': '000b24fa8e8f76134286d2c4626c036d', 'metadata': None, 'created_at': '2025-10-30T00:13:08.390949-07:00', 'updated_at': None, 'user_id': 'Mike', 'agent_id': 'fitness-assistant'}]} 
        
        Get all memories belonging to a user with filter:Julia, result =>  {'results': [{'id': 'e30faceb-ba71-4b27-b052-28863f26abf9', 'memory': 'I like steak', 'hash': '6e7129fc2010e93e94c943dbf6f69246', 'metadata': {'category': 'hobbies'}, 'created_at': '2025-10-30T00:13:14.631531-07:00', 'updated_at': None, 'user_id': 'Julia'}]} 
    3. 相似性搜索:使用 search 方法进行语义搜索。返回结果按相似度得分(score)降序排列。

      • 代码

        # Search memories for a user
        result = m.search("Who likes playing badminton better", agent_id="fitness-assistant")
        print("Search memories:" + "Who likes playing badminton better" + ", result => " , result , "\n")
        
        # Search memories for a specific agent belonging to a user
        result = m.search("Who will celebrate on International Vegetarian Day", agent_id="diet-assistant")
        print("Search memories:" + "Who will celebrate on International Vegetarian Day" + ", result => " , result , "\n")
        
        # Search memories for a user
        result = m.search("what kind of fruit do you like", user_id="Mike")
        print("Search memories:" + "what kind of fruit do you like." + ", result => " , result , "\n")
        
        # Search memories for a user
        result = m.search("what sport do you like", user_id="Julia", agent_id="fitness-assistant")
        print("Search memories:" + "what sport do you like." + ", result => " , result , "\n")
        
      • 结果分析

        Search memories:Who likes playing badminton better, result =>  {'results': [{'id': '90d45867-b198-415f-99e8-7375b4c6c35b', 'memory': 'I like playing badminton', 'hash': '304d03421834255d1650b46877b3785b', 'metadata': None, 'score': 0.82532454, 'created_at': '2025-10-30T00:13:18.218251-07:00', 'updated_at': None, 'user_id': 'Julia', 'agent_id': 'fitness-assistant'}, {'id': '75da451c-dbf7-45aa-b9ab-72aab54df7b8', 'memory': 'I like playing basketball', 'hash': '000b24fa8e8f76134286d2c4626c036d', 'metadata': None, 'score': 0.56634325, 'created_at': '2025-10-30T00:13:08.390949-07:00', 'updated_at': None, 'user_id': 'Mike', 'agent_id': 'fitness-assistant'}]} 
        
        Search memories:Who will celebrate on International Vegetarian Day, result =>  {'results': [{'id': 'a0fadb7e-c6b7-46b2-b0b8-6b036d879015', 'memory': "I'm a vegetarian", 'hash': '27f3478f622dd27dd71969f131bd886f', 'metadata': None, 'score': 0.5640734, 'created_at': '2025-10-30T00:13:01.011810-07:00', 'updated_at': None, 'user_id': 'Mike', 'agent_id': 'diet-assistant'}, {'id': '93a03639-195e-40ef-9f5f-55d366b76333', 'memory': "I'm a carnivore", 'hash': '5f81d3e6f06baba2e10ec6c155d012e3', 'metadata': None, 'score': 0.41749594, 'created_at': '2025-10-30T00:13:11.462159-07:00', 'updated_at': None, 'user_id': 'Julia', 'agent_id': 'diet-assistant'}]} 
        
        Search memories:what kind of fruit do you like., result =>  {'results': [{'id': 'efec6c25-c2a7-454f-8344-367018c5b607', 'memory': 'I like durian, watermelon and strawberries', 'hash': '07cc049e2beaa043bb359b50a33664ac', 'metadata': {'category': 'hobbies'}, 'score': 0.6519712, 'created_at': '2025-10-30T00:13:04.981195-07:00', 'updated_at': None, 'user_id': 'Mike'}, {'id': '75da451c-dbf7-45aa-b9ab-72aab54df7b8', 'memory': 'I like playing basketball', 'hash': '000b24fa8e8f76134286d2c4626c036d', 'metadata': None, 'score': 0.3975049, 'created_at': '2025-10-30T00:13:08.390949-07:00', 'updated_at': None, 'user_id': 'Mike', 'agent_id': 'fitness-assistant'}, {'id': 'a0fadb7e-c6b7-46b2-b0b8-6b036d879015', 'memory': "I'm a vegetarian", 'hash': '27f3478f622dd27dd71969f131bd886f', 'metadata': None, 'score': 0.3382097, 'created_at': '2025-10-30T00:13:01.011810-07:00', 'updated_at': None, 'user_id': 'Mike', 'agent_id': 'diet-assistant'}]} 
        
        Search memories:what sport do you like., result =>  {'results': [{'id': '90d45867-b198-415f-99e8-7375b4c6c35b', 'memory': 'I like playing badminton', 'hash': '304d03421834255d1650b46877b3785b', 'metadata': None, 'score': 0.61615115, 'created_at': '2025-10-30T00:13:18.218251-07:00', 'updated_at': None, 'user_id': 'Julia', 'agent_id': 'fitness-assistant'}]} 
        • 搜索羽毛球:agent_id 过滤了非运动相关的记忆,结果中“I like playing badminton”的得分最高,排在首位。

        • 搜索素食日:agent_id 过滤了非饮食相关的记忆,结果中“I'm a vegetarian”的得分最高,排在首位。

        • 搜索 Mike 的水果偏好:user_id 过滤了 Julia 的记忆,结果中“I like durian, watermelon and strawberries”得分最高。

        • 搜索 Julia 的运动偏好:user_id 和 agent_id 双重过滤,精确地返回了“I like playing badminton”。

  • 清理记忆:

    使用 delete_all 方法可以清空指定用户或 Agent 的所有记忆。

    • 代码

      # Delete all memories for a specific agent belonging to a user
      m.delete_all(user_id="Julia")
      result = m.get_all(user_id="Julia")
      print(result)
      
      # Delete all memories for a user
      m.delete_all(user_id="Mike")
      result = m.get_all(user_id="Mike")
      print(result)
    • 结果分析

      Resetting collection mem0_adb_demo...
      {'results': []}
      Resetting collection mem0_adb_demo...
      {'results': []}

总结

通过本教程,我们演示了如何结合使用 Mem0 和 AnalyticDB for MySQL,轻松实现 AI Agent 记忆的增、删、改、查等一系列智能化管理操作。这套组合为构建能够进行长期、连贯对话,并具备个性化服务能力的复杂 AI 应用,提供了强大、可靠且易于扩展的基础。


附录:完整示例代码

为了方便您快速体验,以下是整合了所有步骤的完整 Python 脚本。请将其中的占位符(如 <YOUR_ADB_HOST> 等)替换为您的实际配置。

from mem0 import Memory

# This example must connect to an adb instance with 1536 vector dimensions specified.
config = {
    "llm": {
        "provider": "bailian",
        "config": {"model": "qwen-plus"},
    },
    "embedder": {
        "provider": "bailian",
        "config": {"model": "text-embedding-v4", "embedding_dims": 1536},
    },
    "vector_store": {
        "provider": "aliyun_adb",
        "config": {
            "host": "<adb host>",
            "port": 3306,
            "database": "mem0",
            "user": "<your user name>",
            "password": "<your passward>",
            "collection_name": "adb_mem0_demo"
        }
    }
}

"""
Suppose we have two users, Mike and Julia
1、Mike is a vegetarian, who likes fruit and playing basketball
2、Julia is a carnivore, who likes steak and playing badminton
"""

m = Memory.from_config(config_dict=config)

# add memory for mike
result = m.add("I'm a vegetarian", user_id="Mike")
memory_id = result["results"][0]["id"]
print("add a memory for Mike:" + "I'm a vegetarian" + ", result => ", result , "\n")


result = m.add("I like durian", user_id="Mike")
print("add a memory for Mike:" + "I like durian" + ", result => " , result , "\n")

# Get all memories for a user
result = m.get_all(user_id="Mike")
print("Get all memories for a user:" + "Mike" + ", result => " , result , "\n")

result = m.delete(memory_id=memory_id)
print("Manual Delete a memory:" + "I like durian" + ", result => " , result , "\n")

result = m.add("I hate things that taste like durian", user_id="Mike")
print("Automatic Delete a contradictory historical memory for Mike:" + "I like durian" + ", result => " , result , "\n")

# Get all memories for a user
result = m.get_all(user_id="Mike")
print("Get all memories for a user:" + "Mike" + ", result => " , result , "\n")

# Mike Memory
result = m.add("I'm a vegetarian", user_id="Mike", agent_id="diet-assistant")
print("add a memory for Mike:" + "I'm a vegetarian" + ", result => ", result , "\n")

result = m.add("I like durian, watermelon and strawberries", user_id="Mike", metadata={"category": "hobbies"})
print("add a memory for Mike with meta:" + "I like durian, watermelon and strawberries" + ", result => " , result , "\n")

result = m.add("I like playing basketball", user_id="Mike", agent_id="fitness-assistant")
print("add a memory for Mike:" + "I like playing basketball" + ", result => " , result , "\n")


# Julia Memory
result = m.add("I'm a carnivore", user_id="Julia", agent_id="diet-assistant")
print("add a memory for Julia:" + "I'm a carnivore" + ", result => " , result , "\n")

result = m.add("I like steak", user_id="Julia", metadata={"category": "hobbies"})
print("add a memory for Julia:" + "I like steak" + ", result => " , result , "\n")

result = m.add("I like playing badminton", user_id="Julia", agent_id="fitness-assistant")
print("add a memory for Julia:" + "I like playing badminton" + ", result => " , result , "\n")


# Get all memories for a specific agent belonging to a user
result = m.get_all(user_id="Mike", agent_id="fitness-assistant")
print("Get all memories for a specific agent belonging to a user:" + "Mike" + ", result => " , result , "\n")


# Get all memories belonging to a user with filter
result = m.get_all(user_id="Julia", filters={"category": "hobbies"})
print("Get all memories belonging to a user with filter:" + "Julia" + ", result => " , result , "\n")


# Search memories for a user
result = m.search("Who likes playing badminton better", agent_id="fitness-assistant")
print("Search memories:" + "Who likes playing badminton better" + ", result => " , result , "\n")

# Search memories for a specific agent belonging to a user
result = m.search("Who will celebrate on International Vegetarian Day", agent_id="diet-assistant")
print("Search memories:" + "Who will celebrate on International Vegetarian Day" + ", result => " , result , "\n")

# Search memories for a user
result = m.search("what kind of fruit do you like", user_id="Mike")
print("Search memories:" + "what kind of fruit do you like." + ", result => " , result , "\n")

# Search memories for a user
result = m.search("what sport do you like", user_id="Julia", agent_id="fitness-assistant")
print("Search memories:" + "what sport do you like." + ", result => " , result , "\n")

# Delete all memories for a specific agent belonging to a user
m.delete_all(user_id="Julia")
result = m.get_all(user_id="Julia")
print(result)

# Delete all memories for a user
m.delete_all(user_id="Mike")
result = m.get_all(user_id="Mike")
print(result)