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)
配置字典也接受 llm 和 embedder 密钥,您可以使用它们将默认 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)
embedding_model_dims 键在 vector_store.config 字典中的值必须与您配置的嵌入器产生的维度数匹配。
首次调用 Memory.from_config() 方法时,Mem0 会创建目标集合(如果尚不存在),并在集合上创建 MongoDB 向量搜索索引和 MongoDB Search 索引。由于这些索引是异步构建的,因此在索引构建完成之前,搜索可能会返回空结果。
方法
本节介绍了 Memory 类提供的方法。每个方法都对您在 vector_store.config 字典中配置的集合进行操作。
要将方法限定为特定用户、代理或会话运行,请传递 filters 字典,其中包含 user_id、agent_id 或 run_id 中的至少一个密钥。
add()
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)
get()
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"])
get_all()
get_all() 方法返回为给定实体存储的内存文档,而不运行语义搜索。使用此方法显示实体的完整内存历史。
以下示例返回并打印特定用户的所有记忆:
all_memories = m.get_all(filters={"user_id": "alice"}) for mem in all_memories["results"]: print(mem["id"], mem["memory"])
update()
update() 方法替换现有内存文档的文本。Mem0 从新文本重新计算嵌入,并原地更新文档。
以下示例替换现有内存的文本:
m.update(memory_id="<memory-id>", text="Alice relocated to Berlin in July 2025.")
Delete()
delete() 方法从集合中删除单个内存文档。
如下示例按其 ID 删除一个内存:
m.delete(memory_id="<memory-id>")
memory_id 参数是必需的,并接受要删除的内存文档的 id 值。
delete_all()
delete_all() 方法从您的集合中删除给定实体的所有内存文档。
如下示例将删除特定用户的所有记忆:
m.delete_all(user_id="alice")
历史()
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()
reset() 方法执行以下操作:
删除您的 MongoDB 集合及其 MongoDB 向量搜索和 MongoDB Search 索引
重置本地历史数据库
彻底重建集合及其索引
使用此方法清除所有内存,而不是使用 delete_all() 方法逐个实体删除它们。
m.reset()
reset() 不接受任何参数,并删除 Mem0 通过此 Memory 实例存储的所有内存。
close()
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 的更多信息,请参阅: