안녕하세요!
오늘은 대화 에이전트에 메모리를 연결하는 방법에 대해 쉽게 자세히 알아보겠습니다. 이를 통해 에이전트가 이전 대화를 기억하고, 자연스럽게 이어지는 대화를 유지할 수 있습니다. 마지막에는 작동 가능한 전체 실습 코드를 제공하겠습니다. OPENAI_API_KEY는 .env
파일에 저장하여 불러올 것입니다.
대화형 에이전트는 사용자와 상호 작용하면서 정보를 제공하거나 작업을 수행하는 프로그램입니다. 그러나 이전 대화를 기억하지 못한다면 자연스러운 대화 흐름이 끊어질 수 있습니다. 그래서 메모리를 에이전트에 연결하여 대화의 맥락을 유지하는 것이 중요합니다.
먼저 필요한 파이썬 라이브러리를 설치해야 합니다. 터미널이나 명령 프롬프트에서 다음 명령어를 실행하세요:
pip install openai langchain python-dotenv
openai
: OpenAI의 GPT 모델을 사용하기 위한 라이브러리입니다.langchain
: 에이전트와 메모리를 관리하기 위한 라이브러리입니다.python-dotenv
: .env
파일에서 환경 변수를 로드하기 위한 라이브러리입니다.OpenAI API 키를 받아야 합니다. OpenAI 홈페이지에서 API 키를 생성하세요.
생성한 API 키는 프로젝트 디렉토리의 .env
파일에 다음과 같이 저장합니다:
OPENAI_API_KEY=your_openai_api_key_here
※ your_openai_api_key_here
부분을 실제 API 키로 바꾸세요.
파이썬 스크립트에서 필요한 라이브러리를 불러옵니다:
import os
from dotenv import load_dotenv
from langchain import OpenAI
from langchain.memory import ConversationBufferMemory
from langchain.agents import initialize_agent, AgentType, load_tools
.env
파일에 저장된 OPENAI_API_KEY를 불러옵니다:
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
대화 내용을 저장할 메모리 객체를 생성합니다:
memory = ConversationBufferMemory(memory_key="chat_history")
ConversationBufferMemory
는 대화 기록을 저장하는 클래스입니다.memory_key
는 메모리를 참조할 때 사용할 키입니다.OpenAI의 GPT 모델을 초기화합니다:
llm = OpenAI(temperature=0, openai_api_key=OPENAI_API_KEY)
temperature=0
은 응답의 일관성을 높여줍니다.에이전트가 사용할 도구를 설정합니다:
tools = load_tools(["llm-math"], llm=llm)
llm-math
도구를 사용하면 수학 계산이 가능합니다.메모리와 도구를 에이전트에 연결합니다:
agent_chain = initialize_agent(
tools,
llm,
agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
memory=memory,
verbose=True
)
AgentType.CONVERSATIONAL_REACT_DESCRIPTION
은 대화형 에이전트를 생성하는 에이전트 유형입니다.verbose=True
로 설정하면 에이전트의 사고 과정을 출력합니다.에이전트에게 맛있는 태국 음식 레시피를 물어봅니다:
response1 = agent_chain.run(input="맛있는 태국 음식 레시피를 알려줘.")
print(response1)
이전에 언급된 요리 중 가장 매운 것을 물어봅니다:
response2 = agent_chain.run(input="그 중에서 어떤 요리가 가장 매워?")
print(response2)
에이전트는 이전 대화를 기억하고 적절한 답변을 제공합니다.
해당 요리를 만들기 위한 장보기 목록을 요청합니다:
response3 = agent_chain.run(input="그 요리를 만들기 위한 장보기 목록을 알려줘.")
print(response3)
에이전트는 다시 이전 대화를 참고하여 필요한 재료 목록을 제공합니다.
아래는 위의 모든 내용을 포함한 전체 코드입니다. 이 코드를 실행하면 에이전트와 자연스러운 대화를 할 수 있습니다.
import os
from dotenv import load_dotenv
from langchain import OpenAI
from langchain.memory import ConversationBufferMemory
from langchain.agents import initialize_agent, AgentType, load_tools
# 환경 변수 로드
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
# 메모리 객체 생성
memory = ConversationBufferMemory(memory_key="chat_history")
# 언어 모델 설정
llm = OpenAI(temperature=0, openai_api_key=OPENAI_API_KEY)
# 도구 설정
tools = load_tools(["llm-math"], llm=llm)
# 에이전트 생성
agent_chain = initialize_agent(
tools,
llm,
agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
memory=memory,
verbose=True
)
# 첫 번째 질문
response1 = agent_chain.run(input="맛있는 태국 음식 레시피를 알려줘.")
print("에이전트:", response1)
# 두 번째 질문
response2 = agent_chain.run(input="그 중에서 어떤 요리가 가장 매워?")
print("에이전트:", response2)
# 세 번째 질문
response3 = agent_chain.run(input="그 요리를 만들기 위한 장보기 목록을 알려줘.")
print("에이전트:", response3)
코드를 실행하면 에이전트와의 대화가 출력됩니다. 에이전트는 이전 대화를 기억하고, 자연스럽게 이어지는 답변을 제공합니다.
에이전트: 맛있는 태국 음식으로는 팟타이, 그린 커리, 똠얌꿍 등이 있어요. 어떤 레시피를 알려드릴까요?
에이전트: 언급된 요리 중에서는 그린 커리가 가장 매워요.
에이전트: 그린 커리를 만들기 위해 필요한 재료는 닭고기, 그린 커리 페이스트, 코코넛 밀크, 야채(가지, 피망 등), 피쉬 소스, 설탕, 바질 등이 있어요.
이번 시간에는 대화 에이전트에 메모리를 연결하여 이전 대화를 기억하고, 사용자와 자연스러운 상호 작용을 유지하는 방법을 배웠습니다. 또한, 에이전트에 도구를 연결하여 추가적인 기능을 제공할 수 있다는 것도 알게 되었습니다.
이렇게 하면 에이전트가 더 똑똑해지고, 사용자 경험이 향상됩니다. 이제 이 코드를 바탕으로 자신만의 에이전트를 만들어보세요!