LangGraph

LangGraph 10강

[멀티] 멀티 에이전트 · 슈퍼바이저

한 에이전트에 도구를 몽땅 붙이면 판단이 흐려진다. 멀티 에이전트는 역할별 전문 에이전트를 나눠 두고, 슈퍼바이저가 작업을 배분하거나 에이전트끼리 핸드오프(handoff)로 넘긴다. 각 에이전트는 그 자체로 하나의 그래프이므로, 그래프를 노드처럼 중첩(서브그래프)할 수 있다.

LangGraph 10강 구성도

이 강의 목표는 슈퍼바이저·핸드오프 두 가지 멀티 에이전트 패턴을 이해하는 것이다.

1. 슈퍼바이저 패턴

슈퍼바이저가 대화를 보고 어느 에이전트에게 넘길지 매 턴 결정한다. langgraph-supervisor 헬퍼로 쉽게 만든다.

from langgraph.prebuilt import create_react_agent
from langgraph_supervisor import create_supervisor

research = create_react_agent(llm, [web_search], name="research")
coder    = create_react_agent(llm, [run_python], name="coder")

app = create_supervisor(
    [research, coder], model=llm,
    prompt="작업을 알맞은 에이전트에게 배분하라.",
).compile()
res = app.invoke({"messages": [("user", "최신 환율 찾아 그래프 그려줘")]})

2. 핸드오프 패턴

슈퍼바이저 없이 에이전트가 서로에게 직접 넘긴다. 노드가 Command를 반환해 다음 노드로 이동하며 State도 갱신한다.

from langgraph.types import Command
from typing import Literal

def research_node(state) -> Command[Literal["coder", "__end__"]]:
    result = do_research(state)
    return Command(goto="coder", update={"findings": result})

Command는 "다음에 어디로 갈지(goto)"와 "무엇을 바꿀지(update)"를 한 번에 표현한다.

3. 서브그래프

컴파일된 그래프는 다른 그래프의 노드로 넣을 수 있다: parent.add_node("sub", sub_app). 복잡한 시스템을 모듈로 조립한다.

핵심 명령·용어

이름
create_supervisor 슈퍼바이저 그래프 생성
핸드오프 에이전트 간 제어 이전
Command(goto, update) 이동+상태갱신 반환
서브그래프 그래프를 노드로 중첩

예제

# 슈퍼바이저 아래 팀을 계층으로 구성
top = create_supervisor([research_team, writing_team], model=llm)
# research_team, writing_team 자체가 하위 슈퍼바이저 그래프

해설) 계층형 멀티 에이전트는 큰 문제를 팀·담당자로 분해한다. 시작은 슈퍼바이저 한 층으로 충분하고, 규모가 커지면 계층을 늘린다.

댓글 0