
Memory는 LangChain에서 이전 대화 내용을 저장하고 불러오는 기능이다. 대화의 흐름을 기억하여 자연스럽고 일관된 응답을 생성할 수 있게 도와준다.
| 메모리 타입 | 설명 |
|---|---|
ConversationBufferMemory | 전체 대화를 순차적으로 저장 |
ConversationSummaryMemory | 요약된 형태로 대화를 저장 |
ConversationBufferWindowMemory | 최근 N개의 발화만 저장 (슬라이딩 윈도우 방식) |
ConversationKGMemory | 대화 내용을 지식 그래프 형태로 구조화 |
CombinedMemory | 여러 메모리를 조합해 사용 |
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context({"input": "안녕"}, {"output": "안녕하세요!"})
print(memory.load_memory_variables({}))
Document Loader는 다양한 데이터 소스에서 문서를 불러오는 기능이다. RAG 파이프라인에서 주로 검색 전에 문서를 불러와 전처리할 때 사용한다.
TextLoader, PDFLoader, CSVLoader 등)WebBaseLoader, SitemapLoader)SQLDatabaseLoader, MongoDBLoader 등)from langchain.document_loaders import TextLoader
loader = TextLoader("example.txt")
documents = loader.load()
print(documents[0].page_content) # 문서 본문
print(documents[0].metadata) # 메타데이터 (경로, 페이지 등)
대부분의 Document Loader는 문서를 통으로 불러오므로, 검색을 위해 청크 단위 분할이 필요하다.
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = text_splitter.split_documents(documents)
from langchain.chains import ConversationalRetrievalChain
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
# 문서 로드 및 청크 분할
loader = TextLoader("example.txt")
docs = loader.load()
splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
split_docs = splitter.split_documents(docs)
# 벡터 저장소 생성
db = FAISS.from_documents(split_docs, OpenAIEmbeddings())
# 메모리 설정
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# RAG 체인 구성
qa_chain = ConversationalRetrievalChain.from_llm(
llm=ChatOpenAI(),
retriever=db.as_retriever(),
memory=memory
)
# 질의
qa_chain({"question": "문서 내용이 뭐였지?"})
| 항목 | 설명 |
|---|---|
| Memory | 대화형 응용에서 문맥을 유지하도록 도와주는 메모리 시스템 |
| Document Loader | 다양한 소스로부터 문서를 로드해 검색/분석에 활용 |