1. State 상태

(1) 상태의 개념

  • 랭그래프 애플리케이션에서 현재의 “상태”와 “데이터”, “문맥”을 담고 있는 요소
  • 그래프의 전체적인 데이터 흐름을 저장하고 관리하는 요소
  • 노드와 노드 간의 정보를 전달할 때 State 객체에 담아 전달한다.

(2) State 상태의 역할

  • 독립된 노드들이 협업할 수 있도록 하는 공유 데이터 역할
  • 현재 애플리케이션의 상태를 나타내는 스냅샷 역할
  • 랭그래프 애플리케이션의 누적 중간 결과를 저장하는 작업 일지 역할

(3) State 상태 정의하기

1
2
3
4
5
6
7
8
9
from typing import TypedDict, Annotated
from langgraph.graph.message import add_messages
import operator

class MyState(TypedDict):
    query: str
    messages: Annotated[list, add_messages]
    documents: Annotated[list, operator.add]
    response: str
  • TypedDict : 딕셔너리에 타입 힌팅을 추가한 개념
  • Annotated : 타입 힌팅 기능의 일종으로 첫 번째 인자는 실제 데이터 타입, 두 번째 인자는 메타데이터를 담는다. LangGraph에서는 이 메타데이터를 이용해 어떤 식으로 상태값을 업데이트할지 결정한다.
  • class MyState() : MyState라는 새로운 클래스 선언. TypedDict를 기반으로(상속) 함
  • query:str ..등 : MyState 상태가 가질 여러 데이터, 상태값들

(4) State 상태 관리의 중요성

  • 애플리케이션 일관성 : 대화형 애플리케이션에서 이전 단계의 정보 중 중요하거나 기억되어야 할 것들, 예를 들어 사용자의 질문이나 검색된 문서, 중간 판단 결과, 이전 등답 등을 저장하고 이를 기반으로 맥락 안에서 작업할 수 있다. 상태가 없다면 각 노드는 매번 처음부터 다시 판단해야 하고, 전체 흐름이 단절될 위험이 있다.
  • 맥락의 축적과 활용 : 상태는 여러 단계에 걸쳐 정보를 누적하고, 필요시 활용할 수 있게 해준다. 첫 번째 노드가 사용자의 의도를 분석하고, 두 번째 노드가 관련 문서를 찾고, 세 번째 노드가 답변을 생성하는 일련의 흐름에서, 이 모든 중간 결과가 상태 안에 쌓이게 된다. 이를 기반으로 나중 단계의 노드는 이전의 결과를 바탕으로 더 정확하고 맥락에 맞는 판단을 할 수 있다.
  • 복잡한 작업의 처리 : 검색, 판단, 재검색, 응답 생성, 검토와 같이 여러 단계를 가진 워크플로우를 만들 때 LangGraph는 빛을 발한다. 잘 설계된 상태는 중간 결과물이나, 각 노드에서 필요한 특정 데이터를 저장하고 제공함으로써 복잡한 워크플로우가 안정적으로 운영되고 확장하는 데 중심적인 역할을 한다.
  • 분기와 반복 같은 그래프 흐름 처리 : LangGraph는 일방향의 순차 구조가 아닌, 그래프 기반 순환 구조로서, 특정 조건에 따라 분기나 반복과 같은 흐름을 가질 수도 있다. 그리고 이러한 분기나 반복 같은 흐름은에서 특정 조건 만족 여부를 판별하기 위해서는 결국 상태가 필요하게 된다. 즉, 현재 상태 안에 어떤 값이 있는지에 따라 다음 엣지를 결정할 수 있고, 이게 이어지면서 그래프 흐름 자체가 바뀌게 된다.
  • 오류 복구 지점 : LangGraph는 체크포인팅 등의 기능을 통해 특정 시점의 상태를 저장할 수 있다. 이 덕분에 장애가 발생하더라도, 저장된 상태를 바탕으로 이어서 실행할 수 있게끔 해준다.
  • 성능 최적화 : 이미 검색한 문서, 이미 생성한 중간 요약, 이미 판단한 결과를 상태에 남겨두면 다음 노드는 그 결과를 다시 계산하지 않고 사용할 수 있다. 이를 통해 전체 워크플로우를 더 효율적으로 만들 수 있다.

Reference

Do it! LLM을 활용한 AI 에이전트 개발 입문 (이성용 저)

https://wikidocs.net/261579

https://www.youtube.com/watch?v=W_uwR_yx4-c

Comments