当前位置: 首页 > news >正文

Mem0 + 百度智能云向量数据库:为AI打造持久化记忆

你是否也希望让AI应用更“懂”用户,能够准确记住用户的偏好并随时间不断调整?Mem0 正是为此而生的智能记忆层。实践表明,通过结合百度智能云向量数据库的高效存储与检索能力,可以轻松为用户打造个性化、上下文感知的交互体验。
接下来,本文就将带你快速入门如何使用Mem0和百度智能云向量数据库,完成记忆的添加、检索、更新、搜索、删除与历史追踪等核心步骤,完成基础记忆操作,帮助构建个性化的AI交互。

何为Mem0?

Mem0是一个专为AI应用设计的记忆管理系统,它能够通过保留用户偏好并随时间持续适应,提供个性化和高效的交互体验,例如存储以及检索用户记忆、支持记忆的更新以及版本历史的追踪,非常适合聊天机器人和和个性化推荐等工具或者场景,带来无缝衔接以及上下文感知的体验。

准备工作之下载所需库

pip install mem0ai pymochow

pip install mem0ai pymochow
使用 OpenAI 作为 LLM,需要准备 API 密钥 OPENAI_API_KEY 作为环境变量。

import osos.environ["OPENAI_API_KEY"] = "sk-***********"

配置Mem0使用百度智能云向量数据库

现在可以配置 Mem0 使用百度智能云向量数据库作为向量存储

定义配置

# 定义配置
from mem0 import Memoryconfig = {"vector_store": {"provider": "baidu","config": {"endpoint": "http://your-baidu-vectordb-endpoint","account": "your-account","api_key": "your-api-key","database_name": "mem0_demo","table_name": "quickstart_mem0_with_baidu","embedding_model_dims": 1536,"metric_type": "L2",},}
}m = Memory.from_config(config)

配置说明:

  • endpoint: 百度向量数据库的服务端点
  • account: 您的百度云账户
  • api_key: 百度向量数据库的 API 密钥
  • database_name: 数据库名称
  • table_name: 表名称
  • embedding_model_dims: 向量维度(需与您的嵌入模型匹配)
  • metric_type: 相似度计算方式(支持 COSINE、L2、IP)

使用Mem0和百度智能云向量数据库管理用户记忆

1、添加记忆
add 函数将非结构化文本作为记忆存储在百度向量数据库中,并将其与特定用户和可选元数据关联。在这里添加Alice的记忆"正在努力提高我的网球技能",以及相关的上下文元数据到百度智能云向量数据库。

# 为用户添加记忆:正在努力提高网球技能
res = m.add(messages="我正在努力提高我的网球技能。",user_id="alice",metadata={"category": "hobbies"},
)print(res)
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab','memory': '正在努力提高网球技能','event': 'ADD'}],'relations': []}

2、更新记忆
可以使用 add 函数的返回值来获取记忆 ID,允许通过 update 用新信息更新此记忆。

# 获取 memory_id
memory_id = res["results"][0]["id"]# 用新信息更新此记忆:喜欢在周末打网球
m.update(memory_id=memory_id, data="喜欢在周末打网球")
{'message': 'Memory updated successfully!'}

3、获取用户所有记忆
可以使用 get_all 函数查看百度向量数据库中所有插入的记忆或按 user_id 过滤。注意!这里可以看到记忆现在从"正在努力提高网球技能"更改为"喜欢在周末打网球"。

