LangGraph 튜토리얼: 파이썬으로 만드는 나만의 챗봇 그래프

LangGraph 튜토리얼을 찾고 계신가요? 이 튜토리얼에서는 파이썬으로 GPT 챗봇을 직접 만들어보는 실습을 통해 LangGraph의 기본 개념인 State, Node, Edge 사용법을 자세히 설명합니다. 초보 개발자도 쉽게 이해할 수 있도록 단계별로 구성했어요.

 

0. LangGraph란 무엇인가요?

LangChain 생태계의 일원인 LangGraph는 LangGraph는 LangChain 기반의 파이썬 라이브러리로, GPT LangGraph를 통해 대화 흐름을 다이나믹하게 구성할 수 있도록 도와줍니다. 이 튜토리얼에서는 가장 기본적인 StateGraph 예제부터, 대화 상태를 기억하는 Langchain 그래프까지 함께 만들어 볼 거예요.

 

LangGraph 튜토리얼

1. LangGraph 튜토리얼: 그래프의 기본 단위 이해하기

이번 LangGraph 튜토리얼에서는 가장 기본적은 구조를 통해 챗봇 대화를 구성하는 법을 익힙니다. LangGraph를 활용한 그래프는 크게 3가지 구성 요소로 이루어집니다.

  • State: 그래프 안에서 주고받을 정보를 담는 ‘상태’입니다. 일종의 기억이라고 보면 돼요.
  • Node: 상태를 입력받아 뭔가를 처리하는 ‘작업 단위’입니다. 파이썬 함수 형태로 정의합니다.
  • Edge: 노드끼리의 연결입니다. 정보의 흐름을 만들어주죠.

 

2. LangGraph 튜토리얼: State 정의하기 – 정보의 틀 만들기

그래프에서 상태(State)는 정보를 저장하고 전달하는 ‘그릇’입니다. 이 상태는 파이썬의 TypedDict를 기반으로 타입이 지정된 딕셔너리 형태로 정의합니다.

from typing_extensions import TypedDict

class MyState(TypedDict):

counter: int

alphabet: list[str]

– counter는 숫자형 상태입니다. 예: 몇 번 실행됐는지 추적
– alphabet은 문자열 리스트입니다. 예: [“hello”] 같은 기록을 저장

이렇게 상태의 기본 구조를 만들었으면, 이제 이 상태를 사용하는 그래프를 선언해볼게요.

 

3. LangGraph 튜토리얼: 상태 그래프 생성하기

LangGraph에서는 StateGraph라는 클래스를 사용해 상태 기반 그래프를 정의합니다.

from langgraph.graph import StateGraph

builder = StateGraph(MyState)

이렇게 선언하면 MyState 타입을 기반으로 상태가 흘러가는 그래프의 기본 틀이 완성됩니다. LangGraph 튜토리얼의 핵심은 바로 상태 기반 대화 흐름을 설계하는 데 있습니다.

LangGraph 챗봇 예제 이미지
4. 노드(Node) 만들기 – 작업을 수행하는 단위

그래프에서 노드는 데이터를 받아서 어떤 작업을 수행하는 함수입니다. 아래처럼 하나의 노드를 함수로 정의할 수 있어요.

def nodeA(state: MyState) -> MyState:

    state["counter"] += 1

    state["alphabet"] = ["hello"]

    return state
  • state를 입력받아 counter 값을 1 증가시키고
  • alphabet에는 “hello”라는 값을 넣습니다.
  • 그 후 업데이트된 state를 다시 반환합니다.

잠깐! LangGraph 노드 시작부터 AI Agent 마스터까지 한 번에 배우고 싶다면?

5. 노드 등록하고 엣지로 연결하기

노드를 그래프에 등록하고, 실행 순서를 만들기 위해 엣지(Edge)를 연결해야 합니다.

builder.add_node("chatbot", nodeA)

builder.set_entry_point("chatbot")

builder.set_finish_point("chatbot")
  • chatbot이라는 이름으로 노드를 등록하고
  • 해당 노드를 시작점이자 끝점으로 설정합니다.

 

6. 그래프 컴파일 및 실행

그래프를 완성했으면 이제 실행 가능한 객체로 만들어야 합니다.

app = builder.compile()

이제 이 앱(app)에 상태를 넣어서 실행해볼 수 있어요!

state = {"counter": 0, "alphabet": []}

result = app.invoke(state)

print(result)

출력:

{'counter': 1, 'alphabet': ['hello']}

