프로그래밍

"검색 도구만 가능?" Google ADK 멀티 도구 오류 해결을 위한 실전 가이드

푸른강아지 2025. 6. 24. 17:23
반응형

 

Google ADK: 멀티 에이전트 개발, '검색 도구 제약' 완전 분석 및 해결 전략! Google ADK에서 여러 도구 사용 시 발생하는 '모든 도구가 검색 도구일 때만 여러 도구가 지원됩니다' 오류를 심층 분석하고, 이를 극복할 실용적인 전략을 제시합니다.

 

Google ADK(Agent Development Kit)를 활용하여 복잡한 AI 에이전트 시스템을 구축하려는 개발자분들이라면 한 번쯤은 다음과 같은 메시지를 마주했을 겁니다: "Multiple tools are supported only when they are all search tools". 😟 이 문구를 보는 순간 '아, 또 제약이구나...' 하고 한숨 쉬셨을 분도 계실 텐데요. 하지만 너무 걱정하지 마세요! 이 글에서는 이 제약이 왜 발생하며, 실제 개발에서 어떤 문제점을 야기하는지, 그리고 이를 어떻게 우회하고 효과적으로 활용할 수 있는지에 대한 깊이 있는 통찰을 제공해 드릴게요. 함께 이 복잡한 퍼즐을 풀어보고, 더욱 강력하고 유연한 ADK 기반 AI 에이전트를 만들어 볼까요? 😊

 

Google ADK의 도구 개념 및 종류 🤔

Google ADK에서 '도구(Tool)'는 에이전트가 외부 시스템과 상호작용하고 특정 작업을 수행하는 데 사용하는 핵심 요소예요. 마치 사람이 특정 작업을 위해 다양한 도구를 사용하는 것처럼, AI 에이전트도 도구를 통해 외부 세계와 소통하고 정보를 얻거나 특정 행동을 실행한답니다. 예를 들어, 날씨 정보를 가져오거나 이메일을 보내는 등의 작업이 가능하죠.

ADK에서 제공하는 주요 도구 유형은 크게 두 가지로 나눌 수 있어요.

  • 검색 도구 (Search Tools): 주로 정보 검색과 관련된 기능을 제공하는 도구예요. 대표적으로 Google Search Tool이나 Vertex AI Search Tool 등이 있습니다. 이 도구들은 웹 검색을 통해 최신 정보를 가져오거나, 사내 문서에서 필요한 데이터를 찾아내는 역할을 해요.
  • 커스텀 함수 도구 (Custom Function Tools): 개발자가 직접 정의하는 도구로, 특정 API를 호출하거나 복잡한 비즈니스 로직을 수행하는 데 사용됩니다. 예를 들어, 쇼핑몰 에이전트가 주문 내역을 조회하거나 상품을 추천하는 기능을 만들 때 커스텀 함수 도구를 활용할 수 있어요.
💡 알아두세요!
ADK에서 도구는 에이전트의 '눈'과 '손' 역할을 합니다. 즉, 외부 정보를 인지하고(검색 도구), 그 정보를 바탕으로 실제 행동을 실행하는(커스텀 함수 도구) 데 필수적인 구성 요소라고 할 수 있어요.

 

"모든 도구가 검색 도구일 때만 여러 도구가 지원됩니다" 오류 분석 📊

이제 많은 개발자분들을 혼란스럽게 했던 바로 그 오류 메시지를 자세히 들여다볼까요? "Multiple tools are supported only when they are all search tools"라는 오류는 말 그대로, 에이전트가 여러 개의 도구를 동시에 사용할 때, 그 모든 도구가 '검색 도구' 유형이어야만 한다는 ADK의 현재 제약을 명확히 보여줍니다.

이 제약은 특히 멀티 에이전트 시스템을 구축할 때 큰 걸림돌이 됩니다. 예를 들어, 사용자의 복잡한 요청을 처리하기 위해 여러 하위 에이전트(Sub-Agent)를 구성했다고 가정해 봅시다. 한 하위 에이전트가 데이터베이스에서 특정 정보를 조회하는 커스텀 도구를 사용하고, 다른 하위 에이전트가 외부 웹 검색을 위한 검색 도구를 사용해야 하는 상황이라면, 이 오류에 직면하게 되는 거죠. 기술적인 관점에서 보면, ADK의 현재 설계는 에이전트가 한 번에 여러 비(非)검색 도구를 유연하게 조합하여 사용하는 것을 제한하고 있습니다.

