LangGraph

LangGraph 3강

[그래프] 노드·엣지·컴파일

State를 정했으면 노드를 만들고 엣지로 이어 그래프를 조립한다. StateGraph에 노드를 추가하고, START에서 시작해 END로 끝나는 경로를 엣지로 연결한 뒤 compile()하면 실행 가능한 그래프가 된다.

LangGraph 3강 구성도

이 강의 목표는 실제 LLM 노드를 넣어 가장 단순한 챗봇 그래프를 완성하는 것이다.

1. 노드는 함수다

노드는 State를 받아 바뀐 필드만 dict로 반환한다. 나머지 필드는 그대로 유지된다.

from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o")

def chat(state: State):
    reply = llm.invoke(state["messages"])
    return {"messages": [reply]}    # add_messages 리듀서가 누적

2. 엣지로 잇고 컴파일

START는 진입점, END는 종료점을 뜻하는 특수 노드다.

from langgraph.graph import StateGraph, START, END

g = StateGraph(State)
g.add_node("chat", chat)
g.add_edge(START, "chat")     # 시작 → chat
g.add_edge("chat", END)       # chat → 종료
app = g.compile()             # 실행 가능한 그래프

3. 실행

invoke는 최종 State를, stream은 중간 과정을 돌려준다.

out = app.invoke({"messages": [("user", "LangGraph를 한 줄로")]})
print(out["messages"][-1].content)

핵심 명령·용어

이름
add_node(name, fn) 노드 등록
add_edge(a, b) a→b 연결
START / END 진입·종료 특수 노드
compile() 실행 가능한 앱 생성
invoke() 그래프 1회 실행

예제

# 노드를 두 개 이어 순차 실행
def add_greet(state): return {"messages": [("system", "친절하게 답해")]}
g.add_node("greet", add_greet)
g.add_edge(START, "greet")
g.add_edge("greet", "chat")
g.add_edge("chat", END)

해설) 엣지를 바꾸는 것만으로 흐름이 재구성된다. 다음 강의에서는 고정 엣지 대신 조건부 엣지로 상황에 따라 경로가 갈라지게 만든다.

댓글 0