박정기
박정기
🗡️ AI 레전드
🎖️ 마스터 파트너
🚀 SNS 챌린지 달성자

[1DAY 1랭그래프] 가장 간단한 그래프 만들기 #1일차

배경 및 목적

이번 13기 AI 스터디에 앞서, 1DAY 1랭그래프, 즉 하루에 1개의 랭그래프 개념을 설명하는 부분을 기획하게 됐습니다.

13기 랭그래프로 나만의 AI 에이전트 만들기 스터디가 궁금하다면!?

주황색 배경의 한국 광고

-> 링크 접속하기

이 프로젝트의 목표는 랭그래프를 쉽게 입문하실 수 있게 상세한 개념부터 코드까지 함께 공부해보실 수 있게 정리해서 드릴 예정입니다.

1일차에서는 가장 간단한 그래프를 만들고 실습해 보도록 합니다.

중요 키워드

  • 상태

  • 노드

  • 에지

참고 자료

실습 가능한 코랩 링크

랭체인 공식 아카데미

활용 툴

코랩, 파이썬, 랭체인, 랭그래프

실행 과정

코랩에서 랭체인, 랭그래프 라이브러리를 활용하여 그래프에 대한 개념설명부터 실습까지 진행을 하였습니다.

결과 및 인사이트

핵심 요약: 가장 간단한 그래프 만들기 with Langgraph

1. 소개

  • 목표: Langgraph를 사용하여 3개의 노드와 1개의 조건부 에지를 포함하는 간단한 그래프를 구축합니다.

  • 도구: Python의 TypedDict를 사용하여 그래프의 상태(State)를 정의하고, Langgraph 라이브러리를 활용하여 그래프를 구성 및 실행합니다.

2. 환경 설정

  • 라이브러리 설치: langgraph 라이브러리를 최신 버전으로 설치합니다.

%%capture --no-stderr
%pip install --quiet -U langgraph

3. 상태(State) 정의

  • State 스키마: 그래프의 모든 노드와 에지에 입력으로 사용되는 상태를 정의합니다.

  • TypedDict 사용: Python의 TypedDict를 사용하여 graph_state 키를 포함하는 상태 사전을 정의합니다.

from typing_extensions import TypedDict

class State(TypedDict):

graph_state: str

4. 노드(Nodes) 정의

  • 노드의 역할: 각 노드는 현재 상태를 받아 새로운 상태를 반환하는 Python 함수로 정의됩니다.

  • 노드 함수 예시:

def node_1(state):

print("---Node 1---")

return {"graph_state": state['graph_state'] + " I am"}

def node_2(state):

print("---Node 2---")

return {"graph_state": state['graph_state'] + " happy!"}

def node_3(state):

print("---Node 3---")

return {"graph_state": state['graph_state'] + " sad!"}

5. 에지(Edges) 정의

  • 에지의 역할: 노드 간의 연결을 정의합니다. 일반 에지는 항상 특정 노드로 이동하고, 조건부 에지는 로직에 따라 다음 노드를 선택합니다.

  • 조건부 에지 함수 예시: decide_mood 함수는 50% 확률로 node_2 또는 node_3으로 이동합니다.

import random

from typing import Literal

def decide_mood(state) -> Literal["node_2", "node_3"]:

user_input = state['graph_state']

if random.random() < 0.5:

return "node_2"

return "node_3"

6. 그래프 구성(Graph Construction)

  • StateGraph 초기화: 정의한 State 클래스로 StateGraph를 초기화합니다.

  • 노드 추가: node_1, node_2, node_3를 그래프에 추가합니다.

  • 에지 추가: START 노드에서 node_1으로 연결하고, node_1에서 조건부 에지를 통해 node_2 또는 node_3으로 이동하며, 마지막으로 node_2node_3에서 END 노드로 연결합니다.

  • 그래프 컴파일 및 시각화: 그래프를 컴파일하고 머메이드 다이어그램으로 시각화합니다.

from IPython.display import Image, display

from langgraph.graph import StateGraph, START, END

builder = StateGraph(State)

builder.add_node("node_1", node_1)

builder.add_node("node_2", node_2)

builder.add_node("node_3", node_3)

builder.add_edge(START, "node_1")

builder.add_conditional_edges("node_1", decide_mood)

builder.add_edge("node_2", END)

builder.add_edge("node_3", END)

graph = builder.compile()

display(Image(graph.get_graph().draw_mermaid_png()))

7. 그래프 호출(Graph Invocation)

  • nvoke 메서드: 그래프를 실행하여 초기 상태를 설정하고, 정의된 노드를 순차적으로 실행한 후 최종 상태를 반환합니다.

  • 실행 예시:

graph.invoke({"graph_state" : "Hi, this is Lance."})
  • 실행 흐름:

1. START 노드에서 실행 시작.

2. node_1 실행: 상태에 " I am" 추가.

3. 조건부 에지를 통해 node_2 또는 node_3으로 이동.

4. 선택된 노드(`node_2` 또는 node_3) 실행: 상태에 " happy!" 또는 " sad!" 추가.

5. END 노드에서 실행 종료.

  • 최종 상태 예시:

{'graph_state': 'Hi, this is Lance. I am sad!'}

8. 시각화 및 실행

  • 그래프 시각화: 머메이드 다이어그램을 통해 그래프 구조를 시각적으로 확인.

  • 동기적 실행: invoke 메서드는 그래프를 동기식으로 실행하여 각 단계가 완료될 때까지 기다린 후 다음 단계로 진행합니다.

노드 다이어그램의 예

6

👉 이 게시글도 읽어보세요