LangGraph 구조와 원리부터 실전 예제까지
LangGraph는 기존 LangChain의 한계를 뛰어넘어 복잡한 AI 워크플로우를 그래프 구조로 설계하고 구현할 수 있게 해주는 혁신적인 프레임워크다.
단순한 체인 구조로는 구현하기 어려웠던 순환 로직, 조건부 분기, 다중 에이전트 협업 등을 자연스럽게 구현할 수 있어 차세대 AI 에이전트 개발의 핵심 도구로 주목받고 있다.
LangGraph의 기원과 영감
- 구글 Pregel의 영향
- 이러한 배경 덕분에 LangGraph는 단순한 체인 구조를 넘어 대규모, 동적 워크플로우를 안정적으로 처리할 수 있는 기반을 마련했다.
LangGraph의 핵심 개념
그래프 기반 아키텍처의 본질
- LangGraph는 전통적인 직선적 체인 구조에서 벗어나 그래프(Graph) 구조를 채택한 프레임워크다.
- 각 작업 단위를 노드(Node)로, 작업 간의 연결을 엣지(Edge)로 표현하여 복잡한 워크플로우를 직관적으로 모델링한다.
- 방향성을 가진 유향 그래프를 사용하여 데이터의 흐름과 제어 로직을 명확하게 정의할 수 있다.
LangChain과의 차별점
- LangGraph와 LangChain의 핵심적인 차이점을 살펴보면 다음과 같다:
특징 | LangChain | LangGraph |
구조 | 체인 기반 (순차적) | 그래프 기반 (순환 지원) |
상태 관리 | 제한적, 수동 관리 | 중앙집중식, 자동 관리 |
워크플로우 | 직선적, 예측 가능 | 동적, 조건부 분기 |
복잡성 | 단순한 파이프라인에 적합 | 복잡한 다중 에이전트 시스템 |
확장성 | 체인 추가 시 리팩토링 필요 | 노드 단위 교체/추가로 확장 |
LangGraph의 3대 핵심 구성요소
- State (상태) - 데이터 저장소
- State는 그래프의 모든 노드가 공유하는 중앙집중식 데이터 저장소다.
- 대화 기록, 중간 결과, 사용자 정보 등 에이전트가 작업하는 동안 기억해야 할 모든 정보를 담는다.
- Python의 TypedDict를 사용하여 명확한 구조로 정의하며, 타입 안전성을 보장한다
- Node (노드) - 작업 단위
- Node는 실제 작업을 수행하는 Python 함수로, LLM 호출, 데이터 처리, 외부 API 연동 등의 작업을 담당한다.
- 현재 상태(State)를 입력받아 처리한 후, 업데이트된 상태를 반환하는 구조다.
- 각 노드는 독립적인 작업 단위이므로 재사용성과 모듈성이 높다.
- Edge (엣지) - 연결과 흐름 제어
- Edge는 노드 간의 연결과 데이터 흐름을 정의하는 요소다.
- 세 가지 유형의 엣지가 있다:
- 일반 엣지: 무조건 다음 노드로 이동
- 조건부 엣지: 특정 조건에 따라 다른 노드로 분기
- 시작/종료 엣지: 그래프의 진입점과 종료점 정의
LangGraph 실전 예제
- 기본 챗봇 구현
- 다음은 LangGraph로 구현한 기본 챗봇의 완전한 예제다:
- 조건부 분기를 포함한 고급 예제
- 더 복잡한 워크플로우를 위한 조건부 엣지 활용 예제:
- 툴 통합 예제
- 외부 도구를 활용하는 에이전트 구현:
- 상태 관리의 심화 활용
- Reducer 함수: 상태 업데이트 방식을 세밀하게 제어할 수 있다.
- 체크포인트: 특정 시점의 상태를 저장하고 복구할 수 있어 오류 처리에 유용하다.
- 멀티 스레드 지원: 여러 대화 세션을 동시에 관리할 수 있다.
댓글남기기