상세 컨텐츠

본문 제목

Agent Development Kit (ADK) and Multi-Agent Architecture

출장 자동화 시스템

by myeongjaechoi 2025. 11. 8. 14:08

본문

1. Python 환경 설정 기초

  • 가상 환경에서 Python 3.10 사용 시, pip 명령어가 올바르게 실행되어야 한다.
  •  python install -r 대신 pip install -r requirements.txt를 사용해야 하며, 가상 환경이 활성화된 상태에서 .venv/bin/pip로 명시적으로 지정할 수 있다.
  • 프로젝트 디렉토리 구조를 올바르게 유지하는 것이 중요하다. 예를 들어, samples/python/agents/adk_facts/ 경로에 접근할 때 sample (s 빠짐)이 아니라 정확히 samples로 입력해야 한다.

2. Google API 인증 및 설정

  • Google AI API를 사용하려면 API 키가 필수이다. 
  • .env 파일에 GOOGLE_API_KEY=your-key로 저장하고, python-dotenv 패키지를 사용해 load_dotenv()로 로드해야 한다.
  • 중요한 것은 단순히 .env 파일을 생성하는 것만으로는 부족하고, Python 코드에서 명시적으로 로드해야 한다는 점이다.
  • Agent 클래스에 직접 api_key 파라미터를 전달하는 것보다는 Client(api_key=os.environ.get('GOOGLE_API_KEY')) 객체를 생성해서 client=client로 전달하는 방식이 더 안정적이다.

3. A2A (Agent-to-Agent) 아키텍처의 개념

  • A2A는 여러 에이전트가 서로 통신하고 협력하는 아키텍처이다.
  • 메인 에이전트가 원격 에이전트(Remote A2A Agent)를 호출할 때, 각 원격 에이전트는 고유한 포트에서 실행되며 agent-card.json이라는 신원 정보를 가진다.
  • 구체적인 예로, 여행 예약 시스템에서 메인 에이전트가 항공편 에이전트(포트 8001), 숙박 에이전트(포트 8002), 결제 에이전트(포트 8003)를 조율한다.
  • 각 에이전트는 독립적으로 작동하면서도 메인 에이전트의 지시에 따라 협력한다.

4. 로컬 vs 원격 구조 선택

  • 로컬과 원격을 나누는 이유는 확장성, 메모리 효율, 그리고 독립적인 운영이다.
  • 모든 에이전트를 한 서버(로컬)에 두면 메모리 부담이 크고, 한 에이전트의 오류가 전체 시스템을 다운시킬 수 있다.
  • 반대로 모든 에이전트를 원격으로 분산하면 네트워크 지연(Latency)이 증가하고, HTTP 요청 오버헤드가 5배 이상 성능을 저하시킬 수 있다. 따라서 초기 스타트업에는 로컬 + 원격 하이브리드 방식이 최적이다.

5. 병렬 처리와 상호작용

  • 순차적 처리 대신 병렬 처리를 원할 때는 ADK의 sub_agents 리스트에 모든 에이전트를 등록하면, 각 에이전트가 동시에 작동한다.
  • 이 경우 항공 에이전트와 숙박 에이전트가 동시에 최고의 옵션을 찾으면서 서로 상호작용할 수 있다.
  • LangGraph를 사용하면 더 정교한 병렬 처리가 가능하다.
  • StateGraph를 사용해 여러 노드를 동시에 실행하고, 상태를 공유하면서 에이전트 간 상호작용을 구현할 수 있다.

6. AI 기반 회사의 가능성

  • 이론상 AI 에이전트로만 구성한 회사를 만들 수 있다.
  • 항공 에이전트, 숙박 에이전트, 결제 에이전트 등이 모두 자동으로 작동하면서 사람이 개입하지 않아도 시스템이 완전히 자동화될 수 있다.
  • 실제로 OpenAI, Anthropic 같은 AI 회사들이 이런 구조에 가까우며, 매우 높은 이윤율(95% 이상)을 달성할 수 있다.
  • 하지만 현실적으로는 신뢰 문제, 규정 준수, 예외 상황 처리를 위해 최소 1-2명의 인력이 필요하다.

7. 점진적 확장 전략

  • MJK 같은 프로젝트는 Phase 1(프로토타입, 모두 로컬) → Phase 2(사용자 100-1000명, 로컬+원격 하이브리드) → Phase 3(사용자 증가, 완전 분산) 형태로 발전해야 한다.
  • 초기에는 모든 에이전트를 한 곳에서 관리하다가, 특정 에이전트가 자주 업데이트되거나 메모리를 많이 사용하면 그때 분리하는 방식이 효율적이다.
  • 이렇게 하면 불필요한 복잡성을 피하면서도 필요할 때 확장할 수 있다.

8. 모델 버전 호환성

  • gemini-2.5-flash-lite 같은 최신 모델이 모든 API 버전(v1alpha, v1beta 등)에서 지원되지 않을 수 있다.
  • 이 경우 gemini-2.0-flash나 gemini-1.5-flash 같은 안정적인 모델로 변경하면 문제가 해결된다.
  • API 버전 호환성 문제는 google-genai 라이브러리를 최신 버전으로 업그레이드하거나 환경 변수로 API 버전을 명시해서 해결할 수 있다.

9. MJK 프로젝트에 적용

  • MJK는 여행 패키지 자동화 플랫폼이므로, 메인 에이전트가 항공편(Skyscanner), 숙박(Agoda), 결제(Stripe) 에이전트를 조율하는 구조가 이상적이다.
  • 초기에는 모두 로컬에서 개발하다가 사용자가 늘면 필요에 따라 분리하면 된다.
  • 병렬 처리를 통해 항공과 숙박이 동시에 검색되며, 남은 예산을 실시간으로 공유하면서 최적의 패키지 조합을 찾을 수 있다.
  • 이것이 AI 기반 여행 자동화의 핵심이다.

관련글 더보기