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

将MongoDB与 Mem0 集成

您可以将MongoDB与 Mem0 集成,Mem 是一个面向AI代理和助手的开源内存层,可随时间推移从对话中提取、存储和检索事实。当您将0 Mem0 配置为使用MongoDB作为其向量存储时,Mem 会将代理内存保留在MongoDB集合中。它使用MongoDB Vector Search 进行语义检索,并使用MongoDB Search 进行全文关键字检索。

要完成配置 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)

配置字典还接受 llmembedder 键,您可以使用它们将默认OpenAI 模型替换为 Mem0 支持的任何提供商。以下示例设置了这些可选键:

import os
from mem0 import Memory
config = {
"llm": {
"provider": "openai",
"config": {
"model": "gpt-4o-mini",
"temperature": 0.1,
"max_tokens": 2000,
},
},
"embedder": {
"provider": "openai",
"config": {
"model": "text-embedding-3-small",
"embedding_dims": 1536,
},
},
"vector_store": {
"provider": "mongodb",
"config": {
"mongo_uri": os.environ["MONGODB_URI"],
"db_name": "mem0_db",
"collection_name": "agent_memory",
"embedding_model_dims": 1536,
},
},
"history_db_path": os.path.expanduser("~/.mem0/history.db"),
}
m = Memory.from_config(config)

vector_store.config 字典中 embedding_model_dims 键的值必须与配置的嵌入器生成的维度数匹配。

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

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

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

必要性
说明

mongo_uri

Optional

db_name

Optional

保存内存集合的数据库的名称。默认为 mem0_db。 Mem0 创建数据库(如果该数据库尚不存在)。

collection_name

Optional

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

embedding_model_dims

Optional

嵌入向量的维数。默认为 1536。此值必须与您配置的嵌入器生成的维度数相匹配。

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

要将方法的范围限定为特定用户、代理或会话运行,请传递至少包含 user_idagent_idrun_id 键之一的 filters 字典。

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)
{'results': [{'id': '...', 'memory': 'User is moving to Berlin around September 2026.', 'event': 'ADD'}]}

使用这些参数可配置 Mem0 存储内存的方式。

Parameter
必要性
说明

messages

必需

对话开始从中提取事实,可以是 {"role": ..., "content": ...} 字典列表,也可以是字符串。

user_id

可选的

内存所属用户的标识符。您必须至少提供 user_idagent_idrun_id 键之一。

agent_id

可选的

内存所属代理的标识符。如果您未提供 user_idrun_id 值,则为必填项。

run_id

可选的

特定对话运行或会话的标识符。如果您未提供 user_idagent_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)
{'id': '...', 'memory': 'User is moving to Berlin around September 2026.',
'hash': '...', 'metadata': None, 'score': None, 'created_at': '...',
'updated_at': '...', 'user_id': 'alice', 'attributed_to': 'user'}

memory_id 参数为必填项,它接受要检索的内存文档的 id 值。如果不存在具有该ID的内存,则 get() 方法将返回 None

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

以下示例在特定用户的记忆中搜索五个最相关的结果:

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"])
User is moving to Berlin around September 2026. - score: 0.7043201923370361

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

Parameter
必要性
说明

query

必需

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

filters

Optional

与语义查询一起应用的过滤条件。必须至少包含 user_idagent_idrun_id 键之一。支持比较操作符、列表操作符、字符串操作符以及 ANDORNOT 逻辑操作符。

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"])
<id> User is moving to Berlin around September 2026.

使用这些参数可配置 Mem0 返回哪些内存。

Parameter
必要性
说明

filters

Optional

过滤条件,用于标识要返回的内存。必须至少包含 user_idagent_idrun_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_idagent_idrun_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"])
ADD None User is moving to Berlin around September 2026.
UPDATE User is moving to Berlin around September 2026. Alice relocated to Berlin in July 2025.

memory_id 参数为必填项,它接受要检索其历史记录的内存文档的 id 值。

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

  • 删除MongoDB集合及其MongoDB Vector Search 和MongoDB Search 索引

  • 重置本地历史数据库

  • 从头开始重新创建集合及其索引

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

m.reset()

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

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

m.close()

close() 不接受任何参数。如果您使用 Memory实例作为上下文管理器,则 Mem0 会自动调用它。

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

MongoDB Vector Search索引名为 <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 会记录警告并仅返回语义结果。

要学习;了解有关将 Mem0 与MongoDB结合使用的更多信息,请参阅: