Mem0 提供了 Python 和 TypeScript 两种 SDK 供开发者选用,并且支持将其接口暴露成 REST API 以方便其他语言和工具集成。我们今天系统地学习下 Mem0 提供的这些接口。

记忆管理

我们以 Python SDK 为例,介绍下 Mem0 记忆管理相关的接口。首先初始化 Memory 实例:

from mem0 import Memory

m = Memory()

如果要对 Memory 进行自定义配置,则通过 Memory.from_config() 初始化:

from mem0 import Memory

config = {
    // ...
}

m = Memory.from_config(config)

关于自定义配置选项,前几天已经详细地学习过,可以参考前几天的内容。

添加记忆

add() 方法用于添加新的记忆,其中 messages 参数可以是一个字符串:

messages = "你好,我叫张三"
result = m.add(messages, user_id="zhangsan")

也可以是一个对象:

messages = {
    "role": "user",
    "content": "你好,我叫张三"
}
result = m.add(messages, user_id="zhangsan")

还可以是一个数组:

messages = [{
    "role": "user",
    "content": "你好,我叫张三"
}, {
    "role": "assistant",
    "content": "您好,张三,请问有什么需要我帮助?"
}]
result = m.add(messages, user_id="zhangsan")

多模态支持

Mem0 支持多模态,可以在对话中添加图片:

messages = [{
    "role": "user",
    "content": "你好,我叫张三"
}, {
    "role": "assistant",
    "content": "您好,张三,请问有什么需要我帮助?"
}, {
    "role": "user",
    "content": "帮我翻译下这张图上的文字"
}, {
    "role": "user",
    "content": {
        "type": "image_url",
        "image_url": {
            "url": "<image-url>"
        }
    }
}]
result = m.add(messages, user_id="zhangsan")

如果使用 Mem0 平台,除了支持图片内容,还支持 在对话中添加文档,比如 TXT、MDX、PDF 等。

助手记忆

我们除了为用户添加记忆之外,也可以为助手添加记忆,比如你正在开发一个文本写作智能体,使用助手记忆维持长上下文的一致性:

result = m.add(messages, agent_id="writer-agent")

关闭推导

默认情况下,我们在添加记忆时,会经过提取和更新两个阶段,Mem0 提供了一个参数可以 关闭这个推导过程,直接存储原始消息:

result = m.add(messages, user_id="zhangsan", infer=False)

查询记忆

在数据库中搜索与用户问题最相关的记忆:

related_memories = m.search("我是谁?", user_id="zhangsan")

Mem0 平台的搜索接口还有几个 高级参数,比如 keyword_search=True 开启关键词搜索,增强搜索召回率,rerank=True 开启重排序,确保最相关的记忆优先出现,filter_memories=True 开启过滤,去除无关的记忆,提高搜索精度。

另外,我们还可以根据 user_id 获取指定用户的所有记忆:

all_memories = m.get_all(user_id="zhangsan")

根据 memory_id 获取指定记忆:

specific_memory = m.get("<id>")

获取指定记忆的变更历史:

history = m.history(memory_id="<id>")

更新记忆

如果发现大模型自动维护的记忆不对,我们可以手动对记忆进行修改:

result = m.update(memory_id="<id>", data="我叫张三丰")

删除记忆

删除指定记忆:

m.delete(memory_id="<id>")

删除用户的所有记忆:

m.delete_all(user_id="zhangsan")

清空所有记忆:

m.reset()

异步记忆

Mem0 提供了一个异步操作记忆的 AsyncMemory 类,它的所有操作都是非阻塞的,这在开发高并发应用程序时非常有用:

from mem0 import AsyncMemory

m = AsyncMemory()

AsyncMemory 中的方法和 Memory 类完全相同,且具有一样的参数,但需要和 async/await 一起使用:

result = await m.add(messages, user_id="zhangsan")

Mem0 REST API

Mem0 提供一个 REST API 服务器,它使用 FastAPI 编写,用户可以通过 HTTP 端点执行所有操作。

首先克隆代码并进入 server 目录:

$ git clone https://github.com/mem0ai/mem0.git
$ cd server

然后在当前目录中创建一个 .env 文件并设置环境变量,运行所需的唯一环境变量是 OPENAI_API_KEY

OPENAI_API_KEY=your-openai-api-key

它默认使用 PGVector 作为向量数据库,Neo4j 作为图数据库,这些按需配置:

POSTGRES_HOST=localhost
POSTGRES_PORT=6333
POSTGRES_DB=test
POSTGRES_USER=
POSTGRES_PASSWORD=
POSTGRES_COLLECTION_NAME=test

NEO4J_URI=neo4j://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password

接着安装所需依赖:

$ pip install -r requirements.txt

最后,启动 REST API 服务器:

$ uvicorn main:app --reload

启动成功后,可以通过 http://localhost:8888 访问,默认会进入 /docs 页面,这是 Mem0 REST API 的 OpenAPI 文档:

rest-api-server.png

这时就可以使用 HTTP 接口访问 Mem0 API 了,也可以使用 MemoryClient 在代码中调用它:

from mem0 import MemoryClient

client = MemoryClient(
    host="http://localhost:8888",
    api_key="xxx",
)

result = client.add("你好,我叫张三", user_id="zhangsan")
print(result)

related_memories = client.search("我是谁?", user_id="zhangsan")
print(related_memories)

如果不设置 host 参数,默认使用的 https://api.mem0.ai,也就是 Mem0 平台的 API 接口。

OpenAI 兼容接口

除了 HTTP 接口,Mem0 还有一个特色功能,它提供了一个 OpenAI 兼容的对话接口,可以轻松地将 Mem0 的长期记忆功能集成到我们的聊天应用程序中。

import os
from mem0.proxy.main import Mem0

client = Mem0(api_key=os.environ.get("MEM0_API_KEY"))

messages = [{
    "role": "user",
    "content": "我喜欢四川美食,但是我不能吃辣"
}]
chat_completion = client.chat.completions.create(
    messages=messages, model="gpt-4o-mini", user_id="zhangsan"
)
print(chat_completion.choices[0].message.content)

messages = [{
    "role": "user",
    "content": "给我推荐一些四川美食",
}]
chat_completion = client.chat.completions.create(
    messages=messages, model="gpt-4o-mini", user_id="zhangsan"
)
print(chat_completion.choices[0].message.content)

Mem0 为此做了一个在线演示页面,实现了类似 ChatGPT 的聊天功能,但是带长期记忆,感兴趣的朋友可以尝试下: