노드, 간선 및 상태
TypedDict 상태를 정의하고, 상태를 변경하는 노드 함수를 작성한 뒤 방향성 간선으로 연결해보세요.
노드, 간선 및 상태은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Agents 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
State 객체
모든 LangGraph 에이전트에는 타입이 지정된 상태가 있으며, 일반적으로 TypedDict입니다:
from typing import TypedDict
from typing_extensions import Annotated
import operator
class AgentState(TypedDict):
messages: Annotated[list, operator.add] # appends instead of replaces
plan: str
answer: strState 업데이트 작동 방식
각 노드는 부분 딕셔너리를 반환합니다. LangGraph는 다음과 같이 처리합니다:
- 현재 상태를 읽습니다
- 현재 상태를 전달해 노드를 호출합니다
- 반환된 부분 딕셔너리를 다시 병합합니다
operator.add가 적용된 목록 필드에서는 기존 값을 덮어쓰지 않고 새 항목을 추가합니다.
Defining a Node
def planner(state: AgentState) -> dict:
prompt = f'User wants: {state["messages"][-1].content}'
plan = llm.invoke(prompt).content
return {'plan': plan}Registering the Node
from langgraph.graph import StateGraph, END
graph = StateGraph(AgentState)
graph.add_node('planner', planner)간선 정의하기
정적 간선은 조건 없이 실행됩니다:
graph.set_entry_point('planner')
graph.add_edge('planner', 'researcher')
graph.add_edge('researcher', 'writer')
graph.add_edge('writer', END)조건부 간선
분기를 사용하려면 다음 노드를 선택하는 함수를 등록합니다:
def route(state: AgentState) -> str:
if state['needs_research']:
return 'researcher'
return 'writer'
graph.add_conditional_edges(
'planner',
route,
{'researcher': 'researcher', 'writer': 'writer'}
)END는 특별합니다
END는 종료 노드입니다. END로 향하는 간선은 그래프를 종료하고 현재 상태를 반환합니다.
Compiling the Graph
app = graph.compile()
result = app.invoke({'messages': [...]})
print(result['answer'])상태 업데이트 스트리밍
상태가 실시간으로 변경되는 모습을 확인합니다:
for event in app.stream({'messages': [...]}):
print(event)
# Each event is the state diff from the just-completed node.리듀서 함수
복잡한 상태 병합에는 사용자 지정 리듀서를 사용합니다:
def merge_facts(old, new):
return {**old, **new}
class State(TypedDict):
facts: Annotated[dict, merge_facts]하위 그래프
노드 자체가 컴파일된 또 다른 그래프일 수 있어 계층형 에이전트에 유용합니다:
subgraph = StateGraph(SubState).compile()
graph.add_node('subprocess', subgraph)비동기 노드
노드는 비동기 함수가 될 수 있습니다:
async def fetch_node(state):
data = await fetch_async(state['url'])
return {'data': data}
result = await app.ainvoke({...})노드의 오류
노드에서 오류가 발생하면 LangGraph가 오류를 전파하고 중지합니다. 정상적으로 처리하려면 노드 안에서 오류를 포착하십시오:
def safe_search(state):
try:
return {'results': search(state['query'])}
except Exception as e:
return {'error': str(e), 'results': []}State 업데이트
노드가 딕셔너리로 {'plan': '...'}을 반환하면 어떻게 됩니까?
복습
TypedDict 상태를 정의하고, 부분 업데이트를 반환하는 함수를 작성하고, 노드와 간선을 추가한 다음 컴파일하고 실행합니다. 이것이 LangGraph입니다.
자주 묻는 질문
“노드, 간선 및 상태” 강의는 무료인가요?
네 — “노드, 간선 및 상태” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Agents 강의 전체를 잠금 해제할 수 있습니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
“노드, 간선 및 상태”에서 뭘 배우나요?
TypedDict 상태를 정의하고, 상태를 변경하는 노드 함수를 작성한 뒤 방향성 간선으로 연결해보세요. 브라우저에서 직접 실행하는 실습 코드로 AI Agents을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Agents을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Agents은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“노드, 간선 및 상태” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Agents 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Agents 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.