한 에이전트에 도구를 몽땅 붙이면 판단이 흐려진다. 멀티 에이전트는 역할별 전문 에이전트를 나눠 두고, 슈퍼바이저가 작업을 배분하거나 에이전트끼리 핸드오프(handoff)로 넘긴다. 각 에이전트는 그 자체로 하나의 그래프이므로, 그래프를 노드처럼 중첩(서브그래프)할 수 있다.
이 강의 목표는 슈퍼바이저·핸드오프 두 가지 멀티 에이전트 패턴을 이해하는 것이다.
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
댓글은 운영자만 작성할 수 있어요.