우리가 Chat GPT와 채팅을 할 때 이전에 대화한 내용을 기억해야 대답을 할 수 있는 상황도 있겠죠? 그런 작업을 위해서는 대화 기록을 저장해야합니다. 그것을 위한 모듈이 Memory입니다.
Memory 종류 | 특성 | 장점 | 단점 |
ConversationBufferMemory | 모든 대화 기록을 저장 | 단순하고 사용하기 쉬움 | 길어지면 토큰 한도 초과 가능 |
ConversationBufferWindowMemory | 최근 n개 대화만 저장 | 토큰 사용량 절약 | 오래된 정보는 잊어버림 |
ConversationTokenBufferMemory | 최근 n개의 토큰(token) 기반으로 대화 저장 | 토큰 초과 방지 | 일부 중요한 대화가 잘릴 수 있음 |
ConversationSummaryMemory | 이전 대화를 요약하여 저장 | 긴 대화에서도 컨텍스트 유지 | 요약 과정에서 정보 손실 가능 |
ConversationEntityMemory | 개체(Entity) 중심으로 기억 | 특정 정보(예: 인물, 장소)를 기억하는 데 유용 | 일반 대화보다는 정보 추출형 대화에 적합 |
ConversationKGMemory | 지식 그래프(Knowledge Graph) 기반으로 기억 | 개념과 관계를 유지하며 기억 | 설정이 복잡하고 일반 대화에는 부적합 |
VectorStoreRetrieverMemory | 벡터 데이터베이스에 대화를 저장 후 검색 | 긴 대화에서도 원하는 정보를 효율적으로 검색 | 벡터 DB 설정 필요 |
1. ConversationBufferMemory (모든 대화 저장)
from langchain.memory import ConversationBufferMemory
# 메모리 생성
memory = ConversationBufferMemory()
# 메모리에 저장
memory.save_context({"input": "Hello!"}, {"output": "Hi! How can I help you?"})
memory.save_context({"input": "What’s your name?"}, {"output": "I'm an AI assistant."})
# 전체 대화 기록 확인
print(memory.load_memory_variables({}))
2. ConversationBufferWindowMemory (최근 n개 대화 저장)
from langchain.memory import ConversationBufferWindowMemory
# 최근 2개의 대화만 저장
memory = ConversationBufferWindowMemory(k=2)
# 여러 개의 대화 저장
memory.save_context({"input": "Hello!"}, {"output": "Hi! How can I help you?"})
memory.save_context({"input": "What’s your name?"}, {"output": "I'm an AI assistant."})
memory.save_context({"input": "What can you do?"}, {"output": "I can answer your questions."})
# 저장된 최근 대화 확인
print(memory.load_memory_variables({}))
3. ConversationTokenBufferMemory (최근 n개 토큰 기반 저장)
from langchain.memory import ConversationTokenBufferMemory
from langchain_openai import ChatOpenAI
# OpenAI 모델 설정 (토큰 카운트에 사용됨)
llm = ChatOpenAI(model="gpt-4")
# 최근 50개 토큰만 저장
memory = ConversationTokenBufferMemory(llm=llm, max_token_limit=50)
# 대화 저장
memory.save_context({"input": "Tell me about AI."}, {"output": "AI stands for Artificial Intelligence..."})
memory.save_context({"input": "What is deep learning?"}, {"output": "Deep learning is a subset of AI that uses neural networks..."})
# 저장된 대화 확인
print(memory.load_memory_variables({}))
4. ConversationSummaryMemory (대화 요약 저장)
from langchain.memory import ConversationSummaryMemory
from langchain_openai import ChatOpenAI
# 요약 기반 메모리 생성
llm = ChatOpenAI(model="gpt-4")
memory = ConversationSummaryMemory(llm=llm)
# 대화 저장
memory.save_context({"input": "Hello!"}, {"output": "Hi! How can I help you?"})
memory.save_context({"input": "Tell me about machine learning."}, {"output": "Machine learning is a field of AI that enables computers to learn..."})
# 저장된 요약 확인
print(memory.load_memory_variables({}))
5. ConversationEntityMemory (개체 중심 기억)
사람, 장소 등 특정 개체(Entity) 정보를 저장하는 방식입니다.
from langchain.memory import ConversationEntityMemory
from langchain_openai import ChatOpenAI
# 개체 기반 메모리
llm = ChatOpenAI(model="gpt-4")
memory = ConversationEntityMemory(llm=llm)
# 대화 저장
memory.save_context({"input": "My name is John."}, {"output": "Nice to meet you, John!"})
memory.save_context({"input": "I live in New York."}, {"output": "New York is a great city!"})
# 저장된 개체 확인
print(memory.load_memory_variables({}))
6. ConversationKGMemory (지식 그래프 기반 기억)
Elon Musk → founded → Tesla 같은 관계 기반 정보 저장
개념 간 연결이 필요한 경우 유용
from langchain.memory import ConversationKGMemory
memory = ConversationKGMemory()
memory.save_context({"input": "Elon Musk founded Tesla."}, {"output": "Got it!"})
memory.save_context({"input": "He also founded SpaceX."}, {"output": "Understood."})
print(memory.load_memory_variables({}))
7. VectorStoreRetrieverMemory (벡터 DB 기반 기억)
from langchain.memory import VectorStoreRetrieverMemory
from langchain_openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
# FAISS 벡터 스토어 생성
vectorstore = FAISS.from_texts(["Hello! How can I help you?"], OpenAIEmbeddings())
# 벡터 메모리 생성
memory = VectorStoreRetrieverMemory(retriever=vectorstore.as_retriever())
# 대화 저장 및 검색
memory.save_context({"input": "Tell me a joke."}, {"output": "Why did the chicken cross the road?"})
print(memory.load_memory_variables({}))
'Data & Research' 카테고리의 다른 글
[LLM & RAG] Langchain 기초 - Agent와 Tools (0) | 2025.04.03 |
---|---|
[LLM & RAG] LCEL Runnable (0) | 2025.04.03 |
[LLM & RAG] Langchain 기초 - Output Parser (0) | 2025.04.03 |
[LLM & RAG] Langchain 기초 - LLM (0) | 2025.04.03 |
[LLM & RAG] Langchain 기초 - Prompt (0) | 2025.04.03 |