# 개요 LangGraph의 기본 구성 요소인 State(상태)에 대해 알아보겠습니다. State는 노드 간 정보 전달의 핵심 요소로, Python의 고급 타입 힌팅 기능을 활용하여 구현됩니다. - State의 기본 구조와 역할 - Annotated 타입 힌팅의 활용 - add_messages의 특별한 기능 - State 객체의 유연한 사용법 # State란? LangGraph에서 State는 노드 간 정보 전달을 담당하는 핵심 객체입니다. TypedDict를 상속받아 구현되며, 다음과 같은 구조를 가집니다: ```python from typing import Annotated from typing_extensions import TypedDict from langgraph.graph.message import add_messages class GraphState(TypedDict): messages: Annotated[list, add_messages] context: Annotated[str, "Context"] ``` # Python 3.9의 Annotated 타입 힌팅 Annotated는 Python 3.9에서 도입된 고급 타입 힌팅 기능입니다. 변수의 타입과 함께 추가적인 메타데이터를 정의할 수 있습니다: ```python context: Annotated[str, "Context"] ``` - 첫 번째 인자: 실제 타입 (str) - 두 번째 인자: 타입에 대한 메타데이터 ("Context") # add_messages의 특별한 기능 LangGraph의 add_messages는 메시지를 누적하는 특별한 기능을 제공합니다. 일반적인 리스트 할당과 비교해보겠습니다: ## 일반적인 리스트 할당 ```python from langchain_core.messages import AIMessage, HumanMessage messages = [] messages = [HumanMessage(context="Hello", id=1)] # 첫 번째 메시지만 저장 messages = [AIMessage(context="Hi", id=2)] # 두 번째 메시지로 덮어쓰기 ``` ## add_messages 사용 ```python from langgraph.graph.message import add_messages add_messages([HumanMessage(context="Hello", id=1)]) # 첫 번째 메시지 추가 add_messages([AIMessage(context="Hi", id=2)]) # 두 번째 메시지 누적 # 결과: [HumanMessage(...), AIMessage(...)] ``` add_messages는 일반적으로 메시지를 누적하지만, 동일한 id를 가진 메시지가 있을 경우 누적하지 않고 기존 메시지를 새로운 메시지로 대체합니다. # State 객체의 유연성 State 객체의 또 다른 특징은 유연한 사용성입니다. GraphState에 정의된 두 가지 필드(context, messages)를 모두 채울 필요가 없습니다. 필요한 필드만 선택적으로 사용할 수 있어 효율적인 데이터 전달이 가능합니다. 이러한 State의 특징들은 LangGraph에서 복잡한 대화형 시스템을 구현할 때 매우 유용하게 활용됩니다. 특히 add_messages를 통한 메시지 누적 기능은 대화 히스토리를 관리하는 데 탁월한 솔루션을 제공합니다.