LangGraph 코드 예제

2025. 5. 11. 21:34·AI4C

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
'AI4C' 카테고리의 다른 글
  • LangGraph Persistence Layer 동작 원리
  • LangGraph 아키텍처
  • LangGraph Agent 실행
bde574786
bde574786
  • bde574786
    꾸러기해커
    bde574786
  • 전체
    오늘
    어제
    • 분류 전체보기 (162) N
      • 워게임 (107)
        • 웹해킹 (87)
        • 시스템해킹 (6)
        • 리버싱 (12)
        • 암호학 (2)
      • 보안 (2)
        • 웹 (2)
      • Report (7) N
        • One-Day (1)
        • Zero-Day (6) N
      • Git (35)
      • CTF Write Up (5)
        • b01lers CTF (5)
      • AI4C (4) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    case mapping collision
    Blind SQL Injection
    git
    LFI
    dom clobbering
    XSS
    CVE
    Stack Buffer Overflow
    sql injection
    type juggling
    Path Traversal
    SSRF
    crlf injection
    url globbing
    Wordpress
    prototype pollution
    RCE
    php deserialization
    SSTI
    return address overwrite
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
bde574786
LangGraph 코드 예제
상단으로

티스토리툴바