LangGraph란?
정의
LangGraph는 LangChain 위에 구축된 "상태 기반 유한 상태 머신(혹은 그래프) 프레임워크"로, LLM(대형 언어 모델) 중심의 워크플로우를 쉽게 구성하고 실행할 수 있게 해주는 도구다.
간단히 말하면:
복잡한 LLM 기반 로직을 “노드(Node)”와 “엣지(Edge)”로 연결된 그래프 형태로 설계하고 실행할 수 있게 해준다.
LangGraph 의 탄생 배경
RAG 라는 강력한 기능을 갖게 된 우리는 한 번쯤 다음의 갈등을 마주한다
- LLM 이 생성한 답변이 Hallucination이 아닐까?
- RAG 를 적용하여 받은 답변이 문서에는 없는 "사전지식" 으로 답변한 건 아닐까?
- "문서 검색에서 원하는 내용이 없을 경우"
-> 인터넷 혹은 논문 에서 부족한 정보를 검색하여 지식을 보강할 수 는 없을까?
이러한 문제를 해결하기 위해 가장 떠올리기 쉬운 방법은
- 검색이 제대로 나올때까지 반복하여 검색 해볼까? -> 반복문
- 무한히 제대로된 결과가 안 나올 경우 토큰 사용량이 폭증할텐데....
- Hallucination 을 방지하는 LLM 을 추가해야하나?
결국,
- 코드가 점점 길어지고 복잡해짐
- LLM 의 일관되지 않은 답변이 마치 나비효과로 이어져 답변 품질저하로 이어짐
기존 RAG 의 문제점
가장 큰 요인은 RAG 파이프라인이 단방향 구조 라는 것이다.
기존 구조는 위 사진처럼
데이터 로드 - 문서 분할 - 임베딩 - 벡터스토어 저장
을 미리 해둔상태에서 사용자의 입력이 들어온다면
문서검색 - 프롬프트에 추가 - 답변 생성
의 단계를 거쳐야한다.
이러한 구조는 아래와같은 문제점이 있다
- 모든 단계를 한번에 다 잘해야 함
- 이전 단계로 되돌아가기 어려움
그래서 LangGraph 는 RAG 파이프라인을 보다 유연하게 설계하기 위해 다음과 같은 제안을 한다.
- 각 세부과정을 노드(Node) 라고 정의
- 이전 노드 -> 다음 노드 : 엣지(Edge) 연결
- 조건부 엣지 를 통해 분기 처리
LangGraph 의 핵심 개념
1. State (상태)
- 그래프 실행 도중 공유되고 갱신되는 정보
- Python 의 TypeDict 로 정의
class ChatState(TypedDict):
messages: List[str]
last_user_input: Optional[str]
2. Node (노드)
- 하나의 작업 단위
- 노드는 하나의 함수로 구성
def get_user_input(state: ChatState) -> ChatState:
input = ...
state["last_user_input"] = input
return state
3. Edge (엣지)
- 노드 간 연결
- 조건 분기를 통해 어떤 노드로 갈지 결정할 수도 있음
4. Graph (그래프)
- StateGraph 클래스를 사용해 정의
- 노드들을 등록하고 엣지를 통해 연결
'AI > LLM' 카테고리의 다른 글
[LLM] LangChain 의 유용한 기능들 (0) | 2025.02.28 |
---|---|
[LLM] RAG (0) | 2025.02.27 |
[LLM] LangChain (prompttemplate 과 LCEL) (0) | 2025.02.19 |