본문 바로가기
AI

LangGraph란

by BK0625 2026. 3. 12.
반응형

1. LangGraph 에이전트의 핵심 구성 요소

LangGraph 에이전트는 기본적으로 **상태(State), 노드(Nodes), 엣지(Edges)**의 세 가지 핵심 요소로 구성됩니다. 이를 통해 에이전트의 행동 흐름을 명확한 그래프 형태로 정의하고 제어합니다.

  1. State (상태):
    •   정의: 에이전트가 현재까지 수행한 작업의 결과나 대화의 맥락 등, 에이전트의 현재 상황을 나타내는 모든 정보입니다. 이 상태는 그래프의 모든 노드에서 공유되며, 각 노드가 작업을 수행한 후 업데이트할 수 있습니다.
    •   중요성: LangGraph 에이전트의 핵심입니다. 일반적인 LangChain Agent Executor는 각 스텝마다 LLM이 다음 스텝을 예측하지만, LangGraph는 명시적으로 정의된 State를 통해 에이전트의 현재 상황을 정확히 추적하고, 이를 기반으로 다음 행동을 결정합니다.
    •   예시: 챗봇 에이전트의 상태는 메시지 히스토리, 사용된 툴 목록, 현재까지의 답변 초안, 다음 시도 횟수 등을 포함할 수 있습니다.
  2. Nodes (노드):
    •   정의: 에이전트가 수행할 수 있는 하나의 독립적인 작업 단위입니다. 각 노드는 현재 State를 입력으로 받아 특정 작업을 수행하고, 업데이트된 State를 출력으로 반환합니다.
    •   유형:
      •   LLM 노드: LLM을 호출하여 텍스트를 생성하거나, 다음 행동을 추론하게 합니다. (예: model.invoke(state['messages']))
      •   Tool 노드: 외부 도구(검색 엔진, 계산기, API)를 호출하여 특정 작업을 수행하고 결과를 가져옵니다. (예: tool_executor.invoke(tool_call))
      •   커스텀 함수 노드: 개발자가 직접 정의한 Python 함수를 실행하여 복잡한 로직을 처리하거나 데이터를 조작합니다.
    •   예시: call_llm_node, call_tool_node, decide_next_action_node, format_final_answer_node 등.
  3. Edges (엣지):
    •   정의: 노드와 노드 사이의 흐름(전환)을 정의합니다. 에이전트가 한 노드에서 작업을 마친 후, 다음에 어떤 노드로 이동할지 결정하는 경로입니다.
    •   유형:
      •   기본 엣지 (Default Edges): 특정 노드에서 항상 다음 특정 노드로 이동합니다.
      •   조건부 엣지 (Conditional Edges - 가장 중요): 현재 State나 이전 노드의 출력 결과에 따라 다음에 어떤 노드로 이동할지 동적으로 결정합니다. 이는 LLM 에이전트가 복잡한 의사 결정을 내리고 상황에 따라 다르게 행동하도록 하는 핵심 메커니즘입니다.
    •   예시: Thought 노드의 결과에 따라 Action 노드로 갈지, Final Answer 노드로 갈지 결정. 툴 호출 결과(Observation)가 성공적이면 다음 Thought로, 실패하면 Retry 노드로.

2. LangGraph 에이전트의 작동 방식: ReAct 패턴 구현

LangGraph는 ReAct(Reasoning + Acting) 패턴을 구현하는 데 매우 강력합니다.

  •   Thought (추론) -> Action (행동) -> Observation (관찰) 루프:
    •   Thought 노드: LLM을 호출하여 현재 상태(State)를 기반으로 다음에 무엇을 할지(Action) 추론합니다. 이 추론 결과는 상태에 저장됩니다.
    •   Action 노드: Thought 노드에서 결정된 Action을 파싱하여 외부 도구(Tool)를 호출합니다. 툴의 실행 결과는 Observation이 되어 상태에 추가됩니다.
    •   조건부 엣지: Thought 노드 이후에 LLM이 "최종 답변"을 내놓을지, 아니면 "추가적인 툴 호출"이 필요하다고 판단했는지에 따라 다른 엣지를 따라갑니다.
      • "최종 답변"이면 Final Answer 노드로.
      • "툴 호출 필요"이면 Action 노드로.
    •   반복: Action 노드에서 툴을 실행하고 Observation을 얻으면, 이 Observation을 포함한 State를 가지고 다시 Thought 노드로 돌아가 다음 행동을 추론하는 루프를 반복합니다.
    (Start) --> Thought (LLM) ^ | | | (Conditional: Final Answer?) | v (Observation) <-- Action (Tool Executor) ^ | |------------| (Loop: Needs more action?)

3. LangGraph 에이전트의 장점 (LangChain Agent Executor 대비)

  •   명시적인 상태 관리: 에이전트의 모든 상태 변화를 그래프의 노드와 엣지를 통해 명확하게 정의하고 추적할 수 있습니다. 이는 복잡한 로직의 디버깅과 이해를 크게 돕습니다.
  •   복잡한 제어 흐름 (Conditional Edges): LLM의 예측에만 의존하는 것이 아니라, 명시적인 조건부 로직을 사용하여 에이전트의 흐름을 정확하게 제어할 수 있습니다. (예: if tool_call_succeeded: goto next_thought else: goto retry_node)
  •   자가 수정(Self-correction) 및 반복 루프: 에이전트가 목표를 달성하지 못했을 때 다시 시도하거나, 다른 전략을 탐색하는 등의 복잡한 반복 루프를 쉽게 모델링할 수 있습니다.
  •   여러 에이전트 간의 협업: 여러 개의 작은 에이전트들을 노드로 정의하고, 서로 상태를 주고받으며 협력하는 복잡한 시스템을 구축할 수 있습니다.
  •   예측 가능성과 안정성: LLM의 비결정적인 특성을 명시적인 그래프 구조로 어느 정도 제어하여, 에이전트의 동작을 더 예측 가능하게 만들고 안정성을 높입니다.

LangGraph는 LLM을 단순한 API 호출 인터페이스가 아니라, 복잡한 의사 결정을 내리고 외부 환경과 능동적으로 상호작용하는 지능적인 유한 상태 기계(Finite State Machine)의 주체로 만듭니다.

반응형

'AI' 카테고리의 다른 글

AI 간단 용어 정리  (0) 2026.03.12
딥러닝 간단 정리  (0) 2026.03.12