langgraph / / 2024. 12. 3. 07:53

[langgraph] ReAct 에이전트에 메모리 추가하는 방법

LangGraph 공식문서를 번역한 내용입니다. 필요한 경우 부연 설명을 추가하였고 이해하기 쉽게 예제를 일부 변경하였습니다. 문제가 되면 삭제하겠습니다.

https://langchain-ai.github.io/langgraph/how-tos/create-react-agent-memory/

이 가이드는 미리 구축된 ReAct 에이전트에 메모리를 추가하는 방법을 설명한다. 미리 구축된 ReAct 에이전트를 시작하는 방법에 대한 튜토리얼은 이 링크를 참조하라.

메모리는 create_react_agent 함수에 체크포인터(checkpointer)를 전달함으로써 에이전트에 추가할 수 있다.

준비

우선, 필요한 패키지를 설치하자.

pip install langgraph langchain-openai

코드

# First we initialize the model we want to use.
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI

load_dotenv()

model = ChatOpenAI(model="gpt-4o-mini", temperature=0)


from typing import Literal

from langchain_core.tools import tool


@tool
def get_weather(city: Literal["서울", "부산"]):
    """Use this to get weather information."""
    if city == "서울":
        return "서울은 흐릴것 같아요"
    elif city == "부산":
        return "부산은 항상 맑아요"
    else:
        raise AssertionError("Unknown city")


tools = [get_weather]

from langgraph.checkpoint.memory import MemorySaver

memory = MemorySaver()


from langgraph.prebuilt import create_react_agent

graph = create_react_agent(model, tools=tools, checkpointer=memory)

사용

기억할 수 있도록 여러 번 작업을 해보자.

def print_stream(stream):
    for s in stream:
        message = s["messages"][-1]
        if isinstance(message, tuple):
            print(message)
        else:
            message.pretty_print()
config = {"configurable": {"thread_id": "1"}}
inputs = {"messages": [("user", "서울 날씨 어때?")]}

print_stream(graph.stream(inputs, config=config, stream_mode="values"))
================================ Human Message =================================

서울 날씨 어때?
================================== Ai Message ==================================
Tool Calls:
  get_weather (call_IMFHxOZmtttbvxoAa56Tra5F)
 Call ID: call_IMFHxOZmtttbvxoAa56Tra5F
  Args:
    city: 서울
================================= Tool Message =================================
Name: get_weather

서울은 흐릴것 같아요
================================== Ai Message ==================================

서울은 흐릴 것 같습니다.

동일 threadId를 넘기면 채팅 이력이 유지된다는 것을 확인할 수 있다.

inputs = {"messages": [("user", "거기는 무엇으로 유명해?")]}
print_stream(graph.stream(inputs, config=config, stream_mode="values"))
================================ Human Message =================================

거기는 무엇으로 유명해?
================================== Ai Message ==================================

서울은 다양한 문화와 역사를 가진 도시로 유명합니다. 다음은 서울의 주요 명소와 특징입니다:

1. **경복궁**: 조선 왕조의 주요 궁궐로, 아름다운 건축물과 정원이 있습니다.
2. **N서울타워**: 서울의 상징적인 타워로, 전망대에서 도시 전경을 감상할 수 있습니다.
3. **명동**: 쇼핑과 음식으로 유명한 지역으로, 많은 관광객들이 방문합니다.
4. **홍대**: 젊은이들이 많이 모이는 지역으로, 예술과 음악, 다양한 카페와 클럽이 있습니다.
5. **한강**: 서울을 가로지르는 강으로, 자전거 타기, 피크닉, 수상 스포츠 등 다양한 활동을 즐길 수 있습니다.
6. **전통시장**: 남대문시장, 광장시장 등에서 한국의 전통 음식과 문화를 경험할 수 있습니다.

서울은 현대적인 도시와 전통이 조화를 이루는 매력적인 곳입니다.

LangGraph 참고 자료

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유