对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

集成 MongoDB 与 Mem0

You can integrate MongoDB with Mem0, an open-source memory layer for AI agents and assistants that extracts, stores, and retrieves facts from conversations over time. When you configure Mem0 to use MongoDB as its vector store, Mem0 persists agent memory in your MongoDB collections. It uses MongoDB Vector Search for semantic retrieval and MongoDB Search for full-text keyword retrieval.

要完成将 Mem0 配置为使用 MongoDB 的教程,请参阅 MongoDB Mem0 集成入门。

Mem0 需要 Python v3.10 或更高版本和 PyMongo v4.13.2 或更高版本。要安装最新版本的 Mem0 和 PyMongo,运行以下命令:

pip install mem0ai pymongo

要将 MongoDB 用作 Mem0 向量存储,将配置字典传递给 Memory.from_config(),将 vector_store 字典的 provider 键设置为 mongodb。

选择 Basic initialization 标签页以查看基本的 MongoDB 和 Mem0 配置示例,或选择 Custom configuration 标签页以查看如何使用自定义设置配置集成。

要初始化向量存储,请指定您的 MongoDB 连接字符串、数据库名称、集合名称以及嵌入模型生成的维度数。以下示例将这些键设置到 vector_store.config 字典中:

import os
from mem0 import Memory
config = {
"vector_store": {
"provider": "mongodb",
"config": {
"mongo_uri": os.environ["MONGODB_URI"],
"db_name": "mem0_db",
"collection_name": "agent_memory",
"embedding_model_dims": 1536,
},
}
}
m = Memory.from_config(config)

首次调用 Memory.from_config() 方法时,Mem0 会创建目标集合(如果尚不存在),并在集合上创建 MongoDB 向量搜索索引和 MongoDB Search 索引。由于这些索引是异步构建的,因此在索引构建完成之前,搜索可能会返回空结果。

使用这些密钥配置向量存储。

当您将 provider 键设置为 mongodb 时,Mem0 会从 vector_store 字典中嵌套的 config 字典中读取您的 MongoDB 设置。该字典支持以下键。每个密钥都是可选的,并回退到指定的默认值。但是,您必须设置 mongo_uri 才能连接到除本地部署之外的任何部署。

键
必要性
说明

mongo_uri

Optional

您的 MongoDB 部署的连接字符串。默认为 mongodb://localhost:27017。要了解有关查找连接字符串的更多信息,请参阅通过客户端库连接集群。

db_name

Optional

存储记忆集合的数据库的名称。默认为 mem0_db。Mem0 创建数据库,如果该数据库不存在。

collection_name

Optional

存储内存文档的集合的名称。默认为 mem0。如果集合不存在,Mem0 创建集合。

embedding_model_dims

Optional

嵌入向量的维度数。默认为 1536。此值必须与您配置的嵌入器输出的维度数一致。

本节介绍了 Memory 类提供的方法。每个方法都对您在 vector_store.config 字典中配置的集合进行操作。

要将方法限定为特定用户、代理或会话运行,请传递 filters 字典,其中包含 user_id、agent_id 或 run_id 中的至少一个密钥。

add() 方法从对话中提取事实,并将其作为内存文档写入您的集合。如果对应于该实体的语义相同的记忆已经存在,Mem0 会更新该记忆,而不是创建重复的文档。

以下示例将对话传递给 add() 方法,并将生成的内存范围限定为特定用户:

messages = [
{"role": "user", "content": "I'm moving to Berlin next month."},
{"role": "assistant", "content": "I'll remember that you're relocating to Berlin."},
]
result = m.add(messages, user_id="alice")
print(result)

使用这些参数配置 Mem0 如何存储记忆。

Parameter
必要性
说明

messages

必需

谈话转向从中提取事实,可以是 {"role": ..., "content": ...} 字典列表,也可以是 string。

user_id

可选的

该内存所属用户的标识符。您必须提供 user_id、agent_id或run_id密钥中的至少一个。

agent_id

可选的

该内存所属的代理的标识符。如果您未提供 user_id 或 run_id 值,则为必须项。

run_id

可选的

特定对话运行或会话的标识符。如果您未提供 user_id 或 agent_id 值,则为必须项。

metadata

Optional

要附加到此调用写入的每个内存文档的键值对。您可以通过使用 search() 方法的 filters 参数查询这些值。

expiration_date

Optional

Mem0 从结果中排除内存的开始日期。

infer

Optional

Mem0 是否在存储它们之前使用 LLM 提取离散事实。默认为 True。如果 False,Mem0 存储原始消息内容。

memory_type

Optional

要存储的存储类型。

prompt

Optional

覆盖默认事实提取模板的自定义提取提示。

get() 方法按其 ID 值检索单个内存文档,而不运行向量搜索。

以下示例按其 ID 直接检索内存:

memory = m.get(memory_id="<memory-id>")
print(memory)

memory_id 参数是必需的,并接受用于检索内存文档的 id 值。如果不存在具有该 ID 的内存,则 get() 方法返回 None。

search() 方法对 MongoDB 向量搜索索引运行语义搜索,并返回与查询字符串最相关的记忆。

以下示例搜索某个特定用户的记忆,以获取五个最相关的结果:

