State를 정했으면 노드를 만들고 엣지로 이어 그래프를 조립한다. StateGraph에 노드를 추가하고, START에서 시작해 END로 끝나는 경로를 엣지로 연결한 뒤 compile()하면 실행 가능한 그래프가 된다.
이 강의 목표는 실제 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
댓글은 운영자만 작성할 수 있어요.