글 / LangGraph·MCP

LangGraph 조건 엣지

규칙으로 결정되는 분기는 라우팅 함수에 코드 조건으로 작성하고 add_conditional_edges로 등록한다.

작성일 · 읽는 시간 2분 · LangGraph 1.2 기준

고정 엣지의 한계

add_edge로 연결한 엣지는 항상 같은 노드로 이어진다. 값에 따라 다음 노드가 달라져야 하는 경우에는 조건 엣지를 사용한다. 조건 엣지는 노드가 끝난 뒤 라우팅 함수(다음 노드를 선택하는 함수)를 호출하고, 그 반환값을 다음 노드 이름으로 사용한다.

고정 엣지와 조건 엣지의 다음 노드 결정 방식 비교

라우팅 함수

pythonroute.py
from typing import Literal, TypedDict

from langgraph.graph import END, START, StateGraph


class State(TypedDict):
    temperature: float
    note: str


def route(state: State) -> Literal["alarm", "record"]:
    # 상태를 읽고 다음 노드 이름을 돌려준다
    if state["temperature"] >= 80:
        return "alarm"
    return "record"


builder = StateGraph(State)
builder.add_node("read", lambda state: {"note": "측정"})
builder.add_node("alarm", lambda state: {"note": "경보"})
builder.add_node("record", lambda state: {"note": "기록"})
builder.add_edge(START, "read")
builder.add_conditional_edges("read", route)
builder.add_edge("alarm", END)
builder.add_edge("record", END)
graph = builder.compile()

print(graph.invoke({"temperature": 91.5})["note"])  # 경보

route가 temperature에 따라 alarm과 record로 분기하는 경로

True, False처럼 노드 이름이 아닌 값을 반환하는 함수라면 세 번째 인자로 반환값과 노드 이름의 대응을 지정한다.

python
builder.add_conditional_edges("read", is_hot, {True: "alarm", False: "record"})

코드 조건의 적용 기준

다음 단계를 LLM이 선택하게 할 수도 있으나, 규칙으로 결정되는 분기에는 코드 조건이 더 적합하다.

  • 임곗값, 상태 코드, 횟수처럼 기준이 정해진 값인 경우
  • 같은 입력이면 항상 같은 경로로 분기해야 하는 경우
  • 반복의 종료 조건인 경우. 횟수를 초과하면 END를 반환한다.

LLM의 판단은 텍스트의 의미를 해석해야 결정되는 분기에만 적용한다.

코드 조건과 LLM의 판단을 구분하는 분기 기준