LangGraph Conditional Fan-out
2026년 7월 16일
LangGraph Conditional Fan-out
- Conditional Fan-out = 조건부 Edge의 라우터가 다음 노드 1개가 아니라 여러 노드 목록을 반환해서, 조건에 따라 병렬 실행 대상을 바꾸는 패턴이다.
- 일반 Parallel Agent Fan-out은 항상 같은 노드들로 퍼진다.
- Conditional Fan-out은 State를 보고
DB+CSV, 또는Web처럼 실행 경로를 동적으로 고른다.
구조
Mermaid스크롤로 확대 · 드래그로 이동
실습 코드 감각
Python
found=True이면 로컬 DB와 CSV를 둘 다 조회한다.found=False이면 웹 검색 agent만 실행한다.- 즉 라우터 함수가 문자열 하나가 아니라 문자열 리스트를 반환한다.
Python
- 세 번째 인자는 라우터가 갈 수 있는 후보 노드 목록이다.
route()가 반환한 값이 이 후보 중 어디인지 보고 LangGraph가 다음 노드를 실행한다.
일반 조건부 Edge와 차이
일반 조건부 Edge는 보통 한 경로만 고른다.
Python
Conditional Fan-out은 여러 경로를 동시에 고를 수 있다.
Python
State reducer가 필요한 이유
- 여러 노드가 같은
messages필드에 결과를 추가한다. - 이때 그냥 리스트 필드만 쓰면 나중 결과가 앞 결과를 덮을 수 있다.
- 그래서
add_messagesreducer를 붙인다.
Python
db_agent결과와csv_agent결과가 둘 다messages에 쌓이고,reporter가 이를 읽어 최종 답변을 만든다.
Fan-out / Fan-in 관점
Mermaid스크롤로 확대 · 드래그로 이동
- Fan-out:
entry에서 선택된 agent들로 퍼짐. - Fan-in: 선택된 agent들의 결과가
reporter로 모임. - Reduce:
reporter가 모인 정보를 요약·종합함.
언제 쓰나
- 내부 DB에 정보가 있으면 내부 데이터를 우선 쓴다.
- 로컬 문서가 있으면 로컬 문서 agent를 함께 실행한다.
- 내부 정보가 없을 때만 웹 검색으로 fallback한다.
- 비용이 큰 agent는 필요한 경우에만 실행하고 싶다.
주의
- 여러 노드가 같은 필드를 업데이트하면 reducer를 꼭 확인한다.
- 라우터가 반환할 수 있는 노드 이름은
add_conditional_edges후보에 포함되어야 한다. - 병렬 결과의 순서에 의존하는 코드는 피한다.
- 웹 검색 fallback은 최신성은 좋지만, 출처와 신뢰도를 reporter에서 함께 정리해야 한다.