LangGraph 코드 예제
예제 시나리오는 에이전트가 어떤 결정 노드에서 멈출지 계속할지를 판단하고, 멈추지 않을 경우 툴 실행 노드(tools)를 호출한 뒤 다시 결정 노드로 돌아오는 루프를 구현하는 것이다. 노드는 간단히 print로 동작을 표시하고, 상태의 all_actions에 수행한 액션을 기록하도록 하겠다.
from langgraph.graph import StateGraph, END
from typing import TypedDict, List, Annotated
import operator
# 1. 상태 정의 및 그래프 초기화
class State(TypedDict):
input: str
all_actions: Annotated[List[str], operator.add]
graph = StateGraph(State)
# 2. 노드 함수 정의
def model_node(state: State):
# 모델 노드: 다음 행동 결정 또는 응답 완료
print("모델 노드 실행 - 결정 중...")
# 상태에 액션 기록 추가
return {"all_actions": ["model_decision"]}
def tool_node(state: State):
# 툴 노드: 어떤 도구를 실행
print("툴 노드 실행 - 도구 사용 중...")
return {"all_actions":["tool_action"]}
# 3. 노드를 그래프로 추가
graph.add_node("model", model_node)
graph.add_node("tools", tool_node)
# 4. 엣지 정의
# 그래프 시작 지점 설명: 시작하면 model 노드부터 실행
graph.set_entry_point("model")
# 일반 엣지: tools 노드 실행 후 항상 model 노드로 돌아옴
graph.add_edge("tools", "model")
# 조건부 엣지: model 노드 실행 후 상태에 따라 tools 또는 END로 분기
def should_continue(state: State) -> str:
# 항상 continue 반환
return "continue"
graph.add_conditional_edges("model", should_continue, {
"continue": "tools",
"end": END
})
# 5. 그래프 컴파일 및 실행
app = graph.compile()
result_state = app.invoke({"input": "Hello"})
print("그래프 실행 완료, 최종 상태:", result_state)
코드 분석
model 노드는 에이전트의 판단을 모사한 곳으로, 실제로는 LLM을 호출해 다음 행동을 결정하고 사용자 응답을 생성하는 역할을 한다. tools 노드는 에이전트가 선택한 툴을 실행하는 단계에 해당한다.
엣지 설정 부분에서는 그래프가 시작되면 첫 노드로 model을 호출하도록 지정했다. 이어서 models 노드에 엣지를 추가하여 툴 노드 실행 후에는 항상 다시 모델 노드로 돌아가도록 연결했다.
마지막으로 조건부 엣지를 통해 모델 노드 실행 후 분기 로직을 설정하였다. 여기서는 should_continue 함수가 continue나 end 문자열을 반환하도록 하고, 반환값이 continue이면 tools 노드를, end이면 END 노드를 실행하도록 매핑하였다.이 예시에서는 should_continue가 매번 continue를 반환하도록 하였으므로 실제로는 model → tools → model 형태의 루프가 한 번 실행되고 나서, 두 번째 모델 노드 실행 시에도 계속 루프를 돌려고 하다가 END로 가지 못하고 종료될 것이다.
이 간단한 흐름을 통해 LangGraph에서 상태를 공유하면서 노드와 엣지 규칙에 따라 실행이 진행되는 모습을 볼 수 있다. app.invoke로 그래프를 실행하면, State에 초기 입력이 주어지고 엔트리 노드인 model이 실행된다. 그런 다음 조건부 엣지에 의해 tools 노드가 호출되고, 다시 model로 돌아와서 조건을 확인한다. 이러한 과정이 END에 도달하거나 더 이상 수행할 노드가 없을 때까지 반복된다. 최종적으로 result_state에는 그래프 실행 후의 상태 객체가 담기는데, 예제의 경우 all_actions 리스트에 ["model_decision", "tool_action", "model_decision" ] 처럼 실행한 순서대로 액션이 누적되어 있을 것이다. 물론 실제 LangGraph 활용 시에는 LLM의 출력과 툴 실행 결과 등에 따라 상태가 더욱 복잡하게 채워진다.
'AI4C' 카테고리의 다른 글
LangGraph Persistence Layer 동작 원리 (0) | 2025.05.13 |
---|---|
LangGraph 아키텍처 (0) | 2025.05.11 |
LangGraph Agent 실행 (0) | 2025.05.07 |