AI4C

LangGraph Agent 실행

bde574786 2025. 5. 7. 21:00

LangGraph Agent 코드

LangGraph 프레임워크는 대화형 에이전트를 그래프 형태의 워크플로우로 구성하도록 설계되었다. 각 노드는 개별 기능이나 단계를 수행하며, 노드들이 연결되어 전체 대화 흐름(그래프)을 형성한다. 예를 들어, 하나의 노드는 사용자 입력을 처리하고, 다음 노드는 AI 모델을 통해 응답을 생성하며, 또 다른 노드는 그 응답을 사용자에게 출력하는 식이다.

 

가장 기본적인 상호작용 기능에 초점을 맞춘 간단한 버전으로, 사용자 입력을 받아 응답을 생성하는 최소한의 흐름만 구현되어 있다. 

더보기

simple_agent.py

import sys
import os

sys.path.insert(0, os.path.abspath("."))
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
load_dotenv()
print(os.getenv("OPENAI_API_KEY"))
# Define the State structure with annotations
class State(TypedDict):
    messages: Annotated[list, add_messages]


# Create a StateGraph and language model instance
graph_builder = StateGraph(State)
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)


# Define the chatbot function
def chatbot(state: State):
    return {"messages": [llm.invoke(state["messages"])]}


# Build the graph structure
graph_builder.add_node("chatbot", chatbot)
graph_builder.add_edge(START, "chatbot")
graph_builder.add_edge("chatbot", END)
graph = graph_builder.compile()

# Main interaction loop
while True:
    user_input = input("사용자: ")
    if user_input.lower() in ["quit", "exit", "q"]:
        print("Goodbye!")
        break
    for event in graph.stream({"messages": ("user", user_input)}):
        for value in event.values():
            print("에이전트:", value["messages"][-1].content)

 

코드 분석

에이전트 워크플로우 구성

LangGraph 라이브러리에서 필요한 클래스와 함수를 임포트하고 에이전트의 동작 흐름을 정의하는 여러 노드들을 생성한다. Pseudo-code(의사 코드)로 표현하면 다음과 같은 단계로 이루어져 있을 것이다.

  • 입력 노드: 사용자로부터 질문을 입력 대기(ex: 콘솔에서 사용자 입력 대기)
  • 처리 노드: Language Model 등 AI를 활용하여 응답을 생성하는 부분. LangGraph의 모듈을 통해 프롬프트를 언어 모델에 전달하고 결과를 받을 수 있음(ex: OpenAI API를 호출하여 답변 생성)
  • 출력 노드: 모델이나 로직이 생성한 답변을 사용자에게 출력(ex: 콘솔에 답변 표시)

이러한 노드들을 LangGraph의 그래프로 연결하여 순서대로 실행되도록 설정한다. 즉, 입력 노드, 처리 노드, 출력 노드 순으로 데이터 흐름이 이어지게 워크플로우를 구성한다.

 

코드 흐름

simple_agent.py 코드에서는 위 워크플로우에 따라 코드가 작성되어 있다. 프로그램을 실행하면 먼저 에이전트가 초기화되고 사용자 입력을 받을 준비를 한다. 그런 다음 루프를 돌면서 사용자의 질문을 받으면 즉시 처리 노드로 전달하여 응답을 생성하고, 그 결과를 출력 노드를 통해 화면에 보여준다. 이 전체 사이클이 LangGraph 프레임워크 안에서 일관되게 동작하도록 관리된다. 

LangGraph가 실제로 등록하고 실행하는 노드는 chatbot 하나이지만 코드의 기능적 흐름에서는 입력, 처리, 출력이라는 3단계 역할을 수행하므로 3개의 논리적 노드라고도 설명할 수 있다.

 

확장 방향

추후 개발자는 이 예제를 기반으로 에이전트에 기능을 추가하고 개선할 수 있다.

  • 사용자 질문을 전처리하거나 의도를 파악하는 자연어 이해 노드
  • 외부 지식 베이스나 데이터베이스를 질의하는 정보 조회 노드
  • 대화 내역을 기억하여 문맥을 유지하는 메모리 노드를 그래프에 추가

 

실행

스크립트를 실행하면 콘솔에서 에이전트와 상호 작용할 수 있는 프롬프트가 나타날 것이다. 프롬프트에서 질문을 입력하면 에이전트가 이에 대한 응답을 텍스트로 출력한다.

사용자: 안녕하세요?
에이전트: 안녕하세요! 무엇을 도와드릴까요?

사용자: 1+1은 얼마죠?
에이전트: 1+1은 2입니다.

사용자: LangGraph는 무엇인가요?
에이전트: LangGraph는 언어학적 그래프 분석을 위한 오픈소스 라이브러리입니다. 
이 라이브러리는 자연어 처리 및 텍스트 마이닝 작업을 수행하는 데 사용될 수 있으며, 
특히 텍스트 데이터의 구조와 관계를 시각화하고 분석하는 데 유용 합니다. 
LangGraph는 Python으로 작성되었으며, 다양한 언어학적 그래프 분석 기능을 제공합니다.

 

사용자가 몇 가지 질문을 했을 때 에이전트가 어떻게 응답하는지 보여준다. 실제로 출력되는 답변은 구현된 로직이나 사용된 언어 모델에 따라 달라질 수 있다. 중요한 것은 에이전트가 입력을 받고 이에 맞는 출력을 생성하는 기본 사이클이 제대로 작동하는지 확인하는 것이다.

 

Reference