오류 발생 시나리오 예시

구분 도구 유형 오류 발생 여부 설명
시나리오 1 Google Search Tool + Vertex AI Search Tool ✖️ (오류 없음) 모두 검색 도구이므로 문제 없이 사용 가능.
시나리오 2 커스텀 함수 도구 A + 커스텀 함수 도구 B ⭕ (오류 발생) 모두 비검색 도구이므로 여러 개 동시 사용 불가능.
시나리오 3 Google Search Tool + 커스텀 함수 도구 A ⭕ (오류 발생) 검색 도구와 비검색 도구 혼합 사용 불가능.
시나리오 4 단일 커스텀 함수 도구 ✖️ (오류 없음) 하나의 비검색 도구는 사용 가능.
⚠️ 주의하세요!
이 제약은 에이전트의 설계 복잡성을 높이고, 특정 기능을 구현하기 위한 우회적인 방법을 강제하여 개발 시간을 증가시킬 수 있습니다. 특히 다양한 외부 시스템과 연동해야 하는 경우 더욱 주의가 필요해요.

 

제약을 극복하기 위한 전략 및 해결책 💡

이러한 제약에도 불구하고, 우리는 여러 전략을 통해 Google ADK의 기능을 최대한 활용할 수 있습니다. 여기 몇 가지 효과적인 해결책을 제시합니다.

1. 커스텀 도구를 검색 도구처럼 래핑(Wrapping)하기

가장 직접적인 방법 중 하나는 커스텀 도구를 검색 도구의 형태로 '래핑'하는 것입니다. 즉, 커스텀 도구가 수행하는 작업을 마치 '정보 검색'처럼 보이도록 설계하는 거죠. 예를 들어, 데이터베이스에서 사용자 정보를 가져오는 커스텀 도구가 있다면, 이를 "사용자 정보 검색 도구"와 같이 이름 짓고, 도구의 설명(description)과 스키마를 검색 도구처럼 구성합니다. 이렇게 하면 ADK가 이를 검색 도구로 인식하여 다른 검색 도구와 함께 사용할 수 있게 됩니다.

📝 사용법 예시: 커스텀 도구 래핑

기존에 사용자 정보를 조회하는 커스텀 도구를 아래와 같이 검색 도구처럼 정의하여 사용합니다.

// JavaScript (Node.js 환경 예시)
const { Tool } = require('@google/generative-ai');

function createUserSearchTool() {
  return new Tool({
    name: 'user_info_search_tool',
    description: '사용자 ID를 기반으로 사용자 이름, 이메일, 가입일을 검색합니다.',
    parameters: {
      type: 'object',
      properties: {
        userId: {
          type: 'string',
          description: '검색할 사용자의 고유 ID',
        },
      },
      required: ['userId'],
    },
    // 이 함수는 실제 DB 조회 로직을 시뮬레이션합니다.
    execute: async ({ userId }) => {
      // 실제 DB 연동 로직
      const mockUsers = {
        'user123': { name: '김철수', email: 'kim@example.com', join_date: '2023-01-15' },
        'user456': { name: '이영희', email: 'lee@example.com', join_date: '2022-08-20' },
      };
      if (mockUsers[userId]) {
        return { status: 'success', data: mockUsers[userId] };
      } else {
        return { status: 'error', message: '사용자를 찾을 수 없습니다.' };
      }
    },
  });
}

const userInfoTool = createUserSearchTool();
// 이 도구를 다른 검색 도구와 함께 에이전트에 등록할 수 있습니다.
console.log(userInfoTool);

결과 설명: 위 코드는 `user_info_search_tool`이라는 커스텀 도구를 정의하며, 이 도구는 사용자 ID를 입력받아 사용자 정보를 '검색'하는 역할을 수행합니다. `description` 필드를 통해 검색 도구처럼 보이도록 하여 ADK의 제약을 우회할 수 있습니다. 실제 백엔드 로직은 `execute` 함수 안에 구현됩니다.

