본문 바로가기

인공지능

구글 A2A, ADK, MCP로 만드는 멀티 에이전트 시스템: 여행 플래너 앱 완벽 가이드

728x90
반응형

 

요즘 AI 분야에서는 '멀티 에이전트 시스템'이라는 말이 자주 들립니다.
하지만 막상 손대보려고 하면, 복잡한 용어와 다양한 기술 스택 때문에 한 걸음도 내딛기 어렵죠.

구글은 이 문제를 해결하기 위해 A2A(Agent2Agent) 프로토콜, ADK(Agent Development Kit), MCP(Model Context Protocol)라는 기술 스택을 제시했습니다. 이 조합은 AI 에이전트 간의 통신을 쉽게 하고, 외부 API와도 부드럽게 연결해줍니다.

이 글에서는 구글 기술을 활용하여 여행 플래너 멀티 에이전트 앱을 만드는 방법을 소개합니다.
복잡한 개념을 간단하게 설명하고, 코드 예제와 함께 실제로 구현하는 방법까지 다룹니다.
읽고 나면, 여러분도 직접 멀티 에이전트 시스템을 구축할 수 있게 될 거예요.

반응형

1. A2A, ADK, MCP: 한 줄 요약으로 이해하기

  • A2A (Agent2Agent): 서로 다른 AI 에이전트가 통신할 수 있게 해주는 표준 프로토콜입니다.
  • ADK (Agent Development Kit): 구글이 만든 오픈소스 에이전트 개발 툴킷입니다.
  • MCP (Model Context Protocol): 기존 기업용 API를 LLM(대규모 언어 모델)이 다루기 쉽게 만들어주는 프로토콜입니다.

간단히 정리하면:

  • MCP는 API를 LLM 친화적으로 변환하고,
  • A2A는 에이전트끼리 안전하고 구조적으로 대화하게 하고,
  • ADK는 이런 시스템을 쉽게 개발할 수 있도록 도와주는 툴킷입니다.

2. A2A 프로토콜 핵심 개념 살펴보기

A2A 프로토콜은 에이전트 간 협업을 매우 체계적으로 만듭니다. 주요 기능을 정리하면 다음과 같습니다:

  • Task 기반 통신
    모든 대화는 "Task"로 관리되며, 제출 → 작업 중 → 완료/실패로 상태가 바뀝니다.
  • 에이전트 발견 (Agent Discovery)
    에이전트들은 /.well-known/agent.json 파일을 통해 자신이 할 수 있는 일을 공개합니다.
  • 프레임워크 독립성
    구글 ADK 뿐만 아니라 LangChain, CrewAI 같은 다른 프레임워크와도 문제없이 통신할 수 있습니다.
  • 멀티모달 메시징
    텍스트뿐만 아니라 파일, 구조화된 데이터까지 전송할 수 있습니다.
  • JSON-RPC 메시지 구조
    메시지는 일관된 JSON-RPC 포맷을 사용해 깔끔하게 관리됩니다.
  • 스트리밍과 푸시 알림 지원
    서버 센트 이벤트(SSE) 기반 실시간 업데이트나 Webhook 기반 알림을 지원할 수 있습니다.

3. 멀티 에이전트 아키텍처: 여행 플래너 앱 사례로 배우기

이번에 다룰 여행 플래너 앱은 다음과 같은 구조를 가집니다:

[사용자] → [Itinerary Planner 에이전트] 
   ├──→ [Flight Search 에이전트] (항공편 정보 조회)
   └──→ [Hotel Search 에이전트] (호텔 정보 조회)

주요 구성요소

  • Streamlit UI: 사용자가 여행 요청을 입력합니다.
  • Itinerary Planner 에이전트: 전체 오케스트레이션 담당 (호스트 에이전트).
  • Flight Search 에이전트: 항공권 정보 제공 (ADK 사용).
  • Hotel Search 에이전트: 호텔 정보 제공 (LangChain + OpenAI 사용).
  • A2A 통신: 에이전트 간 안전하고 구조화된 메시지 전송.
  • MCP: 외부 항공권/호텔 API와 연결.

4. 구현 방법: 설치부터 실행까지 빠르게 따라하기

