AI/LLM

[LangGraph] LangGraph 란 무엇인가?

죵욜이 2025. 3. 19. 19:56

LangGraph란?

정의

LangGraph는 LangChain 위에 구축된 "상태 기반 유한 상태 머신(혹은 그래프) 프레임워크"로, LLM(대형 언어 모델) 중심의 워크플로우를 쉽게 구성하고 실행할 수 있게 해주는 도구다.

간단히 말하면:

복잡한 LLM 기반 로직을 “노드(Node)”와 “엣지(Edge)”로 연결된 그래프 형태로 설계하고 실행할 수 있게 해준다.


LangGraph 의 탄생 배경

 

RAG 라는 강력한 기능을 갖게 된 우리는 한 번쯤 다음의 갈등을 마주한다

  1. LLM 이 생성한 답변이 Hallucination이 아닐까?
  2. RAG 를 적용하여 받은 답변이 문서에는 없는 "사전지식" 으로 답변한 건 아닐까?
  3. "문서 검색에서 원하는 내용이 없을 경우"
     -> 인터넷 혹은 논문 에서 부족한 정보를 검색하여 지식을 보강할 수 는 없을까?

 

이러한 문제를 해결하기 위해 가장 떠올리기 쉬운 방법은

  1. 검색이 제대로 나올때까지 반복하여 검색 해볼까? -> 반복문
    • 무한히 제대로된 결과가 안 나올 경우 토큰 사용량이 폭증할텐데....
  2. 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