어제는 AI Agent가 어떻게 발전해왔는지, CoT → ReAct → Agentic Architecture로 이어지는 흐름을 정리했습니다.
오늘은 실제 에이전트를 구성할 때 중요한 프레임워크인 LangGraph의 핵심 개념과 구조를 살펴보겠습니다.
LangGraph란 무엇인가?
LangGraph는 “상태(State)를 기반으로 한 에이전트의 사고 흐름을 그래프로 표현하는 프레임워크” 입니다.
일반적인 LLM 호출은 다음과 같은 단일 요청-응답 구조입니다:
Input → LLM → Output
하지만 에이전트는 작업을 한 번에 끝내지 않습니다.
계획 → 행동 → 반성 → 반복 의 과정을 거치며 상태가 누적됩니다.
LangGraph는 이 상태 변화 과정을 명확하고 안전하게 표현할 수 있도록
다음의 요소로 구성됩니다:
- State (현재 기억 / 맥락)
- Node (행동 단위)
- Edge (Node 간의 흐름 제어)
- Reducer (상태를 갱신하는 규칙)
🧱 1. State — 에이전트의 “현재 기억”
State는 에이전트가 지금까지 얻은 정보, 맥락, 중간 산출물이 저장되는 공간입니다.
즉, 에이전트가 어떤 상황에 있는지를 표현하는 작업 기억(Working Memory) 입니다.
LangGraph에서는 State를 표현할 때 두 가지 방식을 사용합니다.
(1) TypedDict 기반 State
from typing import TypedDict, Annotated
from langgraph.graph import add_messages
class State(TypedDict):
messages: Annotated[list, add_messages]
- 가벼움, 단순함
- Python 타입 기반
- 빠르게 프로토타이핑할 때 유용
(2) Pydantic BaseModel 기반 State
from pydantic import BaseModel, Field
from typing import List
class State(BaseModel):
messages: List[str] = Field(default_factory=list)
- 검증(Validation) + 형식 보장
- API 연동, DB 저장 등 실전 환경에 더 적합
비교 항목 TypedDict Pydantic
| 사용 목적 | 빠른 시제품 | 실무, 안정성 |
| 타입 검사 | 느슨함 | 엄격함 |
| 유효성 검증 | 없음 | 자동 검증 |
| 권장 시점 | 학습·실험 단계 | 제품 단계 |
정리하자면, 학습 중에는 TypedDict,
실무 적용 단계에서는 Pydantic이 보다 안전합니다.
Reducer — 상태를 어떻게 갱신할 것인가?
State는 매 Node 실행 시마다 새로 교체되는 것이 아니라,
각 Node가 반환한 delta(변경점) 을 기존 상태에 병합(merge) 합니다.
이 병합 규칙을 정하는 것이 Reducer입니다.
예를 들어, messages 라는 상태를 누적하고 싶다면:
messages: Annotated[list, add_messages]
add_messages Reducer는:
기존 리스트 + 새 리스트 → 하나의 리스트로 누적
라는 의미입니다. 일종의 파이썬에서의 extend() 함수 역할이죠!
Reducer 동작 사용 상황
| add_messages | 리스트에 계속 추가 | 대화 내용 / reasoning 로그 |
| operator.or_ | 딕셔너리 병합 | 정보 업데이트 |
| operator.add | 숫자 / 리스트 덧셈 | 카운팅 상태 |
Reducer 덕분에 에이전트는 “기억을 잃지 않고 사고를 이어갈 수 있습니다.”
🔨 Node — 에이전트의 행동 단위
Node는 State를 입력받아, State의 일부를 갱신하는 함수입니다.
def think(state: State):
result = llm.invoke(state["messages"])
return {"messages": [result]}
- Node 하나 = 에이전트의 한 단계 행동
- 예: 요약하기, 검색하기, 판단하기, 정답 생성하기 등
🔗 3. Edge — Node 간 실행 흐름 제어
Edges는 "어떤 Node 다음에 어떤 Node가 실행되는가" 를 결정합니다.
Edge 유형 설명 예시
| 순차 Edge | A → B | 기본 흐름 |
| 조건 Edge | A → (조건) → B or C | 분기 / 종료 결정 |
LangGraph의 강점은 Loop(순환) 표현이 자연스럽다는 점입니다.
graph.add_edge("think", "think") # 반복 사고
이런 구조는 Plan → Act → Reflect 같은 에이전트 동작에 매우 적합합니다.
핵심 요약
요소 역할 비유
| State | 에이전트의 현재 기억 | 수첩 📒 |
| Reducer | 기억을 어떻게 쌓는가 | 필기 방식 🖊️ |
| Node | 단계별 행동 | 생각 또는 작업 🤔 |
| Edge | 다음 행동 결정 | 흐름 제어 → 루프 🔁 |
에이전트란, 기억(State)을 기반으로 행동(Node)을 수행하고, 그 결과를 계속 축적(Reducer)하며, 상황에 따라 흐름(Edge)을 조절하는 시스템입니다.
LangGraph는 이 과정을 안전하고 직관적으로 설계할 수 있도록 도와줍니다.
'AI > Agent 스터디' 카테고리의 다른 글
| AI Agent 스터디 1일차 — AI Agent의 발전과 현재 (1) | 2025.11.04 |
|---|---|
| Agent 스터디— LangGraph로 배우는 Agent 아키텍처 (0) | 2025.10.26 |