2. 에이전트 설계 변경 및 도구 유형 분리

더 견고한 방법은 에이전트 아키텍처를 변경하여 각 에이전트가 특정 유형의 도구만 사용하도록 분리하는 것입니다. 예를 들어, '정보 검색 에이전트'는 오직 검색 도구만 사용하고, '작업 실행 에이전트'는 커스텀 함수 도구만 사용하도록 설계하는 거죠. 그리고 이 두 에이전트 간의 조율은 상위 레벨의 'Workflow Agent'나 외부 오케스트레이션 로직을 통해 담당하게 합니다.

  • Workflow Agent 활용: 복잡한 작업 흐름을 조정하는 상위 에이전트를 두어, 필요한 시점에 검색 도구를 사용하는 하위 에이전트를 호출하거나, 비검색 도구를 사용하는 하위 에이전트를 호출하도록 합니다. 이렇게 하면 각 에이전트는 하나의 도구 유형에만 집중할 수 있어 제약을 피할 수 있습니다.
  • 외부 오케스트레이션 레이어: ADK 외부에서 별도의 로직을 구현하여 에이전트 호출 순서와 도구 사용을 직접 제어합니다. 이는 유연성이 매우 높지만, 구현 복잡도가 증가할 수 있습니다.

3. 단일 커스텀 도구 내에서 여러 기능 통합

만약 소수의 비검색 도구를 사용해야 한다면, 이들을 하나의 커스텀 도구 내부로 통합하는 방법도 고려해볼 수 있습니다. 이 단일 커스텀 도구는 여러 서브 기능(sub-functions)을 포함하고, 에이전트의 요청에 따라 적절한 서브 기능을 실행합니다. 이 경우 ADK는 여전히 단일 도구만 사용한다고 인식하므로 제약에 걸리지 않습니다.

⚠️ 주의하세요!
단일 도구 내 기능 통합은 도구의 복잡성을 높이고 유지보수를 어렵게 할 수 있으므로, 기능의 수가 적고 관련성이 높을 때만 적용하는 것이 좋습니다.

 

Google ADK의 미래 방향성 및 확장 가능성 👩‍💼👨‍💻

현재의 '검색 도구' 제약은 Google ADK가 아직 발전 초기 단계에 있다는 것을 보여주는 한 단면입니다. 하지만 Google은 AI 에이전트 개발 플랫폼을 지속적으로 개선하고 확장하고 있어요. 개발자 커뮤니티의 피드백은 이러한 제약 사항들이 향후 업데이트에서 개선될 중요한 동기가 됩니다. 앞으로 ADK는 다음과 같은 방향으로 발전할 가능성이 높습니다.

  • 향상된 도구 오케스트레이션: 검색 도구와 비검색 도구를 더욱 유연하게 조합하고 관리할 수 있는 내장 기능이 강화될 것으로 예상됩니다.
  • 다양한 도구 유형 지원 확대: 현재보다 훨씬 다양한 유형의 도구를 공식적으로 지원하여, 개발자가 우회적인 방법을 사용하지 않고도 복잡한 에이전트를 쉽게 구축할 수 있도록 할 것입니다.
  • 워크플로우 에이전트의 발전: 복합적인 작업을 위한 워크플로우 설계 및 실행 기능이 더욱 강력해져, 개발자가 멀티 에이전트 시스템을 보다 직관적으로 구성할 수 있게 될 것입니다.
📌 알아두세요!
ADK의 발전은 AI 에이전트가 현실 세계의 다양한 문제를 해결하는 데 있어 더욱 강력하고 실용적인 도구가 될 것임을 의미합니다. 지속적인 학습과 실험을 통해 최신 변화에 발맞춰 나가는 것이 중요해요.

 

ADK 도구 활용의 지평을 넓히며 📚

Google ADK의 "Multiple tools are supported only when they are all search tools" 제약은 현재 AI 에이전트 개발에 있어 하나의 도전 과제입니다. 하지만 위에서 제시된 전략들을 통해 이러한 제약을 이해하고, 실용적인 해결책을 적용한다면 충분히 극복할 수 있습니다. 중요한 것은 제약 사항을 명확히 인지하고, 에이전트의 목표와 도구의 특성을 고려하여 최적의 설계 방안을 선택하는 것입니다.

