배경 및 목적
이번 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 langgraph3. 상태(State) 정의
State 스키마: 그래프의 모든 노드와 에지에 입력으로 사용되는 상태를 정의합니다.
TypedDict 사용: Python의
TypedDict를 사용하여graph_state키를 포함하는 상태 사전을 정의합니다.
from typing_extensions import TypedDict
class State(TypedDict):
graph_state: str4. 노드(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_2와node_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메서드는 그래프를 동기식으로 실행하여 각 단계가 완료될 때까지 기다린 후 다음 단계로 진행합니다.