results = m.search(
query="Where does Alice live?",
filters={"user_id": "alice"},
top_k=5,
)
for mem in results["results"]:
print(mem["memory"], "- score:", mem["score"])

使用这些参数来配置搜索查询。

Parameter
必要性
说明

query

必需

Mem0 用于生成搜索嵌入的自然语言查询。

filters

Optional

与语义查询一起应用的过滤器条件。必须包含 user_id、agent_id或run_id 密钥中的至少一个。支持比较操作符、列表操作符、string 操作符以及 AND、OR 和 NOT 逻辑操作符。

top_k

Optional

要返回的最大结果数。默认值为 20。

threshold

Optional

记忆必须达到最低相关度分数才能在结果中显示。默认值为 0.1。

rerank

Optional

Mem0 是否在返回结果之前对结果进行重新排序。默认为 False。

explain

Optional

是否包含每个结果的 score_details 分析。默认为 False。

reference_date

Optional

Mem0 用于解析查询中相对时间表达式的日期。

show_expired

Optional

是否包含 expiration_date 已过去的记忆。默认为 False。

get_all() 方法返回为给定实体存储的内存文档,而不运行语义搜索。使用此方法显示实体的完整内存历史。

以下示例返回并打印特定用户的所有记忆:

all_memories = m.get_all(filters={"user_id": "alice"})
for mem in all_memories["results"]:
print(mem["id"], mem["memory"])

使用这些参数配置 Mem0 返回哪些记忆。

Parameter
必要性
说明

filters

Optional

确定要返回的记忆的过滤器条件。必须包含 user_id、agent_id或run_id 中的至少一个。

top_k

Optional

要返回的最大文档数。默认值为 20。

show_expired

Optional

是否包含 expiration_date 已过去的记忆。默认为 False。

update() 方法替换现有内存文档的文本。Mem0 从新文本重新计算嵌入,并原地更新文档。

以下示例替换现有内存的文本:

m.update(memory_id="<memory-id>", text="Alice relocated to Berlin in July 2025.")

使用这些参数配置更新。

Parameter
必要性
说明

memory_id

必需

要更新的内存文档的 id 值。

text

Optional

用于内存的替换文本。Mem0 计算并存储此文本的新嵌入。

metadata

Optional

内存文档的替换元数据。

expiration_date

Optional

Mem0 从结果中排除内存的开始日期。

delete() 方法从集合中删除单个内存文档。

如下示例按其 ID 删除一个内存:

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

memory_id 参数是必需的,并接受要删除的内存文档的 id 值。

delete_all() 方法从您的集合中删除给定实体的所有内存文档。

如下示例将删除特定用户的所有记忆:

m.delete_all(user_id="alice")

使用这些参数配置 Mem0 删除哪些记忆。

Parameter
必要性
说明

user_id

Optional

删除该用户的所有记忆。您必须提供 user_id、agent_id或run_id 中的至少一个。

agent_id

Optional

删除此代理的所有记忆。

run_id

Optional

删除此运行或会话的所有记忆。

history() 方法返回单个内存的编辑历史,包括文本的每个版本和事件类型。Mem0 将此历史记录存储在本地 SQLite 数据库中,而不是在 MongoDB 中。要更改 Mem0 写入该数据库的位置,请在配置字典中设置 history_db_path 密钥。

以下示例检索并打印记忆的编辑历史。

history = m.history(memory_id="<memory-id>")
for entry in history:
print(entry["event"], entry["old_memory"], entry["new_memory"])

memory_id 参数是必需的,并接受您要检索其历史的内存文档的 id 值。

reset() 方法执行以下操作:

  • 删除您的 MongoDB 集合及其 MongoDB 向量搜索和 MongoDB Search 索引

  • 重置本地历史数据库

  • 彻底重建集合及其索引

使用此方法清除所有内存,而不是使用 delete_all() 方法逐个实体删除它们。

m.reset()

reset() 不接受任何参数,并删除 Mem0 通过此 Memory 实例存储的所有内存。

close() 方法释放 Mem0 用于历史数据库的本地 SQLite 连接。这种方法不会影响您的 MongoDB 连接。

m.close()

close() 不接受任何参数。Mem0 会自动调用它,前提是您将 Memory 实例用作上下文经理。

Mem0 首次连接时会在您的集合上创建以下索引。您也可以手动创建或检查这些索引。要学习;了解更多信息,请参阅创建MongoDB Vector Search 索引。

MongoDB 向量搜索索引命名为 <collectionName>_vector_index,其中 <collectionName> 是集合的名称,该集合用于存储内存文档。索引使用以下定义:

{
"fields": [
{
"type": "vector",
"path": "embedding",
"numDimensions": 1536,
"similarity": "cosine"
}
]
}

MongoDB Search 索引命名为 <collection-name>_text_search_index,并使用以下定义:

{
"mappings": {
"dynamic": false,
"fields": {
"payload": {
"type": "document",
"fields": {
"data": { "type": "string" },
"text_lemmatized": { "type": "string" }
}
}
}
}
}

Mem0 使用 MongoDB Search 索引运行关键字搜索,以补充 search() 的语义结果。如果索引不存在,Mem0 会日志一条警告,并仅返回语义结果。

要了解有关在 MongoDB 中使用 Mem0 的更多信息,请参阅: