시간이 지남에 따라 대화에서 사실을 추출, 저장, 검색하는 AI 에이전트 및 어시스턴트를 위한 오픈 소스 메모리 계층인 Mem0과 MongoDB 통합할 수 있습니다. MongoDB 벡터 저장 로 사용하도록 Mem0을 구성하면 Mem0는 MongoDB 컬렉션에 에이전트 메모리를 유지합니다. 시맨틱 검색에는 MongoDB Vector Search를 사용하고 전체 텍스트 키워드 검색에는 MongoDB Search를 사용합니다.
시작하기
MongoDB를 사용하도록 Mem0을 구성하는 튜토리얼을 완료하려면 MongoDB Mem0 통합 시작하기를 참조하세요.
설치
Mem0 에는 Python v3.10 이상 및 PyMongo v4.13.2 이상이 필요합니다. 최신 Mem0 및 PyMongo 버전을 설치하려면 다음 명령을 실행합니다.
pip install mem0ai pymongo
사용법
MongoDB를 Mem0 벡터 저장으로 사용하려면 vector_store 사전의 provider 키를 mongodb로 설정하는 구성 사전을 Memory.from_config()에 전달합니다.
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)
vector_store.config 사전의 embedding_model_dims 키 값은 구성된 임베더가 생성하는 차원의 수와 일치해야 합니다.
Memory.from_config() 메서드를 처음 호출하면, Mem0은 대상 컬렉션이 아직 존재하지 않은 경우 생성하고 컬렉션에 MongoDB 벡터 검색 인덱스와 MongoDB Search 인덱스를 생성합니다. 이러한 인덱스는 비동기적으로 생성되므로 인덱스 생성이 완료될 때까지 검색에서 빈 결과가 반환될 수 있습니다.
방법
이 섹션에서는 Memory 클래스에서 제공하는 메서드에 대해 설명합니다. 각 메서드는 vector_store.config 사전에서 구성하는 컬렉션에서 작동합니다.
특정 사용자, 에이전트 또는 대화 실행에 메서드를 범위 지정하려면 user_id, agent_id 또는 run_id 키 중 하나 이상을 포함하는 filters 사전을 전달합니다.
add()
add() 메서드는 대화에서 사실을 추출하여 메모리 문서로 컬렉션에 쓰기 (write)합니다. 개체에 대해 의미적으로 동등한 메모리가 이미 존재하는 경우, 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 벡터 검색 인덱스를 대상으로 시맨틱 검색을 실행하고, 쿼리 문자열과 가장 관련이 높은 메모리를 반환합니다.
다음 예시는 특정 사용자의 메모리에서 가장 관련있는 5개의 결과를 검색합니다.
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은 이 기록을 MongoDB에서가 아니라 로컬 SQLite 데이터베이스에 저장합니다. Mem0이 해당 데이터베이스를 쓰기 (write) 위치를 변경하려면 구성 사전에서 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() 매개변수를 받지 않습니다. 및 이 Memory 인스턴스를 통해 Mem0이 저장한 모든 메모리를 삭제합니다.
close()
close() 메서드는 Mem0이 이력 데이터베이스에 대한 로컬 SQLite 연결을 해제합니다. 이 방법은 사용자의 MongoDB 연결에 영향을 주지 않습니다.
m.close()
close() 어떤 매개변수도 허용하지 않습니다. Mem0은 Memory 인스턴스를 컨텍스트 관리자로 사용하는 경우 자동으로 호출합니다.
검색 인덱스
Mem0 creates the following indexes on your collection the first time it connects. You can also create or inspect these indexes manually. To learn more, see Create a MongoDB Vector Search Index.
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를 사용하는 방법에 대해 자세히 학습 다음을 참조하세요.