LangChain에서 "메모리"란 대화 기록, 즉 메시지 상호 작용의 추적을 의미합니다. 이는 우리가 ChatGPT를 사용할 때와 유사합니다. 이전 대화 내용을 기억하고, 그 문맥을 기반으로 대화를 이어나가는 것이죠. 예를 들어, ChatGPT와 대화를 나눌 때 이전에 이야기한 내용이 기억되어 자연스러운 대화가 가능했습니다.
메모리를 사용하면 AI 모델이 대화의 문맥을 이해하고 유지할 수 있습니다. 이를 통해 더욱 일관성 있고 인간적인 대화를 생성할 수 있습니다. 예를 들어, 사용자가 질문을 하면 AI는 이전에 나눈 대화를 바탕으로 더 정확하고 관련성 있는 답변을 제공할 수 있습니다.
LangChain은 대화 메모리를 저장하고 관리하는 여러 가지 옵션을 제공합니다:
전체 대화 기록 저장 (ConversationBufferMemory): 모든 메시지를 저장하여 대화의 전체 문맥을 유지합니다.
제한된 대화 기록 저장 (ConversationBufferWindowMemory): 최근의 몇 개의 메시지만 저장하여 메모리 사용량을 조절합니다.
요약 기반 메모리 (ConversationSummaryMemory): 이전 대화 내용을 요약하여 저장함으로써 중요한 정보만 유지하고, 메모리 사용량을 줄입니다.
토큰 기반 메모리 (ConversationTokenBufferMemory): 토큰 수를 기반으로 대화 기록을 관리하여 OpenAI의 토큰 제한을 고려합니다.
ConversationBufferMemory: 가장 단순한 형태로, 모든 대화 내용을 누적하여 저장합니다. 대화의 길이가 길어질수록 메모리 사용량이 증가합니다.
ConversationBufferWindowMemory: 지정한 메시지 개수만큼만 저장합니다. 예를 들어, 최근 5개의 메시지만 유지합니다.
ConversationSummaryMemory: 대화 내용을 요약하여 저장하므로, 중요한 정보는 유지하면서도 메모리 사용량을 줄일 수 있습니다.
ConversationTokenBufferMemory: 토큰의 개수를 기준으로 대화 기록을 관리하므로, 토큰 제한을 효과적으로 관리할 수 있습니다.
이제 LangChain의 기본 메모리 빌딩 블록인 ChatMessageHistory
를 사용하여 실제로 메모리를 구현해 보겠습니다.
먼저, LangChain의 memory
모듈에서 ChatMessageHistory
를 가져옵니다.
from langchain.memory import ChatMessageHistory
history = ChatMessageHistory()
ChatMessageHistory()
는 새로운 대화 기록 객체를 생성합니다.ChatMessageHistory
객체에 사용자와 AI의 메시지를 수동으로 추가할 수 있습니다.
history.add_user_message("안녕하세요, 만나서 반갑습니다.")
history.add_ai_message("저도 만나서 반가워요!")
add_user_message()
를 사용하여 사용자 메시지를 추가합니다.add_ai_message()
를 사용하여 AI의 응답을 추가합니다.이렇게 하면 이미 대화를 나눈 것처럼 대화 기록을 쌓을 수 있습니다. 이는 프롬프트를 구성하는 또 다른 방법으로 생각할 수 있으며, 나중에 AI 모델에 전달하여 대화를 이어나갈 수 있습니다.
대화 기록을 확인하려면 다음과 같이 합니다.
print(history.messages)
history.messages
는 현재까지 저장된 모든 메시지의 리스트를 반환합니다.이제 메모리 객체를 실제 AI 모델과 연결하여 자동으로 메시지가 추가되도록 설정해 보겠습니다.
import os
from dotenv import load_dotenv
from langchain import ConversationChain
from langchain.chat_models import ChatOpenAI
dotenv
를 사용하여 .env
파일에서 환경 변수를 로드합니다.ConversationChain
은 대화를 관리하는 체인입니다.ChatOpenAI
는 OpenAI의 채팅 모델을 사용하기 위한 래퍼입니다..env
파일에서 OPENAI_API_KEY
를 로드합니다.
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
.env
파일에 다음과 같이 API 키를 저장해야 합니다:OPENAI_API_KEY=your_openai_api_key_here
llm = ChatOpenAI(openai_api_key=OPENAI_API_KEY, temperature=0.7)
temperature
는 응답의 다양성을 조절하는 하이퍼파라미터입니다.conversation = ConversationChain(
llm=llm,
memory=history,
verbose=True
)
ConversationChain
에 LLM과 메모리를 연결합니다.verbose=True
로 설정하면 대화 과정이 상세하게 출력됩니다.user_input = input("사용자: ")
response = conversation.predict(input=user_input)
print(f"AI: {response}")
conversation.predict()
를 통해 AI의 응답을 생성합니다.아래는 위에서 설명한 내용을 모두 포함한 전체 코드입니다.
import os
from dotenv import load_dotenv
from langchain import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
# .env 파일에서 API 키 로드
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
# OpenAI LLM 설정
llm = ChatOpenAI(openai_api_key=OPENAI_API_KEY, temperature=0.7)
# 대화 메모리 객체 생성 (ConversationBufferMemory 사용)
memory = ConversationBufferMemory()
# 대화 체인에 LLM 및 메모리 연결
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)
# 새로운 사용자 입력 받기
user_input = input("사용자: ")
# 대화 진행
response = conversation.predict(input=user_input)
print(f"AI: {response}")
import os
from dotenv import load_dotenv
from langchain import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
# .env 파일에서 API 키 로드
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
# OpenAI LLM 설정
llm = ChatOpenAI(openai_api_key=OPENAI_API_KEY, temperature=0.7)
# 대화 메모리 객체 생성 (ConversationBufferMemory 사용)
memory = ConversationBufferMemory()
# 대화 체인에 LLM 및 메모리 연결
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)
# 사용자가 계속 대화할 수 있도록 반복문 사용
print("AI와의 대화를 시작합니다. '종료'라고 입력하면 대화가 종료됩니다.")
while True:
user_input = input("사용자: ")
if user_input.lower() in ["종료", "quit", "exit"]:
print("대화를 종료합니다.")
break
# 대화 진행
response = conversation.predict(input=user_input)
print(f"AI: {response}")
필요한 패키지 설치
pip install langchain openai python-dotenv
.env
파일 설정
프로젝트 디렉토리에 .env
파일을 생성하고, 다음과 같이 OpenAI API 키를 저장합니다.
OPENAI_API_KEY=your_openai_api_key_here
실제 API 키로 your_openai_api_key_here
를 대체해야 합니다.
코드 실행
터미널에서 다음과 같이 실행합니다.
python main.py
그러면 사용자 입력을 기다립니다.
사용자: 오늘 날씨가 어떤가요?
AI: 현재 위치에 따라 날씨 정보가 다르지만, 일반적으로 인터넷에서 최신 날씨 정보를 확인해 보세요.
이렇게 LangChain의 메모리 기능을 활용하여 AI와의 대화에서 문맥을 유지하고, 더욱 자연스럽고 일관성 있는 대화를 구현할 수 있습니다. 메모리를 사용함으로써 AI는 이전 대화 내용을 기억하고, 그에 따라 적절한 응답을 제공합니다.
LangChain은 이 외에도 다양한 메모리 옵션과 기능을 제공하므로, 프로젝트의 필요에 맞게 적절히 활용해 보세요. 메모리를 잘 활용하면 AI와의 대화가 한층 더 인간적이고 자연스러워질 것입니다.