Strands Graph
DAG/순환 그래프, 조건부 분기, 병렬 실행
에이전트가 에이전트를 부른다
4가지 멀티에이전트 패턴 — 위임에서 오케스트레이션까지
🕸️
Graph
DAG·순환·조건부 분기·병렬 실행
PART 4 · Graph
Graph
노드는 에이전트, 엣지는 관계 — 복잡한 워크플로우의 그래프 표현
🕸️
Graph
DAG 또는 순환 그래프로 에이전트 간 관계를 정의하는 오케스트레이션입니다
- GraphBuilder — 노드·엣지로 구성
- 조건부 분기 — condition 함수
- 병렬 실행 — Fan-out/Fan-in
- DAG · Cyclic · Conditional 토폴로지
takeaway
조건부 분기와 병렬 실행까지 필요하다면 Graph입니다 — 관계를 코드로 명시하는 만큼 복잡도도 높습니다.
PART 4 · Graph
Graph 구조도
노드와 엣지로 사전 정의하는 실행 그래프 — 병렬 분기와 합류가 구조에 내장
PART 4 · Graph
Graph 구현
GraphBuilder로 노드와 엣지를 정의하는 Graph 패턴
핵심 포인트
- add_node(agent, node_id=)
- 에이전트를 그래프 노드로 등록
- add_edge(a, b, condition=)
- 실행 순서 정의 — condition 함수로 조건부 분기
- state.results
- 조건 함수가 받는 GraphState — 노드 결과를 검사해 bool 반환
- set_entry_point / build()
- 진입 노드 지정 후 그래프 완성·실행
코드
python
from strands import Agent
from strands.multiagent.graph import GraphBuilder
builder = GraphBuilder()
extract = builder.add_node(Agent(system_prompt="Extract key entities."), node_id="extract")
analyze = builder.add_node(Agent(system_prompt="Analyze relationships."), node_id="analyze")
summarize = builder.add_node(Agent(system_prompt="Generate final summary."), node_id="summarize")
def is_confident(state): # GraphState를 받아 bool 반환
node = state.results.get("analyze")
return node is not None and "confident" in str(node.result)
builder.add_edge(extract, analyze)
builder.add_edge(analyze, summarize, condition=is_confident)
builder.add_edge(analyze, extract, condition=lambda s: not is_confident(s))
builder.set_entry_point("extract")
result = builder.build()("분기별 매출 데이터를 분석해줘")
PART 4 · Graph
Graph 3가지 토폴로지
DAG·순환·조건부 — 그래프 토폴로지별 특성과 적용 영역
DAG (비순환)
단방향 의존성 그래프
Cyclic (순환)
피드백 루프 포함 그래프
Conditional (조건부)
런타임 분기 결정
takeaway
한 방향이면 DAG, 되돌아가면 Cyclic — 어느 쪽이든 분기 결정은 condition 함수가 런타임에 내립니다.
PART 4 · Graph
병렬 실행과 합류
독립 노드의 동시 실행과 결과 합류(Fan-out/Fan-in) 메커니즘
-
1
Fan-out
진입 노드가 독립된 복수 노드를 동시 트리거
-
2
병렬 처리
각 노드가 독립적으로 실행 — 서로 대기하지 않음
-
3
Fan-in
모든 병렬 노드 완료 후 합류 노드에서 결과 집계
-
4
후속 처리
집계된 결과를 다음 노드로 전달하여 최종 출력 생성
takeaway
병렬 노드는 서로 기다리지 않지만, 합류 노드는 전원 완료를 기다립니다 — Fan-in이 곧 동기화 지점입니다.
PART 4 · Graph
Graph의 상태 — 엣지로 흐르는 것과 남는 것
노드 사이에는 출력만 흐르고, 실행 상태는 그래프가 관리하는 구조
엣지로 흐르는 것
노드 간 전달
- 이전 노드의 출력 — 다음 노드의 입력이 됨
- 병렬 브랜치는 서로 독립 — 상대 결과를 모름
- 합류 노드에서 병렬 결과를 집계
노드 내부의 대화 이력·중간 추론은 밖으로 나가지 않습니다 — 필요한 산출물만 엣지에 실립니다.
그래프가 관리하는 것
실행 상태
- 진행 위치 — 어느 노드까지 실행됐는가
- 순환 시 반복 횟수 — set_max_node_executions 상한
- 조건 분기 결과 — condition 함수의 런타임 판정
상태가 구조에 있으므로 흐름이 재현 가능 — 관측과 디버깅이 쉬운 이유입니다.
복잡한 문제는 여러 에이전트가 나눠 해결합니다.
Agents-as-Tools · Swarm · Graph · Workflow — 협업의 4가지 패턴