[LangGraph 이론 + 기본 사용]
🟢 1. LangGraph란?
LangGraph는 LangChain의 LLM과 툴을 활용하여 복잡한 흐름을 다룰 수 있도록 설계된 프레임워크입니다.
✅ 기본 개념
- StateGraph(상태 그래프): 데이터 흐름과 처리 단계를 정의하는 그래프 구조
- Node(노드): 특정 작업을 수행하는 함수(예: LLM 호출, 데이터 처리)
- Edge(엣지, 연결선): 노드 간의 흐름을 정의
🛠 LangGraph를 사용해야 하는 이유
- 복잡한 로직 구현: 다단계 의사결정 프로세스나 복잡한 워크플로우를 쉽게 구현할 수 있습니다.
- 세밀한 제어: 애플리케이션의 각 단계를 정밀하게 제어할 수 있어, 고도로 커스터마이즈된 동작을 구현할 수 있습니다.
- 확장성: 서브그래프를 통해 대규모 시스템을 모듈화하여 관리할 수 있습니다.
- 상태 지속성: 체크포인팅을 통해 장기 실행 태스크와 오류 복구를 쉽게 구현할 수 있습니다.
- 다중 에이전트 시스템: 여러 AI 에이전트의 상호작용을 효과적으로 모델링할 수 있습니다
🔵 2. LangGraph 설치하기
LangGraph는 pip로 간단히 설치할 수 있습니다.
🟡 3. LangGraph 기본 사용법
LangGraph는 그래프 기반으로 데이터를 처리합니다.
아래 예제를 통해 기본 구조를 익혀봅시다.
from langgraph.graph import StateGraph, START, END
from typing import TypedDict
# 그래프의 상태를 정의하는 클래스
# MyState라는 TypedDict를 정의하여 그래프의 상태 구조를 지정합니다.
# 여기서는 counter라는 정수형 필드만 있습니다.
class MyState(TypedDict):
counter: int
# StateGraph 인스턴스 생성
# StateGraph 인스턴스를 생성하고, 상태 타입으로 MyState를 지정합니다.
graph = StateGraph(MyState)
# 카운터를 증가시키는 노드 함수 정의
# increment 함수를 정의합니다.
# 이 함수는 현재 상태를 입력으로 받아 counter 값을 1 증가시킨 새로운 상태를 반환합니다.
def increment(state):
return {"counter": state["counter"] + 1}
# 'increment' 노드 추가
# increment 함수를 "increment"라는 이름의 노드로 그래프에 추가합니다.
graph.add_node("increment", increment)
# START에서 'increment' 노드로 엣지 추가
# 그래프의 시작점(START)에서 "increment" 노드로 엣지를 추가합니다.
graph.add_edge(START, "increment")
# 'increment' 노드에서 END로 엣지 추가
# "increment" 노드에서 그래프의 종료점(END)으로 엣지를 추가합니다.
graph.add_edge("increment", END)
# 그래프 컴파일
app = graph.compile()
# 그래프 실행
# 컴파일된 그래프를 실행합니다. 초기 상태로 {"counter": 0}을 제공합니다.
result = app.invoke({"counter": 0})
print(result) #{'counter': 1}
🔴 4. LangGraph의 주요 개념
위 예제를 바탕으로, LangGraph의 핵심 요소를 정리해 보겠습니다.
🔹 (1) StateGraph (상태 그래프)
- 그래프의 전체 구조를 관리하는 객체
- graph = StateGraph()로 생성
🔹 (2) Node (노드)
- 특정 작업을 수행하는 함수
- graph.add_node("노드_이름", 함수)로 추가
🔹 (3) Edge (엣지, 노드 간 연결)
- 노드 간의 데이터 흐름을 정의
- graph.add_edge( START, "시작 노드")로 설정
- graph.add_edge("이전 노드", "다음 노드")로 설정
- graph.add_edge("다음 노드", END)로 설정
🟠 5. LangGraph 실전 예제
이번에는 사용자의 입력하여 적절한 응답을 주는 챗봇을 만들어 보겠습니다.
from dotenv import load_dotenv
from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langchain_openai import ChatOpenAI
# API 키 정보 로드
load_dotenv()
# 그래프 상태 정의하는 클래스
class MyState(TypedDict):
# 메시지 정의(list type 이며 add_messages 함수를 사용하여 메시지를 추가)
messages: Annotated[str, add_messages] #Annotated는 타힙 힌트 + 추가 정보
# LLM 정의
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 챗봇 함수 정의
def chatbot(state: MyState):
# 메시지 호출 및 반환
return {"messages": [llm.invoke(state["messages"])]}
# 그래프 생성
graph = StateGraph(MyState)
# 'chatbot' 노드 추가
graph.add_node("chatbot", chatbot)
# START에서 챗봇 노드로 엣지 추가
graph.add_edge(START, "chatbot")
# 챗봇 노드에서 END로 엣지 추가
graph.add_edge("chatbot", END)
# 그래프 컴파일
app = graph.compile()
def run_chatbot():
while True:
# 사용자 입력 받기
user_input = input("You: ")
# "exit" 입력 시 종료
if user_input.lower() == "exit":
print("Goodbye!")
break
# 그래프 이벤트 스트리밍
# stream 실시간 그 값을 가져와서 처리 (비동기적)
for event in app.stream({"messages": [("user", user_input)]}):
# 이벤트 값 출력
for value in event.values():
print("Assistant:", value["messages"][-1].content)
# 챗봇 실행
run_chatbot()
🔵 6. LangGraph의 활용
LangGraph는 복잡한 챗봇, 데이터 처리, 워크플로우 자동화 등의 시스템을 구축하는 데 유용합니다.
아래와 같은 다양한 활용 사례를 고려할 수 있습니다.
✅ 1) 챗봇 시스템 (LLM 기반 대화 관리)
LangGraph는 대화 흐름을 제어하는 챗봇을 만드는 데 적합합니다.
일반적인 챗봇과 달리 다중 스텝 대화 처리 및 상태 유지가 가능합니다.
💡 활용 예시:
- 문맥을 유지하는 고객 상담 챗봇
- 다양한 질문 유형을 처리하는 FAQ 챗봇
- 질문을 분류하고 적절한 답변을 찾는 질의응답 시스템
📌 챗봇 구조 예시:
1️⃣ 사용자의 입력을 분석 (질문 유형 파악)
2️⃣ 적절한 응답 생성 (LLM 사용)
3️⃣ 데이터베이스 또는 외부 API와 연동
4️⃣ 사용자의 이전 질문과 문맥을 유지하여 답변 개선
✅ 2) RAG (Retrieval-Augmented Generation)
LangGraph를 사용하면 RAG 기반 검색 시스템을 구축할 수 있습니다.
이는 LLM이 벡터DB에서 정보를 검색하여 답변을 생성하는 방식입니다.
💡 활용 예시:
- 회사 내부 문서를 검색하고 답변 생성
- 의료 데이터에서 환자의 기록을 분석하여 맞춤형 답변 제공
- 법률 및 금융 문서 검색 후 요약 생성
📌 RAG 시스템 구조 예시:
1️⃣ 사용자의 질문을 벡터화
2️⃣ 벡터 데이터베이스에서 관련 문서 검색
3️⃣ 검색된 문서를 LLM에 전달하여 답변 생성
4️⃣ 최종 응답을 사용자에게 전달
✅ 3) API 워크플로우 자동화
LangGraph를 사용하면 여러 외부 API 호출을 조합하여 자동화할 수 있습니다.
특히, **비동기 처리(async)**를 지원하여 빠르게 응답할 수 있습니다.
💡 활용 예시:
- 여러 개의 REST API 호출 후 데이터를 병합
- 날씨 API → 뉴스 API → 추천 시스템 순으로 데이터 처리
- 다국어 번역 API를 호출하여 다양한 언어로 답변 제공
📌 API 호출 자동화 예시:
1️⃣ 사용자의 요청을 분류 (예: 날씨, 뉴스, 주식 정보 등)
2️⃣ 적절한 API 호출 후 데이터 수집
3️⃣ 응답 데이터를 가공 및 요약하여 사용자에게 전달
✅ 4) 다중 에이전트 시스템 (Multi-Agent Systems)
LangGraph는 여러 개의 에이전트를 동시에 활용하는 시스템을 만들 때 유용합니다.
각 에이전트가 특정 역할을 수행하며, 서로 데이터를 주고받을 수 있습니다.
💡 활용 예시:
- 여러 개의 LLM 에이전트를 활용하여 복잡한 작업 수행
- 한 에이전트가 문서를 요약하고, 다른 에이전트가 분석
- 의료 상담 챗봇에서 질문 유형에 따라 다른 AI 모델 호출
📌 다중 에이전트 예시:
1️⃣ 요약 에이전트: 문서를 요약
2️⃣ 분석 에이전트: 요약된 내용을 분석
3️⃣ 추천 에이전트: 사용자가 원하는 추가 정보 제공
✅ 5) 워크플로우 엔진 (Task Orchestration)
LangGraph는 복잡한 비즈니스 로직을 자동화하는 데 활용할 수 있습니다.
특히, 비동기 작업을 관리하고 데이터 흐름을 제어하는 데 적합합니다.
💡 활용 예시:
- 전자상거래 주문 처리 자동화
- 데이터 분석 및 보고서 생성 파이프라인
- AI 모델의 학습 데이터 전처리 및 평가 자동화
📌 전자상거래 주문 처리 예시:
1️⃣ 주문 접수
2️⃣ 결제 처리
3️⃣ 재고 확인
4️⃣ 배송 요청
5️⃣ 사용자에게 알림 전송
🚀 LangGraph 활용 정리
챗봇 시스템 | LLM을 활용한 자연어 질문 응답 |
RAG (검색 기반 AI) | 벡터DB에서 정보를 검색하여 LLM이 답변 생성 |
API 자동화 | 여러 API를 호출하여 데이터를 가공 및 응답 |
다중 에이전트 시스템 | 여러 AI 모델이 협력하여 작업 수행 |
워크플로우 자동화 | 주문 처리, 데이터 분석 파이프라인 구축 |