7. Annotated로 상태 누적하기 (기억 기능 구현)

챗봇처럼 과거 대화 내역을 누적해서 저장하려면, 단순한 리스트 저장만으로는 부족합니다. 이럴 때는 Annotated를 활용해 리스트에 계속 값을 누적하도록 설정할 수 있어요.

from typing_extensions import Annotated
from operator import add

class MemoryState(TypedDict):
    counter: int
    alphabet: Annotated[list[str], add]

 

이 설정 덕분에, 매 실행마다 리스트가 누적됩니다:

# 첫 실행 → ["hello"]
# 두 번째 실행 → ["hello", "hello"]

 

8. GPT 모델을 이용한 대화 챗봇 만들기

이제 실제로 GPT-4와 대화를 주고받는 챗봇 노드를 만들어봅니다.

from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(model="gpt-4")

 

그리고 이 GPT 모델을 활용하는 노드를 정의해봅니다.

def chatbot(state: ChatState) -> ChatState:

    response = llm.invoke(state["messages"])

    state["messages"].append(response)

    return state

이제 이 노드를 그래프에 등록하고 실행하면, 실제로 사용자의 메시지를 GPT에게 전달하고 응답을 받아서 상태에 저장하는 챗봇이 완성됩니다. LangGraph 튜토리얼의 핵심은 바로 상태 기반 대화 흐름을 설계하는 데 있습니다.

9. 대화 루프 구현하기

아래와 같이 사용자의 입력을 받고, state에 저장하고, 응답을 출력하는 간단한 대화 루프도 구현할 수 있어요.

while True:

    user_input = input("User: ")

    if user_input.lower() in ["exit", "quit"]:

        print("Goodbye!")

        break

    state["messages"].append({"role": "user", "content": user_input})

    response = app.invoke(state)

    print("Assistant:", response["messages"][-1]["content"])

 

10. 메시지 상태 자동화 – MessageState 활용하기

매번 messages 필드를 선언하고, Annotatedadd를 붙이기가 번거롭다면?
LangGraph에서는 이미 만들어진 메시지 전용 상태인 MessageState를 제공합니다.

from langgraph.prebuilt import MessageState

builder = StateGraph(MessageState)

 

이걸 쓰면 메시지 관련 설정을 다 알아서 해주기 때문에, 단순 챗봇을 빠르게 만들기에 유용합니다.

 

마무리: 이제 LangGraph 초보 탈출!

이번 튜토리얼에서는 LangGraph의 세 가지 핵심 요소인 State, Node, Edge를 활용해서, 간단한 챗봇 그래프를 직접 구성해봤습니다.

  • 상태는 데이터를 담는 구조이며
  • 노드는 그 데이터를 처리하는 함수이고
  • 엣지는 실행 순서를 잇는 흐름이었습니다.

추후에는 여러 노드를 연결해 더욱 복잡한 대화 흐름이나 조건 분기, 다양한 기억 요소 등을 추가하는 고급 그래프도 구성할 수 있습니다.

 

🧩 마무리하며: LangGraph, 복잡한 GPT 챗봇도 당신의 손으로

지금까지 이 LangGraph 튜토리얼을 따라오며

파이썬으로 상태(State)를 정의하고,
노드(Node)를 통해 동작을 구현하고,
엣지(Edge)로 대화 흐름을 연결하는 방법까지 배워봤습니다.

처음엔 복잡해 보였을 수도 있지만, 결국 우리가 한 일은 함수 하나 만들고, 상태를 연결한 것뿐이에요.
이 단순한 구조 안에서 얼마나 유연하고 다양한 챗봇 동작이 가능한지 느끼셨을 거라 생각해요.

특히, Annotated, MessageState 등을 활용해 대화 내용을 누적하고, GPT 모델을 연결해 실시간 반응까지 구현한 경험은 앞으로 더 복잡한 Langchain 그래프로 확장하는 데 훌륭한 디딤돌이 될 거예요.

 

가장 빨리 학습하고 전파하는 얼리어답터!
‘모두의 AI 케인’님의 멀티 AI 에이전트로
LangGraph부터 AI agent까지 한 번에 시작하세요.

 

🔗 관련 글 더 읽어보기
모델 컨텍스트 프로토콜(MCP)로 만드는 AI 에이전트 : 1편
[Tech Hour] 1화 : RAG 성능 최적화의 비밀_파싱과 청킹 전략
구글 스태프가 알려주는 AI의 미래: 에이전트형 LLM 기술 완전 정복

Facebook Comments