背景介绍
在之前的软件应用中,我们总会在应用中保留大量的用户历史操作记录,方便用户下次使用时可以快速查看和复用,甚至基于这些用户记录可以为用户提供个性化的服务。而这些记录往往都保存在传统的结构化或非结构化数据库中。
在大模型的应用,特别是助手类的大模型应用中,我们往往需要处理大量语义化的文本或多模态的信息,方便后续快速匹配,从而提供个性化的服务。为了支持这种语义检索的需求,往往会将数据保存至向量数据库中。
向量数据库执行语义检索相对方便,但是包含语义内容的文本管理比较困难,特别是涉及到相关内容的更新和替换。在这种背景下,Mem0 应运而生。Mem0 可以给大模型应用提供智能记忆层,可以记住用户偏好,适应个人需求,并随着时间的推移不断改进,从而方便应用提供更加个性化的体验和服务。
从开源依赖,Github 上的 star 数量一路飙升,截止目前已经 20.6k 的 star 了。
上手体验
Mem0 提供了两种接入方案,一种是使用官方的托管平台,另一种是使用官方提供的 python 依赖包 mem0ai执行。下面以本地依赖包形式了解下 Mem0 的使用。
依赖配置
首先需要通过 pip 安装所需的依赖包:
pip install mem0ai
Mem0 需要依赖大模型才能执行,默认使用的 gpt-4o
, 因此需要配置对应的 ChatGPT API 秘钥,需要将秘钥配置至环境变量中:
import os
os.environ["OPENAI_API_KEY"] = "sk-xxx"
动手实践
Mem0 实际使用在大模型应用中,我们主要关注下面的能力:
- 针对特定用户添加非结构化的文本信息;
- 特定用户根据查询问题进行文本检索;
针对上面的关注的能力,使用 Mem0 可以简单满足需求:
from mem0 import Memory
# 初始化记忆对象
m = Memory()
# 1. 针对特定用户添加非结构化的文本信息
result = m.add("I am working on improving my tennis skills. Suggest some online courses.", user_id="alice", metadata={
"category": "hobbies"})
# 2. 特定用户根据查询问题进行文本检索
related_memories = m.search(query="What are Alice's hobbies?", user_id="alice"