AWS 기술 블로그
Amazon Bedrock과 LangGraph로 Multi Agent 시스템 구현하기
이 글은 AWS Machine Learning Blog 에 게시된 Build multi-agent systems with LangGraph and Amazon Bedrock by Jagdeep Singh Soni, Ajeet Tewari, and Rupinder Grewal 을 한국어 번역 및 편집 하였습니다.
대규모 언어 모델(LLM)은 사용자가 자연어로 애플리케이션과 소통할 수 있다는 기대치를 높이며 인간-컴퓨터 상호작용의 수준을 한 단계 끌어올렸습니다. 단순한 언어 이해를 넘어, 실제 애플리케이션에서는 복잡한 워크플로우 관리, 외부 데이터 연결, 다양한 AI 기능의 조율이 필요합니다. 병원 예약을 예로 들어보겠습니다. AI Agent가 사용자의 일정을 확인하고, 의료 제공자 시스템에 접속하며, 보험 정보를 확인한 다음 모든 과정을 한 번에 처리합니다. 더 이상 여러 앱을 전환하거나 긴 대기 시간이 필요 없습니다. 이러한 실제 시나리오에서 Agent는 게임 체인저가 되어 더욱 맞춤화된 생성형 AI 애플리케이션을 제공할 수 있습니다.
LLM Agent는 애플리케이션 제어 흐름을 위한 의사결정 시스템 역할을 합니다. 그러나 이러한 시스템은 확장 및 개발 과정에서 여러 운영 문제에 직면합니다. 주요 문제로는 도구 선택 비효율성(수많은 도구에 접근할 수 있는 Agent가 최적의 도구 선택 및 순서 지정에 어려움을 겪음), 복잡한 컨텍스트 정보를 효과적으로 관리하지 못하는 단일 Agent의 컨텍스트 관리 제한, 그리고 계획, 연구, 분석과 같은 다양한 전문 영역을 요구하는 복잡한 애플리케이션의 전문화 요구 사항이 있습니다. 이러한 문제의 해결책은 Multi Agent 아키텍처를 구현하는 것으로, 이는 주요 시스템을 독립적으로 작동하는 더 작고 전문화된 Agent로 분해하는 방식입니다. 구현 옵션은 기본 프롬프트-LLM 조합부터 정교한 ReAct(Reasoning and Acting) Agent까지 다양하며, 이를 통해 더 효율적인 작업 분배와 다양한 애플리케이션 구성 요소의 전문화된 처리가 가능합니다. 이러한 모듈식 접근 방식은 시스템 관리성을 향상시키고 전문 구성 요소를 통해 기능적 효율성을 유지하면서 LLM 기반 애플리케이션의 더 나은 확장성을 가능하게 합니다.
이 포스트는 오픈소스 Multi Agent 프레임워크인 LangGraph와 Amazon Bedrock을 통합하는 방법을 보여줍니다. LangGraph와 Amazon Bedrock을 사용하여 그래프 기반 오케스트레이션을 활용한 강력하고 상호작용이 가능한 Multi Agent 애플리케이션을 구축하는 방법을 설명합니다.
AWS는 Amazon Bedrock Agents를 위한 multi-agent collaboration 기능을 도입했습니다. 이를 통해 개발자는 복잡한 작업에서 함께 작업하는 여러 AI Agent를 구축, 배포 및 관리할 수 있습니다. 이 기능을 사용하면 프로세스의 다양한 측면을 처리하는 전문화된 Agent를 생성할 수 있으며, 이는 요청을 분석하고, 작업을 위임하며, 출력을 통합하는 Supervisor agent에 의해 조정됩니다. 이러한 접근 방식은 특히 복잡하고 다단계 작업에서 작업 성공률, 정확성 및 생산성을 향상시킵니다.
Multi Agent 시스템의 과제
단일 Agent 시스템에서는 LLM Agent가 작업을 일련의 소규모 작업으로 분해하는 계획을 수립하지만, Multi Agent 시스템에서는 여러 Agent에 걸쳐 작업을 분산하는 워크플로우 관리가 필요합니다. 단일 Agent 환경과 달리, Multi Agent 시스템에서는 각 Agent가 전체 목표에 기여하면서 다른 Agent와의 조화를 유지해야 하는 조정 메커니즘이 필요합니다. 이로 인해 Agent 간 의존성 관리, 자원 할당 및 동기화에 고유한 과제가 발생하며, 성능을 최적화하면서 시스템 전체의 일관성을 유지하는 강력한 프레임워크가 필요합니다.
AI 시스템의 메모리 관리는 단일 Agent와 Multi Agent 아키텍처 간에 차이가 있습니다. 단일 Agent 시스템은 단기 대화 메모리, 장기 기록 저장소, 검색 증강 생성(RAG)과 같은 외부 데이터 소스로 구성된 3단계 구조를 사용합니다. Multi Agent 시스템은 컨텍스트 데이터 관리, 상호작용 추적 및 Agent 간 기록 동기화를 위해 더 고급 프레임워크가 필요합니다. 이러한 시스템은 실시간 상호작용, 컨텍스트 동기화 및 효율적인 데이터 검색을 처리해야 하므로 메모리 계층, 접근 패턴 및 Agent 간 공유의 신중한 설계가 필요합니다.
Agent 프레임워크는 자율 Agent 조정, 통신 및 자원 관리, 워크플로우 오케스트레이션을 위한 인프라를 제공하기 때문에 Multi Agent 시스템에 필수적입니다. Agent 프레임워크는 이러한 복잡한 구성 요소를 처음부터 구축해야 하는 필요성을 줄여줍니다.
LangGraph는 LangChain의 일부로, 복잡한 프로세스를 처리하고 Agent 간 상호작용에서 컨텍스트를 유지하는 그래프 기반 아키텍처를 통해 Agent 워크플로우를 오케스트레이션합니다. 조정을 위해 감독 제어 패턴과 메모리 시스템을 사용합니다.
LangGraph Studio는 그래프 시각화, 실행 모니터링 및 런타임 디버깅 기능으로 개발을 향상시킵니다. LangGraph와 Amazon Bedrock의 통합은 여러 Agent의 강점을 원활하게 활용할 수 있게 하여, LLM 기반 시스템의 효율성과 효과성을 향상시키는 협업 환경을 조성합니다.
LangGraph와 LangGraph Studio 이해하기
LangGraph는 Multi Agent 오케스트레이션을 위해 상태 머신(state machine)과 방향성 그래프를 구현합니다. 이 프레임워크는 Agent 애플리케이션의 흐름과 상태 모두에 대한 세밀한 제어를 제공합니다. LangGraph는 Agent 워크플로우를 그래프로 모델링합니다. 다음 세 가지 핵심 구성요소를 사용하여 Agent의 동작을 정의할 수 있습니다:
- 상태(State) – 애플리케이션의 현재 스냅샷을 나타내는 공유 데이터 구조입니다.
- 노드(Nodes) – 에이전트의 로직을 인코딩하는 Python 함수입니다.
- 엣지(Edges) – 현재 상태를 기반으로 다음에 실행할 노드를 결정하는 Python 함수입니다. 조건부 분기 또는 고정된 전환일 수 있습니다.
LangGraph는 중앙 지속성 계층(persistence layer)를 구현하여 대부분의 Agent 아키텍처에 공통적인 기능을 가능하게 합니다. 여기에는 다음이 포함됩니다:
- 메모리(Memory) – LangGraph는 애플리케이션 상태의 임의 측면을 유지하여 사용자 상호작용 내부 및 상호작용 간의 대화 기억과 기타 업데이트를 지원합니다.
- 인간 참여(Human-in-the-loop) – 상태가 체크포인트되기 때문에 실행을 중단하고 재개할 수 있어 인간 입력을 통해 주요 단계에서 결정, 검증 및 수정이 가능합니다.
LangGraph Studio는 AI Agent 개발을 위해 특별히 설계된 통합 개발 환경(IDE)입니다. 개발자에게 시각화, 실시간 상호작용 및 디버깅 기능을 위한 강력한 도구를 제공합니다. LangGraph Studio의 주요 기능은 다음과 같습니다:
- 시각적 에이전트 그래프 – IDE의 시각화 도구를 통해 개발자는 Agent 흐름을 직관적인 그래픽 휠로 표현할 수 있어 복잡한 시스템 아키텍처를 이해하고 수정하기 쉽습니다.
- 실시간 디버깅 – 실시간으로 Agent와 상호작용하고 실행 중에 응답을 수정할 수 있는 기능은 더 동적인 개발 경험을 제공합니다.
- 상태 기반 아키텍처 – 그래프 기반 아키텍처 내에서 상태 기반 및 적응형 Agent에 대한 지원을 통해 더 정교한 동작과 상호작용이 가능합니다.
다음 스크린샷은 LangGraph Studio에서 볼 수 있는 일반적인 LangGraph Agent 워크플로우의 노드, 엣지 및 상태를 보여줍니다.
그림 1: LangGraph Studio UI
위 예시에서 상태는 __start__ 로 시작하여 __end__ 로 끝납니다. 모델과 도구를 호출하는 노드는 사용자가 정의하며, 엣지(Edges)는 워크플로우가 따를 수 있는 경로를 알려줍니다.
LangGraph Studio는 MacOS 사용자를 위한 데스크톱 애플리케이션으로 제공됩니다. 또는 로컬 LangGraph 애플리케이션을 스튜디오의 웹 버전과 연결하는 데 사용할 수 있는 로컬 인메모리 개발 서버를 실행할 수 있습니다.
솔루션 개요
이 예제는 Supervisor Agent 가 여러 전문 Agent를 조정하는 Supervisor agentic pattern을 보여줍니다. 각 Agent는 자체 스크래치패드를 유지하면서 Supervisor Agent는 Agent 기능에 따라 통신을 조정하고 작업을 위임합니다. 이러한 분산 접근 방식은 Agent가 특정 작업에 집중할 수 있게 하여 효율성을 향상시키는 동시에 병렬 처리 및 시스템 확장성을 가능하게 합니다.
다음 사용자 쿼리를 통해 예제를 살펴보겠습니다: “여행 목적지를 추천하고 항공편과 호텔을 검색해 주세요. 2025년 3월 15일부터 5일 동안 여행하고 싶습니다.” 워크플로우는 다음 단계로 구성됩니다:
- Supervisor Agent가 초기 쿼리를 받아 순차적 작업으로 분해합니다:
- 목적지 추천 필요.
- 2025년 3월 15일 항공편 검색 필요.
- 5일 동안의 호텔 예약 필요.
- Destination Agent는 사용자의 저장된 프로필에 접근하여 작업을 시작합니다. 이 Agent는 historical database를 검색하여 유사한 사용자 프로필의 패턴을 분석하고 목적지를 추천합니다. 그런 다음 목적지를 Supervisor Agent에게 다시 전달합니다.
- Supervisor Agent는 선택된 목적지를 Flight Agent에게 전달하고, Flight Agent는 주어진 날짜에 이용 가능한 항공편을 검색합니다.
- Supervisor Agent는 Hotel Agent를 활성화하고, Hotel Agent는 목적지 도시의 호텔을 검색합니다.
- Supervisor Agent는 추천 사항을 종합적인 여행 계획으로 취합하여 목적지 선정 이유, 항공편 옵션, 호텔 제안을 포함한 완전한 여행 일정을 사용자에게 제공합니다.
다음 그림은 이러한 Agent들이 서로 어떻게 연결되고 각 Agent에 어떤 도구가 관련되어 있는지 보여주는Multi Agent 워크플로우입니다.
사전 요구 사항
이 솔루션을 진행하기 전에 다음 사전 요구 사항이 필요합니다. 이 포스트에서는 us-west-2 AWS 리전을 사용합니다. 사용 가능한 리전에 대한 자세한 내용은 Amazon Bedrock 엔드포인트 및 할당량을 참조하세요.
- 유효한 AWS 계정.
- 필요한 리소스를 생성할 수 있는 충분한 권한이 있는 계정의 AWS Identity and Access Management(IAM) 역할.
- Amazon Bedrock에서 Anthropic의 Claude 3 Sonnet 및 Claude 3.5 Sonnet에 대한 액세스 권한. 지침은 Amazon Bedrock 기반 모델 액세스를 참조하세요.
- 로컬에서 실행 중인 LangGraph 애플리케이션. 빠른 시작: 로컬 LangGraph 서버 시작을 참조하세요.
핵심 구성요소
각 Agent는 두 가지 주요 구성요소로 구성됩니다:
- graph.py – 이 스크립트는 Agent의 워크플로우와 의사결정 로직을 정의합니다. Agent 행동을 관리하기 위한 LangGraph 상태 머신을 구현하고 다양한 구성 요소 간의 통신 흐름을 구성합니다. 예를 들면:
- Flight Agent의 그래프는 채팅과 도구 작업 간의 흐름을 관리합니다.
- Hotel Agent의 그래프는 검색, 예약 및 수정 작업 간의 조건부 라우팅을 처리합니다.
- Supervisor Agent의 그래프는 전체 Multi Agent 워크플로우를 오케스트레이션합니다.
- tools.py – 이 스크립트는 Agent 기능의 구체적인 구현을 포함합니다. 각 작업에 대한 비즈니스 로직을 구현하고 데이터 액세스 및 조작을 처리합니다. 다음과 같은 특정 기능을 제공합니다:
- Flight tools:
search_flights
,book_flights
,change_flight_booking
,cancel_flight_booking
. - Hotel tools:
suggest_hotels
,book_hotels
,change_hotel_booking
,cancel_hotel_booking
.
- Flight tools:
그래프(워크플로우)와 도구(구현) 간의 이러한 분리는 의사결정 프로세스가 실제 작업 실행과 분리된 깔끔한 아키텍처를 가능하게 합니다. Agent들은 LangGraph를 사용하여 구현된 상태 기반 그래프 시스템을 통해 통신하며, Supervisor가 전문 Agent 간의 정보 및 작업 흐름을 지시합니다.
LangGraph와 함께 Amazon Bedrock을 설정하려면 다음 GitHub 저장소를 참조하세요. 상위 수준의 단계는 다음과 같습니다:
- 필요한 패키지 설치:
이러한 패키지는 AWS Bedrock 통합에 필수적입니다:
boto
: Python용 AWS SDK로, AWS 서비스 통신을 처리합니다langchain-aws
: AWS 서비스를 위한 LangChain 통합을 제공합니다
- 모듈 가져오기:
- LLM 객체 생성:
이 프로젝트는 애플리케이션 구조와 종속성을 정의하기 위해 langgraph.json 구성 파일을 사용합니다. 이 파일은 LangGraph Studio가 Agent 그래프를 실행하고 시각화하는 방법을 이해하는 데 필수적입니다.
LangGraph Studio는 이 파일을 사용하여 Agent 워크플로우를 구축하고 시각화하여 Multi Agent 상호작용을 실시간으로 모니터링하고 디버깅할 수 있게 합니다.
테스트 및 디버깅
이제 Multi-Agent 여행 도우미를 테스트할 준비가 되었습니다. langgraph dev
명령을 사용하여 그래프를 시작할 수 있습니다. 이 명령은 핫 리로딩 및 디버깅 기능이 있는 개발 모드에서 LangGraph API 서버를 시작합니다. 다음 스크린샷에서 볼 수 있듯이, 인터페이스는 왼쪽 상단의 드롭다운 메뉴를 통해 테스트하려는 그래프를 선택하는 간단한 방법을 제공합니다. 하단의 Manage Configuration 버튼을 사용하면 시작하기 전에 특정 테스트 매개변수를 설정할 수 있습니다. 이 개발 환경은 실시간 피드백과 모니터링 기능을 통해 Multi Agent 시스템을 철저히 테스트하고 디버깅하는 데 필요한 모든 것을 제공합니다.
그림 3: Destination Agent 추천이 있는 LangGraph studio
LangGraph Studio는 직관적인 인터페이스를 통해 유연한 구성 관리를 제공합니다. 다음 스크린샷과 같이, 그래프 실행을 위한 여러 구성 버전(v1, v2, v3)을 생성하고 관리할 수 있습니다. 예를 들어, 이 시나리오에서는 과거 사용 정보를 가져오기 위해 user_id
를 사용하고자 합니다. 이 버전 관리 시스템을 통해 Multi Agent 시스템을 디버깅하는 동안 다양한 테스트 구성을 추적하고 전환하는 것이 간단해집니다.
앞의 예시에서, 도구가 기록이나 기타 세부 정보를 검색하는 데 사용할 수 있는 user_id
를 설정했습니다.
이제 Planner Agent를 테스트해 보겠습니다. 이 Agent는 compare_and_recommend_destination
도구를 가지고 있으며, 이 도구는 과거 여행 데이터를 확인하고 사용자 프로필을 기반으로 여행 목적지를 추천할 수 있습니다. 도구에서 사용할 수 있도록 구성에 user_id
를 사용합니다.
LangGraph는 스레드를 사용하여 관리되는 체크포인트 메모리 개념을 가지고 있습니다. 다음 스크린샷은 LangGraph Studio에서 스레드를 빠르게 관리할 수 있음을 보여줍니다.
이 예시에서 destination_agent
는 도구를 사용하고 있습니다. 도구의 출력도 확인할 수 있습니다. 마찬가지로 flight_agent
와 hotel_agent
를 테스트하여 각 Agent를 검증할 수 있습니다.
모든 Agent가 잘 작동하면 전체 워크플로우를 테스트할 준비가 된 것입니다. 상태를 평가하고 각 에이전트의 입력과 출력을 확인할 수 있습니다.
다음 스크린샷은 하위 Agent가 포함된 Supervisor Agent의 전체 보기를 보여줍니다.
그림 6: 전체 워크플로우가 포함된 Supervisor Agent
고려사항
Multi Agent 아키텍처는 Agent 조정, 상태 관리, 통신, 출력 통합, 가드레일, 처리 컨텍스트 유지, 오류 처리 및 오케스트레이션을 고려해야 합니다. 그래프 기반 아키텍처는 선형 파이프라인보다 상당한 이점을 제공하여 비선형 통신 패턴과 더 명확한 시스템 시각화를 통해 복잡한 워크플로우를 가능하게 합니다. 이러한 구조는 동적 경로와 적응형 통신을 허용하며, 동시 Agent 상호작용이 있는 대규모 배포에 이상적입니다. 병렬 처리 및 리소스 할당에 뛰어나지만 정교한 설정이 필요하며 더 높은 컴퓨팅 리소스를 요구할 수 있습니다. 이러한 시스템을 구현하려면 시스템 토폴로지의 신중한 계획, 강력한 모니터링 및 실패한 상호작용에 대한 잘 설계된 대체 메커니즘이 필요합니다.
조직에서 Multi Agent 아키텍처를 구현할 때는 회사의 기존 생성형 AI 운영 및 거버넌스 프레임워크와 일치시키는 것이 중요합니다. 배포 전에 조직의 AI 안전 프로토콜, 데이터 처리 정책 및 모델 배포 지침과의 일치 여부를 확인하세요. 이 아키텍처 패턴이 상당한 이점을 제공하지만, 그 구현은 조직의 특정 AI 거버넌스 구조 및 위험 관리 프레임워크에 맞게 조정되어야 합니다.
정리
이 포스트를 위해 특별히 생성한 모든 IAM 역할과 정책을 삭제하세요. 이 포스트의 코드 로컬 복사본을 삭제하세요. Amazon Bedrock FM에 더 이상 액세스할 필요가 없는 경우, 해당 액세스를 제거할 수 있습니다. Amazon Bedrock 기반 모델에 대한 액세스 추가 또는 제거를 참조하세요.
결론
LangGraph와 Amazon Bedrock의 통합은 정교한 AI 애플리케이션을 위한 강력한 프레임워크를 제공함으로써 Multi Agent 시스템 개발을 크게 발전시킵니다. 이 조합은 LangGraph의 오케스트레이션 기능과 Amazon Bedrock의 FM을 활용하여 확장 가능하고 효율적인 시스템을 만듭니다. 상태 관리, Agent 조정 및 워크플로우 오케스트레이션을 통해 Multi Agent 아키텍처의 문제를 해결하며, 메모리 관리, 오류 처리 및 인간 참여(human-in-the-loop) 기능과 같은 특징을 제공합니다. LangGraph Studio의 시각화 및 디버깅 도구는 복잡한 Agent 상호작용의 효율적인 설계와 유지 관리를 가능하게 합니다. 이 통합은 차세대 Multi Agent 시스템을 위한 강력한 기반을 제공하며, 효과적인 워크플로우 처리, 컨텍스트 유지, 신뢰할 수 있는 결과 및 최적의 리소스 활용을 가능하게 합니다.
이 포스트에서 논의된 예제 코드와 데모는 함께 제공된 GitHub 저장소를 참조하세요. 또한 Amazon Bedrock multi-agent collaboration code 샘플을 위한 GitHub 저장소도 참조할 수 있습니다.