Data science/Agent
[Agent] 3. Agent 시스템 State, Node, Edge 라우팅 구조
endingo
2025. 4. 23. 19:47
라우팅: 특정 조건에 따라 노드가 분기되는 그래프 구조, 특정 입력에 따라 서로 다른 경로를 선택하여 실행 흐름을 제어하는 기능
=> 특정 조건에 따라 서로 다른 노드를 실행하고 끝낼 수 있음
예를들면 홀수, 짝수 체크해서 분기
1. State 정의
입력은 숫자, 결과는 문자열 형태
class State(TypedDict):
number: int
result: str
2. Node 정의
# 노드: 짝/홀수 판별
def check_parity(state: State):
print(f"check_parity: 입력된 숫자 = {state['number']}")
return state # 판단만 하고, 실제 처리는 다음 노드에서 함
# 짝수 노드
def even_node(state: State):
print("짝수입니다!")
state["result"] = "짝수입니다!"
return state
# 홀수 노드
def odd_node(state: State):
print("홀수입니다!")
state["result"] = "홀수입니다!"
return state
3. 그래프 정의
check_parity 노드에서는 parity_condition 함수를 사용하여 return 값이 even이면 even_node로 올라타고 return 값이 odd이면 odd_node로 올라타라는 명령을 add_conditional_edges로 설정
# 그래프 생성
builder = StateGraph(State)
# 노드 등록
builder.add_node("check_parity", check_parity)
builder.add_node("even_node", even_node)
builder.add_node("odd_node", odd_node)
# 조건 분기 연결
def parity_condition(state: State):
return "even" if state["number"] % 2 == 0 else "odd"
builder.add_conditional_edges("check_parity", parity_condition,
{"even": "even_node", "odd": "odd_node"}
)
# 나머지 연결
builder.add_edge(START, "check_parity")
builder.add_edge("even_node", END)
builder.add_edge("odd_node", END)
# 그래프 컴파일
graph = builder.compile()
4. 그래프 실행
state = {"number": 7, "result": ""}
result = graph.invoke(state)
print("최종 결과:", result)
딕셔너리 형태로 number 입력값에 7을 집어 넣었고
이 7이 state["number"] 형태로 (딕셔너리 형태로) 저장되고 이 수식은 parity_condition 함수에서 사용되어 홀수인지 짝수인지 검사하고 return 값을 통해 최종적으로 어떤 노드로 분기되어서 결과를 냈는지 알 수 있다.
=> 홀수 노드로만 분기해서 결과를 낸 것이다.