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

[langgraph] ReAct 에이전트를 사용하는 방법

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

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

여기서는 날씨를 확인할 수 있는 간단한 ReAct 에이전트 앱을 만들 것이다. 이 앱은 에이전트(LLM)와 도구들로 구성된다. 앱과 대화할 때, 먼저 에이전트(LLM)를 호출하여 도구를 사용할지 여부를 결정한다. 그런 다음 다음과 같은 루프를 실행한다.

  1. 에이전트가 행동을 취하라고 말한 경우(즉, 도구를 호출해야 할 경우), 도구를 실행하고 결과를 에이전트에 전달한다.
  2. 에이전트가 도구를 실행하라고 하지 않은 경우, 작업을 완료하고 사용자에게 응답한다.

준비

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

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)


# For this tutorial we will use custom tool that returns pre-defined values for weather in two cities (NYC & SF)

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]


# Define the graph

from langgraph.prebuilt import create_react_agent

graph = create_react_agent(model, tools=tools)

사용

우선, 생성한 그래프를 시각화하자.

from IPython.display import Image, display

display(
    Image(
        graph.get_graph().draw_mermaid_png(
            output_file_path="how-to-create-react-agent.png"
        )
    )
)

def print_stream(stream):
    for s in stream:
        message = s["messages"][-1]
        if isinstance(message, tuple):
            print(message)
        else:
            message.pretty_print()

도구 호출이 필요한 입력값으로 앱을 실행하자.

inputs = {"messages": [("user", "what is the weather in sf")]}
print_stream(graph.stream(inputs, stream_mode="values"))
================================ Human Message =================================

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

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

서울은 흐릴 것 같습니다. 추가적인 날씨 정보가 필요하시면 말씀해 주세요!

이제 도구가 필요하지 않는 질문을 해보자.

inputs = {"messages": [("user", "who built you?")]}
print_stream(graph.stream(inputs, stream_mode="values"))
================================ Human Message =================================

너는 누가 만들었어?
================================== Ai Message ==================================

저는 OpenAI에 의해 개발된 인공지능 언어 모델입니다. OpenAI는 인공지능 연구와 개발을 전문으로 하는 회사입니다.

LangGraph 참고 자료

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