4-1. 사전 준비사항

  • Python 3.11+
  • Google Gemini API 키
  • OpenAI API 키
  • SerpAPI 키

4-2. 기본 패키지 설치

python -m venv .venv
source .venv/bin/activate
pip install fastapi uvicorn streamlit httpx python-dotenv pydantic
pip install google-generativeai google-adk langchain langchain-openai
pip install mcp-hotel-search mcp-flight-search

4-3. 환경 변수 설정

export GOOGLE_API_KEY=your_google_api_key
export OPENAI_API_KEY=your_openai_api_key
export SERP_API_KEY=your_serp_api_key

4-4. 프로젝트 폴더 구조

├── common/
├── flight_search_app/
├── hotel_search_app/
├── itinerary_planner/

5. Demo 리뷰: 실제로 이렇게 작동합니다

5-1. Flight Search Agent 예제 (agent.py)

from google.adk.agents.llm_agent import LlmAgent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StdioServerParameters

server_params = StdioServerParameters(
    command="mcp-flight-search",
    args=["--connection_type", "stdio"],
    env={"SERP_API_KEY": serp_api_key},
)
tools, exit_stack = await MCPToolset.from_server(connection_params=server_params)

5-2. Hotel Search Agent 예제 (langchain_agent.py)

from langchain_openai import ChatOpenAI
from langchain_mcp_adapters.client import MultiServerMCPClient

MCP_CONFIG = {
    "hotel_search": {
        "command": "mcp-hotel-search",
        "args": ["--connection_type", "stdio"],
        "transport": "stdio",
        "env": {"SERP_API_KEY": os.getenv("SERP_API_KEY")},
    }
}

async with MultiServerMCPClient(MCP_CONFIG) as client:
    tools = client.get_tools()

5-3. Itinerary Planner 클라이언트 예제 (a2a_client.py)

payload = {
    "jsonrpc": "2.0",
    "method": "tasks/send",
    "params": {
        "id": task_id,
        "taskId": task_id,
        "message": {
            "role": "user",
            "parts": [{"type": "text", "text": user_message}]
        }
    },
    "id": task_id
}

5-4. Streamlit UI 예제 (streamlit_ui.py)

import requests
from datetime import datetime

API_URL = "http://localhost:8005/v1/tasks/send"

def generate_itinerary(query: str):
    task_id = "task-" + datetime.now().strftime("%Y%m%d%H%M%S")
    payload = {
        "taskId": task_id,
        "message": {
            "role": "user",
            "parts": [{"text": query}]
        }
    }
    response = requests.post(API_URL, json=payload, headers={"Content-Type": "application/json"})
    result = response.json()
    return result

어디에 적용할 수 있을까?

이번에 다룬 구글 A2A + ADK + MCP 기반 멀티 에이전트 앱은
단순한 여행 플래너를 넘어 다양한 분야에 활용될 수 있습니다.

예를 들면:

  • 리테일 추천 시스템
    (상품 추천 에이전트, 결제 에이전트, 배송 에이전트)
  • 고객 서비스 챗봇
    (상담 에이전트, 문제 해결 에이전트, 예약 에이전트)
  • 기업 업무 자동화
    (문서 작성 에이전트, 이메일 답변 에이전트 등)

핵심은 에이전트 간 통신을 표준화(A2A)하고, 외부 도구 연결을 간편화(MCP)해서, LLM이 ‘진짜 일’을 할 수 있게 만든다는 점입니다.


728x90

멀티 에이전트 시스템은 단순한 트렌드가 아닙니다.
복잡한 문제를 풀기 위한 미래형 AI 아키텍처입니다.

이 글을 통해 구글의 A2A, ADK, MCP를 어떻게 이해하고, 어떻게 실습할 수 있는지 전부 배웠습니다.
이제 여러분 차례입니다. 작은 프로젝트부터 직접 시작해보세요! 🚀

https://medium.com/ai-cloud-lab/building-multi-agent-ai-app-with-googles-a2a-agent2agent-protocol-adk-and-mcp-a-deep-a94de2237200

 

Building Multi-Agent AI App with Google’s A2A (Agent2Agent) Protocol, ADK, and MCP  - A Deep Dive

Multi Agent App using A2A Protocol , ADK and MCP

medium.com

728x90
반응형