Note

Strands Graph

DAG/순환 그래프, 조건부 분기, 병렬 실행

⏱ 35분 112 / 189

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 구조도

노드와 엣지로 사전 정의하는 실행 그래프 — 병렬 분기와 합류가 구조에 내장










요청 접수
입력을 첫 노드로


분석 노드
작업 분해 · 분기 결정


검색 노드
병렬 실행 A — 자료 수집


작성 노드
병렬 실행 B — 초안 생성


통합 노드
병렬 결과 합류 · 최종 출력







병렬 분기
합류


흐름은 그래프가 고정하고, 각 노드 안에서만 에이전트가 자율 — 구조와 자율의 절충
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. 1
    Fan-out

    진입 노드가 독립된 복수 노드를 동시 트리거

  2. 2
    병렬 처리

    각 노드가 독립적으로 실행 — 서로 대기하지 않음

  3. 3
    Fan-in

    모든 병렬 노드 완료 후 합류 노드에서 결과 집계

  4. 4
    후속 처리

    집계된 결과를 다음 노드로 전달하여 최종 출력 생성

takeaway

병렬 노드는 서로 기다리지 않지만, 합류 노드는 전원 완료를 기다립니다 — Fan-in이 곧 동기화 지점입니다.

PART 4 · Graph

Graph의 상태 — 엣지로 흐르는 것과 남는 것

노드 사이에는 출력만 흐르고, 실행 상태는 그래프가 관리하는 구조

엣지로 흐르는 것

노드 간 전달

  • 이전 노드의 출력 — 다음 노드의 입력이 됨
  • 병렬 브랜치는 서로 독립 — 상대 결과를 모름
  • 합류 노드에서 병렬 결과를 집계

노드 내부의 대화 이력·중간 추론은 밖으로 나가지 않습니다 — 필요한 산출물만 엣지에 실립니다.

그래프가 관리하는 것

실행 상태

  • 진행 위치 — 어느 노드까지 실행됐는가
  • 순환 시 반복 횟수 — set_max_node_executions 상한
  • 조건 분기 결과 — condition 함수의 런타임 판정

상태가 구조에 있으므로 흐름이 재현 가능 — 관측과 디버깅이 쉬운 이유입니다.

복잡한 문제는 여러 에이전트가 나눠 해결합니다.

Agents-as-Tools · Swarm · Graph · Workflow — 협업의 4가지 패턴