Reducer

랭그래프(LangGraph)에서 리듀서(Reducer)는 그래프 내부의 각 에이전트 노드(Node)가 실행 완료 후 반환하는 새로운 데이터 결과값을 기존의 전역 상태(State) 구조에 어떻게 적용하고 병합할지 결정하는 집계 함수이다.

LangGraph는 상태 기반(Stateful) 프레임워크로, 시스템의 모든 노드가 하나의 ‘상태 객체(State Object)‘를 공유하고 이를 지속적으로 업데이트하며 동작한다. 상태 딕셔너리의 특정 키(Key)에 대해 노드가 새로운 값을 반환할 때, 시스템에 아무런 규칙이 설정되어 있지 않으면 기본적으로 기존 데이터를 덮어쓴다(Overwrite).

하지만 대화 기록(Messages)처럼 데이터를 보존하면서 계속 이어붙여야 하는 경우, 파이썬의 typing.Annotated 문법을 활용하여 상태 스키마 선언 시 리듀서 함수(예: 파이썬 내장 operator.add 등)를 주입한다. 이 설정은 시스템이 두 개의 값을 입력받아 하나의 값으로 반환하도록 지시한다.

LangGraph의 상태를 구성할 때 리듀서 함수의 적용 여부 및 방식에 따른 상태 업데이트 로직의 비교는 다음과 같다.

상태 업데이트 방식리듀서(Reducer) 선언 예시동작 메커니즘 및 데이터 처리주요 활용 목적
기본 덮어쓰기 (Default Overwrite)일반 타입 사용 (예: query: str)리듀서가 생략됨. 노드가 반환한 새로운 값으로 기존 상태 키의 데이터를 완전히 대체함.현재 활성화된 에이전트 상태, 단일 검색어 갱신, 최종 결과물 반환
리스트 누적 (List Append)Annotated[list, operator.add]기존 리스트 데이터 배열에 새로운 원소나 리스트를 추가(Append/Extend)하여 하나의 긴 배열로 결합함.LLM 대화 이력(Message History) 누적, 각 실행 단계의 중간 로그 보관
딕셔너리/객체 병합 (Dict Merge)커스텀 함수 주입 (예: Annotated[dict, merge_dicts])기존 딕셔너리와 새 딕셔너리의 키를 대조하여 값을 재가공하거나 내부를 병합함. 특정 키의 값만 선택적 덮어쓰기 기능 구현 가능.복합적인 구조를 지닌 에이전트 인프라의 상태 동기화 및 부분 데이터 갱신
커스텀 필터링 로직커스텀 함수 주입 (예: Annotated[list, filter_old_messages])새 데이터가 들어올 때, 오래된 메시지 목록은 삭제하고 최신 메시지만 남기는 등 복잡한 내부 연산을 수행한 뒤 상태를 변경함.모델의 컨텍스트 윈도우(Context Window) 한도 초과 방지 및 메모리 관리

출처 (Sources):

Entities