본문 바로가기
AI 공부/AI 에이전트 (AI Agents)

[AI 에이전트 프로젝트] 🧳 Part 3. 멀티 에이전트 시스템: 목적지 추천 → 날씨 확인 → 짐 리스트까지

by 데이터 AI 벌집 2025. 4. 21.
반응형

[AI 에이전트 프로젝트] 🧳 Part 3. 멀티 에이전트 시스템: 목적지 추천 → 날씨 확인 → 짐 리스트까지

 

여행의 모든 걸 도와주는 스마트 AI 비서를 ADK로 만들어볼 시간입니다. 이번 글에서는 3개의 전문 Agent와 이를 오케스트레이션하는 TravelPlannerAgent를 만들어, 목적지 추천부터 날씨 확인, 짐 리스트 제안까지 연결되는 AI 팀워크를 구성합니다.

 

🧠 목표

  • 목적지 추천 Agent, 날씨 Agent, 짐 리스트 Agent를 각각 정의
  • SequentialAgent를 이용해 순차적인 워크플로우 구현
  • 사용자의 단 한마디에 모든 Agent가 협업하는 시스템 완성

👥 전체 에이전트 구성

Agent 이름 역할 설명
destination_agent 목적지 추천 계절, 날씨, 유럽/아시아 여부 기반 추천
weather_agent 날씨 확인 이전 글에서 만든 도구 기반 Agent
packing_agent 짐 리스트 생성 날씨 기반으로 짐 리스트 제안
travel_planner 종합 오케스트레이터 위 세 Agent를 순차적으로 호출 후 결과 통합

 

🛠 Step 1. 목적지 추천 Agent

def recommend_destination(region: str, season: str) -> str:
    """여행 추천 도시 반환"""
    if region == "유럽" and season == "봄":
        return "파리"
    elif region == "아시아" and season == "여름":
        return "오사카"
    else:
        return "바르셀로나"

from google.adk.agents import Agent
from google.genai import types

destination_agent = Agent(
    model="gemini-2.0-flash-001",
    name="destination_agent",
    description="계절과 지역에 따라 여행 목적지를 추천합니다.",
    instruction="유럽, 아시아 등의 지역과 계절(봄, 여름 등)을 받아 여행지를 추천해 주세요.",
    generate_content_config=types.GenerateContentConfig(temperature=0.5),
    tools=[recommend_destination],
)

 

🌤 Step 2. 날씨 Agent

Part 2에서 만든 weather_agent를 그대로 사용합니다.

2025.04.20 - [분류 전체보기] - [AI 에이전트 프로젝트] 🌤️ Part 2. 날씨 전문가 Agent 만들기: 도구를 사용하는 Google ADK 실전 예제


Tool: get_weather(city: str)

 

🧳 Step 3. 짐 리스트 생성 Agent

def suggest_packing_items(weather: str) -> str:
    """날씨에 따라 짐 목록을 추천합니다."""
    if "비" in weather:
        return "우산, 방수 신발, 얇은 자켓"
    elif "맑음" in weather:
        return "선크림, 선글라스, 반팔 옷"
    else:
        return "가벼운 겉옷, 긴팔 셔츠, 여분의 신발"

packing_agent = Agent(
    model="gemini-2.0-flash-001",
    name="packing_agent",
    description="날씨에 따라 필요한 여행 짐을 추천합니다.",
    instruction="날씨 설명(맑음, 비 등)을 입력받아 알맞은 짐 리스트를 추천하세요.",
    generate_content_config=types.GenerateContentConfig(temperature=0.5),
    tools=[suggest_packing_items],
)

 

🧭 Step 4. 여행 플래너 Agent (멀티에이전트 오케스트레이터)

from google.adk.agents import SequentialAgent

travel_planner = SequentialAgent(
    name="travel_planner_agent",
    description="사용자의 여행 조건을 바탕으로 목적지 추천 → 날씨 확인 → 짐 준비 리스트를 종합해서 응답합니다.",
    sub_agents=[destination_agent, weather_agent, packing_agent],
)

 

⚙️ Step 5. Runner 설정 및 사용자 질의 함수

from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.adk.artifacts import InMemoryArtifactService
from google.genai import types

session_service = InMemorySessionService()
artifact_service = InMemoryArtifactService()

runner = Runner(
    app_name="travel_planner_app",
    agent=travel_planner,
    artifact_service=artifact_service,
    session_service=session_service,
)

def ask_travel_planner(query: str):
    session = session_service.create_session(app_name="travel_planner_app", user_id="user")
    content = types.Content(role="user", parts=[types.Part(text=query)])
    events = runner.run(user_id="user", session_id=session.id, new_message=content)

    for event in events:
        if event.is_final_response():
            print("📦 최종 응답:", event.content.parts[0].text)
        if event.get_function_calls():
            for fn in event.get_function_calls():
                print(f"🔧 함수 호출: {fn.name}({fn.args})")
        if event.get_function_responses():
            for fr in event.get_function_responses():
                print(f"✅ 함수 응답: {fr.name} → {fr.response}")

 

🧪 예시 실행

ask_travel_planner("이번 봄에 유럽 어디로 여행 가면 좋을까요?")

🔄 예상 흐름

예상 흐름

  1. destination_agent: “파리 추천”
  2. weather_agent: “맑음, 최고 21도”
  3. packing_agent: “선크림, 반팔, 선글라스”
  4. travel_planner: 모든 결과 종합하여 응답

요약

지금까지 우리는 Google ADK로 다음을 구현했습니다:

  • 각 역할별 Agent 정의
  • Python 함수 기반 Tool 연결
  • SequentialAgent로 에이전트 팀 오케스트레이션
  • 전체 여행 플로우 자동화
반응형