이 글이 여러분이 Google ADK 기반의 강력하고 유연한 AI 에이전트를 구축하는 데 필요한 통찰력과 자신감을 제공했기를 바랍니다. 앞으로도 Google ADK와 함께 AI 에이전트 개발의 무한한 가능성을 탐험해 나가시길 응원합니다! 궁금한 점은 언제든지 댓글로 물어봐주세요~ 😊

 
💡

Google ADK 도구 제약 극복 핵심 요약

✨ 검색 도구만 여러 개 사용 가능: Google ADK는 여러 도구를 사용할 때 모든 도구가 검색 도구여야 하는 제약이 있습니다. 커스텀 함수 도구와 검색 도구 혼합 사용 시 오류가 발생해요.
📊 커스텀 도구 래핑 전략: 비검색 커스텀 도구를 검색 도구처럼 보이도록 `description`과 스키마를 정의하여 제약을 우회할 수 있습니다. 이는 ADK가 이를 검색 도구로 인식하도록 하는 방법입니다.
🧮 에이전트 설계 분리:
Workflow Agent 등을 활용하여 '정보 검색 에이전트' (검색 도구 전용)와 '작업 실행 에이전트' (커스텀 도구 전용)를 분리하여 설계하면 제약을 피할 수 있습니다.
👩‍💻 단일 도구 기능 통합: 소수의 비검색 도구는 하나의 커스텀 도구 내에 여러 서브 기능을 통합하여 구현할 수 있습니다. 이 경우 ADK는 단일 도구 사용으로 인식합니다.

자주 묻는 질문 ❓

Q: Google ADK에서 "Multiple tools are supported only when they are all search tools" 오류는 무엇인가요?
A: 이 오류는 Google ADK가 에이전트에게 여러 개의 도구를 부여했을 때, 이 모든 도구들이 '검색 도구' 유형이어야만 한다는 현재의 제약을 나타냅니다. 커스텀 함수 도구와 검색 도구를 혼합하거나 여러 개의 커스텀 함수 도구를 동시에 사용하는 경우 발생합니다.
Q: 왜 이런 제약이 존재하나요?
A: 정확한 기술적 이유는 Google의 내부 설계에 달려있지만, 현재 ADK가 도구 호출을 계획하고 실행하는 방식에 있어 복잡성을 단순화하기 위한 것으로 추정됩니다. 특히 검색 기능은 다른 유형의 기능보다 예측 가능한 방식으로 작동하는 경향이 있어 먼저 통합된 것으로 보입니다.
Q: 커스텀 도구를 검색 도구처럼 래핑하는 것이 항상 가능한가요?
A: 모든 커스텀 도구를 검색 도구처럼 래핑하는 것이 자연스럽지는 않습니다. 도구의 주 목적이 특정 정보를 '조회'하거나 '검색'하는 것과 유사할 때 효과적입니다. 예를 들어, 데이터베이스 조회나 특정 API로부터 정보를 가져오는 경우가 여기에 해당합니다. 실제 상태를 변경하는 작업(예: 주문하기, 이메일 보내기)의 경우 래핑이 부자연스러울 수 있습니다.
Q: Workflow Agent를 활용하는 방법은 어떤 상황에 적합한가요?
A: Workflow Agent는 복잡한 다단계 작업을 처리해야 하거나, 여러 유형의 도구(검색, 비검색)를 순차적으로 또는 조건부로 사용해야 하는 시나리오에 가장 적합합니다. 각 하위 에이전트가 특정 도구 유형에만 집중하고, Workflow Agent가 전체 흐름을 조율하여 제약을 회피하는 방식입니다.
Q: 이 제약이 미래에 해제될 가능성이 있나요?
A: Google은 ADK를 포함한 자사의 AI 플랫폼을 지속적으로 발전시키고 있습니다. 개발자 커뮤니티의 피드백과 AI 기술의 발전에 따라, 이러한 도구 사용 제약이 향후 업데이트에서 완화되거나 더욱 유연한 도구 관리 기능이 추가될 가능성은 매우 높습니다. 공식 문서나 Google AI 블로그를 주시하는 것이 좋습니다.
반응형