# 获取用户 Alice 的所有记忆
m.get_all(user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab','memory': '喜欢在周末打网球','hash': '4c3bc9f87b78418f19df6407bc86e006','metadata': None,'created_at': '2024-11-01T19:33:44.116920-07:00','updated_at': '2024-11-01T19:33:47.619857-07:00','user_id': 'alice'}]}

4、查看记忆更新历史
还可以通过 history 函数指定我们感兴趣的 memory_id 来查看记忆更新历史。

m.history(memory_id=memory_id)
[{'id': '71ed3cec-5d9a-4fa6-a009-59802450c0b9','memory_id': '77162018-663b-4dfa-88b1-4f029d6136ab','old_memory': None,'new_memory': '正在努力提高网球技能','event': 'ADD','created_at': '2024-11-01T19:33:44.116920-07:00','updated_at': None},{'id': 'db2b003c-ffb7-42e4-bd8a-b9cf56a02bb9','memory_id': '77162018-663b-4dfa-88b1-4f029d6136ab','old_memory': '正在努力提高网球技能','new_memory': '喜欢在周末打网球','event': 'UPDATE','created_at': '2024-11-01T19:33:44.116920-07:00','updated_at': '2024-11-01T19:33:47.619857-07:00'}]

5、搜索记忆
可以使用 search 函数为用户查找最相关的记忆。可以先为 Alice 添加另一个记忆。

new_mem = m.add("我有一个线性代数期中考试在11月20日",user_id="alice",metadata={"category": "task"},
)

现在调用 get_all 指定 user_id 来验证确实为用户 Alice 有 2 个记忆条目。

m.get_all(user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab','memory': '喜欢在周末打网球','hash': '4c3bc9f87b78418f19df6407bc86e006','metadata': None,'score': 0.8234567,'created_at': '2024-11-01T19:33:44.116920-07:00','updated_at': '2024-11-01T19:33:47.619857-07:00','user_id': 'alice'},{'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02','memory': '有一个线性代数期中考试在11月20日','hash': '575182f46965111ca0a8279c44920ea2','metadata': {'category': 'task'},'score': 0.6543210,'created_at': '2024-11-01T19:33:57.271657-07:00','updated_at': None,'user_id': 'alice'}]}

6、删除记忆
还可以通过提供相应的 memory_iddelete 记忆。将删除记忆"喜欢在周末打网球",因为其 memory_id 已经被检索,并调用 get_all 来验证删除是否成功。

m.delete(memory_id=memory_id)m.get_all(user_id="alice")
{'results': [{'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02','memory': '有一个线性代数期中考试在11月20日','hash': '575182f46965111ca0a8279c44920ea2','metadata': {'category': 'task'},'created_at': '2024-11-01T19:33:57.271657-07:00','updated_at': None,'user_id': 'alice'}]}

Mem0 与百度智能云向量数据库的结合,为开发者提供了一个强大而易用的工具链,用于构建具备长期记忆能力的 AI 应用。无论是智能对话系统还是个性化推荐引擎,都能从中受益。
现在就尝试以上代码,为你下一个 AI 项目注入“记忆”吧!

http://www.dtcms.com/a/391673.html

相关文章:

  • MySQL 数据归档的技术困境与 Databend 解决之道
  • 2025icpc网络赛第一场The 2025 ICPC Asia East Continent Online Contest (I)
  • docker中ngnix的路径配置
  • 什么是黑板架构风格?
  • Redis 三大核心模式(主从复制 / 哨兵 / 集群):完整部署与问题解析
  • Docker生产环境容器OOM问题定位:镜像内存泄漏还是主机资源不足?
  • AcWing385. GF和猫咪的玩具——Floyd算法
  • 75、封装paddle ocr v5服务支持昇腾800 900 、800I A2、300I DUO卡推理识别
  • 【一文了解】线程的使用
  • 电力系统暂态稳定计算与单机无穷大系统建模
  • OmniGen2 - 智源研究院推出的开源多模态生成模型
  • 【故障排查:JDK8中Files.lines方法错误使用导致的Linux服务器文件描述符泄漏问题】
  • 【multisim仿真电子秒表74LS90】2022-12-15
  • v-show 和 v-if 的区别及使用场景
  • 动态二维码杜绝代签,手机端配置同步,巡检数据更可靠
  • 数据库学习MySQL系列6、MySQL入门简单练习使用
  • 交互式生成对抗网络(iGAN)
  • RecSys: 推荐系统重排与多样性优化(MMR以及DPP算法)
  • 瑞芯微MPP音视频框架---mjpeg解码
  • 模型部署:(七)安卓端部署OCR文本识别项目全流程记录
  • 用html5写一个超级计算器
  • 手机实现真随机数生成器
  • 119.计数器产生中断(上升沿)计算方法,比如cnt[21:0],那么assign time = cnt[20]这样大致是多长时间产生一次中断
  • VSCode c/c++头文件函数点击无法跳转问题
  • `mysql_real_connect` 函数全面深度解析
  • 深入解析Yum元数据安全与Artifactory自动化原理
  • 第三章 强化学习助力优化
  • 使用角色和Ansible内容集合简化Playbook
  • 鸿蒙应用集成Push Kit 指南
  • 树莓派ubuntu20.04实现ROS noetic与Arduino通信