day3_practice/react_agent.py

react_agent.py ReAct 파이프라인 다이어그램

react_agent.py 가 조립하는 ReAct 그래프를 한 장에 그렸습니다. 질문이 agent 노드로 들어가고, should_continue 가 tool_calls 를 보고 tools 노드로 보낼지 END 로 끝낼지 정합니다. 그림의 노드나 아래 노드 목록을 누르면 그 노드의 설명과 코드 위치가 상세 카드에 나옵니다.

한눈에 보는 구조

react_agent.py ReAct 파이프라인: 질문이 START 로 agent 노드에 들어가고, agent 는 llm_with_tools 를 invoke 합니다. should_continue 는 tool_calls 가 있으면 tools 노드로, 없으면 END 를 지나 최종 답변으로 보냅니다. tools 노드는 search_employee, calculate, classify_request 를 실행하고 ToolMessage 를 들고 다시 agent 로 돌아갑니다. classify_request 는 도구 안에서 llm 을 부릅니다. 01 / Bedrock LLM 02 / LangGraph 그래프 03 / ToolNode 04 / 도구 ReAct 사이클 START 없음 invoke 있음 ToolMessage → 다시 agent 부서만 답해 llm_with_tools Claude Sonnet 4.5 도구 스키마 포함 질문 HumanMessage agent 노드 System + messages AIMessage 반환 should_continue tool_calls 있나? END 최종 답변 마지막 AIMessage tools 노드 tool_calls 실행 ToolMessage 포장 search_employee 더미 임직원 조회 calculate eval 계산 classify_request 담당 부서 분류 도구 안의 LLM llm Claude Sonnet 4.5 도구 없음

가운데 줄이 그래프의 본선입니다. should_continue 에서 tool_calls 가 있으면 tools 노드로 내려가 도구를 실행하고, 빨간 선을 따라 다시 agent 노드로 돌아옵니다. 없으면 END 를 지나 최종 답변이 됩니다. 점선은 노드 안에서 모델을 부르는 호출입니다. 노드를 누르면 아래 상세 카드가 바뀌고 그 노드에 이어진 선이 파랗게 켜집니다.

노드 상세

← → 키로 노드 이동

나가는 연결

    들어오는 연결

      react_agent.py

      연결 11개와 코드 위치

      연결그림의 라벨react_agent.py

      State, 수동 루프, 예시 질문

      State: AgentState.messages

      • add_messages reducer가 노드 반환값을 덮어쓰지 않고 뒤에 append
      • SystemMessage는 State에 저장하지 않고 agent가 매번 앞에 붙임
      • should_continue는 마지막 메시지의 tool_calls만 봄

      수동 루프 → 그래프

      • llm.invoke + append → agent 노드
      • if not tool_calls: break → should_continue
      • 도구 실행 + ToolMessage → ToolNode
      • while → tools → agent 사이클 엣지

      예시 질문 흐름

      • 김하늘 팀 + 연봉 계산: agent → search_employee·calculate → agent → END
      • 노트북 화면 문의: agent → classify_request → agent → END

      관련 파일