1. 이 실습의 목표
이 실습에서는 프롬프트에 따라 이미지를 생성하고 프롬프트에 대해 평가하는 ADK (에이전트 개발 키트) 를 사용하여 멀티 에이전트 애플리케이션을 빌드합니다. 이미지가 프롬프트에 설명된 요구사항을 충족하지 않으면 요구사항을 충족하는 이미지가 생성될 때까지 에이전트가 계속 이미지를 생성합니다. 이 실습의 각 에이전트는 단일 목적을 가지며, 에이전트는 전체 목표를 달성하기 위해 서로 협력합니다. 애플리케이션을 로컬에서 테스트하고 Vertex AI Agent Engine에 배포하는 방법을 알아봅니다.
학습할 내용
- ADK (에이전트 개발 키트) 의 기본사항을 이해하고 멀티 에이전트 시스템을 만드는 방법을 알아봅니다.
- Vertex AI Agent Engine에서 에이전트를 쉽게 배포하고 사용하는 방법을 알아봅니다.
- A2A 프로토콜의 기본사항 이해
- A2A 프로토콜과 ADK (에이전트 개발 키트) 를 함께 사용하여 개방형 에이전트를 만드는 방법을 알아봅니다.
2. 프로젝트 설정
- 사용할 수 있는 프로젝트가 아직 없으면 GCP 콘솔에서 새 프로젝트를 만들어야 합니다.
- 이 실습에서는 GCP Cloud Shell을 사용하여 작업을 수행합니다. Cloud Shell을 열고 Cloud Shell을 사용하여 프로젝트를 설정합니다.
- 여기를 클릭하여 GCP Cloud Shell을 엽니다(Cloud Shell ). '셸 승인' 팝업이 표시되면 클릭하여 Cloud Shell 편집기를 승인합니다.
- Cloud Shell 터미널에서 다음 명령어를 사용하여 프로젝트가 이미 인증되었는지 확인할 수 있습니다.
gcloud auth list
- Cloud Shell에서 다음 명령어를 실행하여 프로젝트를 확인합니다.
gcloud config list project
- 프로젝트 ID를 복사하고 다음 명령어를 사용하여 설정합니다.
gcloud config set project <YOUR_PROJECT_ID>
- 이 실습을 실행하려면 몇 가지 서비스를 사용 설정해야 합니다. Cloud Shell에서 다음 명령어를 실행합니다.
gcloud services enable aiplatform.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com
3. 에이전트 개발 키트 소개
에이전트 개발 키트는 에이전트형 애플리케이션을 빌드하는 개발자에게 다음과 같은 여러 주요 이점을 제공합니다.
- 멀티 에이전트 시스템: 계층 구조 내에서 여러 전문 에이전트를 조합하여 확장 가능한 모듈식 애플리케이션을 빌드합니다. 복잡한 조정과 위임도 구현할 수 있습니다.
- 다양한 도구 생태계: 에이전트에 다양한 기능을 제공합니다. 사전 빌드된 도구(검색, 코드 실행 등)를 사용하거나, 커스텀 함수를 만들거나, 서드 파티 에이전트 프레임워크(LangChain, CrewAI)의 도구를 통합하거나, 심지어 다른 에이전트를 도구로 사용할 수도 있습니다.
- 유연한 조정: 워크플로 에이전트 (
SequentialAgent,ParallelAgent,LoopAgent)를 사용하여 예측 가능한 파이프라인을 위한 워크플로를 정의하거나 LLM 기반 동적 라우팅 (LlmAgent전송)을 활용하여 적응형 동작을 구현합니다. - 개발자 환경 통합: 강력한 CLI와 대화형 개발 UI를 사용하여 로컬에서 개발, 테스트, 디버그를 수행합니다. 이벤트, 상태, 에이전트 실행을 단계별로 검사합니다.
- 기본으로 제공되는 평가: 사전 정의된 테스트 사례를 기준으로 최종 대답 품질과 단계별 실행 궤적을 평가하여 에이전트 성능을 체계적으로 판단합니다.
- 배포 준비 완료: 에이전트를 컨테이너화하고 어디에나 배포합니다. 로컬에서 실행하거나, Vertex AI Agent Engine으로 확장하거나, Cloud Run 또는 Docker를 사용하여 커스텀 인프라에 통합할 수도 있습니다.
다른 생성형 AI SDK나 에이전트 프레임워크를 사용하여 모델을 쿼리하고 도구를 사용하여 모델을 강화할 수도 있지만, 여러 모델을 동적으로 조율하려면 상당한 양의 작업을 수행해야 합니다.
에이전트 개발 키트는 이러한 도구보다 높은 수준의 프레임워크를 제공합니다. 따라서 여러 에이전트를 쉽게 연결하여 복잡하지만 간편하게 유지관리 가능한 워크플로를 구현할 수 있습니다.

그림 1: ADK (에이전트 개발 키트)의 포지셔닝
4. Vertex AI Agent Engine 소개
Vertex AI Agent Engine은 Google Cloud에 에이전트를 배포하는 완전 관리형 서비스입니다. Vertex AI Agent Engine을 사용하면 개발자가 Vertex AI에서 OSS AI 에이전트( ADK (에이전트 개발 키트) , LangChain, LangGraph, CrewAI, AutoGen 등)를 개발, 맞춤설정, 배포, 제공, 관리할 수 있습니다.
Agent Engine은 에이전트 메모리라고도 하는 사용자 데이터를 처리하는 서비스도 제공합니다. 현재 두 가지 종류의 메모리 서비스를 사용할 수 있습니다.
- 단기 메모리: Agent Engine 세션을 사용하면 단일 세션 내에서 진행 중인 대화 기록 (상태)을 단기 메모리로 저장, 관리, 검색할 수 있습니다.
- 장기 메모리: Agent Engine 메모리 뱅크를 사용하여 여러 세션에서 특히 메모리 (상태)를 장기 메모리로 저장, 변환, 검색합니다.
Cloud Run 또는 GKE와 같은 다른 Google Cloud 서비스에 에이전트를 배포할 수도 있지만 다음 사용 사례에는 Vertex AI Agent Engine을 사용하는 것이 좋습니다.
- 상태 저장 완전 관리형 런타임: 에이전트 배포에 상태 저장 완전 관리형 런타임이 필요한 경우 Vertex AI Agent Engine이 좋은 선택입니다. 세션 관리, AI 에이전트의 지속성과 같은 일반적인 작업을 추상화하기 때문입니다.
- 코드 실행: 에이전트가 사용자 세션 중에 동적으로 생성된 코드를 실행해야 하는 경우 Agent Engine은 코드를 실행할 수 있는 안전한 샌드박스를 제공합니다.
- 유연한 장기 메모리: 에이전트에 유연한 장기 메모리가 필요한 경우 Vertex AI Agent Engine과 함께 사용할 수 있는 Vertex AI 메모리 뱅크를 사용하면 세션 전반에서 사용할 수 있는 사용자 정보를 기억하는 유연한 방법을 제공할 수 있습니다.
Vertex AI Agent Engine을 Cloud Run과 같은 다른 런타임과 결합하여 유연한 애플리케이션 아키텍처를 만들 수도 있습니다. 다음은 다양한 서비스를 사용하여 에이전트를 빌드하는 참조 아키텍처의 예입니다.

그림 2: 여러 서비스를 사용하여 에이전트를 빌드하기 위한 샘플 참조 아키텍처
5. A2A 소개
Agent2Agent (A2A) 프로토콜은 다양한 프레임워크, 공급업체, 도메인의 자율 AI 에이전트 간의 원활하고 안전한 통신과 협업을 지원하도록 설계된 개방형 표준입니다.
- 범용 상호 운용성: A2A를 사용하면 에이전트가 기본 기술과 관계없이 함께 작동하여 진정한 멀티 에이전트 생태계를 조성할 수 있습니다. 즉, 다양한 플랫폼에서 여러 회사에서 빌드한 에이전트가 서로 소통하고 조정할 수 있습니다.
- 기능 검색: 에이전트는 자신의 ID, 지원되는 A2A 기능, 기술, 인증 요구사항을 설명하는 '에이전트 카드' (JSON 문서)를 사용하여 기능을 광고할 수 있습니다. 이를 통해 다른 에이전트가 특정 작업에 가장 적합한 에이전트를 검색하고 선택할 수 있습니다.
- 기본적으로 보안: 보안은 핵심 원칙입니다. A2A는 HTTPS/TLS, JWT, OIDC, API 키와 같은 표준을 활용하여 안전한 상호작용을 보장하고 민감한 데이터를 보호하는 엔터프라이즈급 인증 및 승인 메커니즘을 통합합니다.
- 모달리티에 구애받지 않음: 이 프로토콜은 텍스트, 오디오, 동영상 스트리밍은 물론 대화형 양식과 삽입된 iframe 등 다양한 커뮤니케이션 모달리티를 지원합니다. 이러한 유연성을 통해 상담사는 작업과 사용자에게 가장 적합한 형식으로 정보를 교환할 수 있습니다.
- 구조화된 작업 관리: A2A는 작업 위임, 모니터링, 완료에 관한 명확한 프로토콜을 정의합니다. 관련 작업을 그룹화하고 고유한 작업 ID를 사용하여 여러 에이전트에서 관리할 수 있습니다. 작업은 정의된 수명 주기 (예: 제출됨, 작업 중, 완료됨)를 거쳐 전환될 수 있습니다.
- 불투명한 실행: 에이전트가 다른 에이전트에게 내부 추론 프로세스, 메모리 또는 특정 도구를 공개하지 않아도 된다는 점이 중요한 특징입니다. 호출 가능한 서비스만 노출하여 모듈성과 개인 정보 보호를 촉진합니다.
- 기존 표준 기반: A2A는 HTTP, 실시간 스트리밍을 위한 서버 전송 이벤트 (SSE), 구조화된 데이터 교환을 위한 JSON-RPC와 같은 기존 웹 기술을 활용하므로 기존 IT 인프라와 더 쉽게 통합할 수 있습니다.
- 비동기 통신: 이 프로토콜은 비동기 통신을 기본 고려사항으로 설계되어 유연한 작업 진행을 지원하고 연결이 지속적으로 유지되지 않는 경우에도 업데이트를 위한 푸시 알림을 사용 설정합니다.
6. 에이전트 아키텍처
이 실습에서는 사양에 따라 이미지를 생성하고 이미지를 평가한 후 사용자에게 표시하는 멀티 에이전트 애플리케이션을 만듭니다.
시스템은 전체 프로세스를 오케스트레이션하는 image_scoring라는 기본 에이전트로 구성됩니다. 이 기본 에이전트에는 image_generation_scoring_agent라는 하위 에이전트가 있으며, 이 하위 에이전트에는 더 구체적인 작업을 위한 자체 하위 에이전트가 있습니다. 이렇게 하면 기본 에이전트가 하위 에이전트에게 작업을 위임하는 계층적 관계가 생성됩니다. 
그림 3: 전체 에이전트 흐름
모든 상담사 목록
Agent | 목적 | 하위 에이전트 |
image_scoring (기본 에이전트) | 전체 워크플로를 관리하는 루트 에이전트입니다. 종료 조건이 충족될 때까지 image_generation_scoring_agent와 checker_agent를 루프에서 반복 실행합니다. | image_generation_scoring_agent |
image_generation_scoring_agent (image_scoring의 하위 에이전트) | 이 에이전트는 이미지를 생성하고 점수를 매기는 핵심 로직을 담당합니다. 이를 위해 세 개의 하위 에이전트 시퀀스를 실행합니다. | image_generation_prompt_agent |
checker_agent_instance (image_scoring의 하위 에이전트) | 이 에이전트는 이미지 점수 매기기 프로세스를 계속해야 하는지 아니면 종료해야 하는지 확인합니다. check_tool_condition 도구를 사용하여 종료 조건을 평가합니다. | - |
checker_agent_instance (image_scoring의 하위 에이전트) | 이 에이전트는 이미지 생성을 위한 프롬프트를 만드는 전문가입니다. 입력 텍스트를 가져와 이미지 생성 모델에 적합한 상세한 프롬프트를 생성합니다. | - |
image_generation_prompt_agent (image_generation_scoring_agent의 하위 에이전트) | 이 에이전트는 이미지 생성을 위한 프롬프트를 만드는 전문가입니다. 입력 텍스트를 가져와 이미지 생성 모델에 적합한 상세한 프롬프트를 생성합니다. | - |
scoring_images_prompt (image_generation_scoring_agent의 하위 에이전트): | 이 에이전트는 다양한 기준에 따라 이미지를 평가하고 점수를 매기는 전문가입니다. 생성된 이미지를 가져와 점수를 할당합니다. | - |
사용된 모든 도구 목록
도구 | 설명 | 사용자 에이전트 |
check_tool_condition | 이 도구는 루프 종료 조건이 충족되었는지 또는 최대 반복 횟수에 도달했는지 확인합니다. 둘 중 하나가 참이면 루프가 중지됩니다. | checker_agent_instance |
generate_images | 이 도구는 Imagen 3 모델을 사용하여 이미지를 생성합니다. 생성된 이미지를 Google Cloud Storage 버킷에 저장할 수도 있습니다. | image_generation_agent |
get_policy | 이 도구는 JSON 파일에서 정책을 가져옵니다. 이 정책은 image_generation_prompt_agent가 이미지 생성 프롬프트를 만드는 데 사용되고 scoring_images_prompt가 이미지를 평가하는 데 사용됩니다. | image_generation_agent |
get_image | 이 도구는 생성된 이미지 아티팩트를 로드하여 점수를 매길 수 있도록 합니다. | scoring_images_prompt |
set_score | 이 도구는 세션 상태에서 생성된 이미지의 총 점수를 설정합니다. | scoring_images_prompt |
7. ADK 설치 및 환경 설정
이 실습에서는 Cloud Shell을 사용하여 작업을 수행합니다.
Cloud Shell 편집기 탭 준비
- 이 링크를 클릭하여 Cloud Shell 편집기로 바로 이동합니다.
- 계속을 클릭합니다.
- Cloud Shell을 승인하라는 메시지가 표시되면 승인을 클릭합니다.
- 이 실습의 나머지 부분에서는 이 창을 Cloud Shell 편집기 및 Cloud Shell 터미널이 있는 IDE로 사용할 수 있습니다.
- Cloud Shell 편집기에서 터미널>새 터미널을 사용하여 새 터미널을 엽니다. 아래의 모든 명령어는 이 터미널에서 실행됩니다.
실습에 필요한 ADK 및 코드 샘플 다운로드 및 설치
- 다음 명령어를 실행하여 github에서 필요한 소스를 클론하고 필요한 라이브러리를 설치합니다. Cloud Shell 편집기에서 열린 터미널에서 명령어를 실행합니다.
#create the project directory
mkdir ~/imagescoring
cd ~/imagescoring
#clone the code in the local directory
git clone https://github.com/haren-bh/multiagenthandson.git
- uv를 사용하여 Python 환경을 만듭니다 (Cloud Shell 편집기 터미널에서 실행).
#Install uv if you do not have installed yet
pip install uv
#Create the virtual environment
uv venv .adkvenv
source .adkvenv/bin/activate
#go to the project directory
cd ~/imagescoring/multiagenthandson
#install dependencies
uv pip install -r pyproject.toml
- 클라우드 스토리지 버킷이 없으면 Google Cloud Storage에서 새 버킷을 만듭니다. gsutil 명령어를 사용하여 버킷을 만들 수도 있습니다. Google Cloud Storage에 대한 Agent Engine 액세스 권한을 부여합니다 (Cloud Shell 편집기 터미널에서 실행).
# First, make sure your PROJECT_ID variable is set
PROJECT_ID=$(gcloud config get-value project)
# Now, create the bucket with a unique name
# We'll use the project ID to help ensure uniqueness
gsutil mb gs://${PROJECT_ID}-imagescoring-bucket
#Now lets give Agent Engine the permission to access Cloud Storage
# 1. Get the current Project ID (text) and Project Number (numeric)
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
# 2. Construct the Reasoning Engine Service Account email
SA_EMAIL="service-${PROJECT_NUMBER}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"
# 3. Create Agent Engine Service account if not already created
gcloud beta services identity create --service=aiplatform.googleapis.com --project=${PROJECT_NUMBER}
# 3. Grant GCS Access
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA_EMAIL" --role="roles/storage.objectUser" --condition=None
- 편집기에서 보기 -> 숨김 파일 전환으로 이동합니다. image_scoring 폴더에서 다음 콘텐츠로 .env 파일을 만듭니다. 프로젝트 이름, Cloud Storage 버킷과 같은 필수 세부정보를 추가합니다 (Cloud Shell 편집기 터미널에서 실행).
#go to image_scoring folder
cd ~/imagescoring/multiagenthandson/image_scoring
cat <<EOF>> .env
GOOGLE_GENAI_USE_VERTEXAI=1
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_CLOUD_STORAGE_BUCKET=$(gcloud config get-value project)-imagescoring-bucket
GCS_BUCKET_NAME=$(gcloud config get-value project)-imagescoring-bucket
SCORE_THRESHOLD=40
IMAGEN_MODEL="imagen-3.0-generate-002"
GENAI_MODEL="gemini-2.5-flash"
EOF
- 소스 코드에서 에이전트 구조를 살펴봅니다(agent.py부터 시작). 이 에이전트에는 다른 에이전트에 연결되는 루트 에이전트가 포함되어 있습니다.
- 터미널에서 최상위 디렉터리 multiagenthandson으로 돌아가 다음 명령어를 실행하여 에이전트를 로컬로 실행합니다 (Cloud Shell 편집기 터미널에서 실행).
#go to the directory multiagenthandson
cd ~/imagescoring/multiagenthandson
# Run the following command to run agents locally
adk web

그림 4
터미널에 표시된 http:// URL을 Ctrl+클릭 (MacOS의 경우 CMD+클릭)하여 ADK의 브라우저 기반 GUI 클라이언트를 엽니다. 그림 2와 같이 표시됩니다.
- 왼쪽 상단의 드롭다운 메뉴에서 image_scoring을 선택합니다 (그림 5 참고). 이제 이미지를 생성해 보겠습니다. Google Cloud Storage 버킷에서도 이미지를 확인할 수 있습니다. 다음 프롬프트 또는 직접 만든 프롬프트를 사용해 보세요.
- 일몰 시 평화로운 산 풍경
- 자전거를 타는 고양이

그림 5: 샘플 출력
8. Agent Engine에 배포
이제 에이전트를 Agent Engine에 배포합니다. Agent Engine은 GCP에 에이전트를 배포하기 위한 완전 관리형 서비스입니다. Agent Engine은 ADK (에이전트 개발 키트)와 호환되므로 ADK (에이전트 개발 키트)로 빌드된 에이전트를 Agent Engine에 배포할 수 있습니다.
- Poetry를 사용하여 requirements.txt 파일을 만듭니다. Poetry는 pyproject.toml을 사용하여 requirements.txt 파일을 만듭니다. 명령어를 실행한 후 requirements.txt 파일이 생성되었는지 확인합니다 (Cloud Shell 편집기 터미널에서 실행).
# Go to the parent folder containing pyproject.toml file
cd ~/imagescoring/multiagenthandson
# install poetry-plugin-export
uv pip install poetry-plugin-export
#Create requirements.txt file
python3 -m poetry export -f requirements.txt --output requirements.txt --without-hashes
- 패키지를 만듭니다. 앱을 .whl Python 패키지로 번들링해야 합니다. 이를 위해 poetry를 사용합니다. 명령어를 실행한 후 dist 폴더가 생성되고 .whl 파일이 포함되어 있는지 확인합니다 (Cloud Shell 편집기 터미널에서 실행).
# Go to the parent folder containing pyproject.toml file
cd ~/imagescoring/multiagenthandson
#Create python package, to create whl file
python3 -m poetry build
- 이제 배포 스크립트를 준비합니다. 배포 스크립트는 이미지 점수 매기기 에이전트 또는 에이전트 엔진 서비스를 배포합니다. deploy 폴더 내의 deploy.py 콘텐츠를 아래와 같이 확인합니다 (Cloud Shell 편집기 측면 창을 사용하여 파일을 찾음).
import vertexai
from image_scoring.agent import root_agent
import os
import glob # To easily find the wheel file
from dotenv import load_dotenv
# Load environment variables from image_scoring/.env
env_path = os.path.join(os.path.dirname(__file__), "..", "image_scoring", ".env")
load_dotenv(env_path)
PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
LOCATION = os.getenv("GOOGLE_CLOUD_LOCATION", "us-central1")
STAGING_BUCKET = f"gs://{os.getenv('GOOGLE_CLOUD_STORAGE_BUCKET')}"
from vertexai import agent_engines
client=vertexai.Client(
project=PROJECT_ID,
location=LOCATION,
)
remote_app = client.agent_engines.create(
agent=root_agent,
config={
"display_name": "image-scoring",
"staging_bucket": STAGING_BUCKET,
"requirements": open(os.path.join(os.getcwd(), "requirements.txt")).readlines() + ["./dist/image_scoring-0.1.0-py3-none-any.whl"],
"extra_packages": [
"./dist/image_scoring-0.1.0-py3-none-any.whl",
], "env_vars":{"GCS_BUCKET_NAME":os.getenv('GOOGLE_CLOUD_STORAGE_BUCKET')}
}
)
print(f"DEBUG: AgentEngine attributes: {dir(remote_app)}")
try:
print(remote_app.api_resource.name)
except AttributeError:
print("Could not find resource_name, check DEBUG output above.")
- 이제 배포 스크립트를 실행할 수 있습니다. 먼저 최상위 폴더 multiagenthandson으로 이동합니다 (Cloud Shell 편집기 터미널에서 실행).
#go to multiagenthandson folder
cd ~/imagescoring/multiagenthandson
#run deploy script from the parent folder containing deploy.py
python3 -m deploy.deploy
배포 후에는 다음과 같이 표시됩니다. 
그림 6: 샘플 출력
- 이제 배포된 에이전트를 테스트해 보겠습니다. 원격으로 배포된 에이전트 엔진을 테스트하려면 먼저 터미널의 배포 출력에서 에이전트 위치를 복사하세요. projects/85469421903/locations/us-central1/reasoningEngines/7369674597261639680과 같이 표시됩니다 .
testclient 폴더로 이동하여 Cloud Shell 편집기에서 remote_test.py 파일을 열고 다음 줄을 수정합니다.
REASONING_ENGINE_ID = "projects/xxx/locations/us-central1/reasoningEngines/xxx" # TODO: Change this
- 최상위 폴더 multiagenthandson에서 다음 명령어를 실행합니다. 그림 4와 같은 출력이 표시됩니다. 실행이 완료되면 (Run in Cloud Shell Editor Terminal)이 표시됩니다.
#go to multiagenthandson folder
cd ~/imagescoring/multiagenthandson
#execute remote_test.py
python3 -m testclient.remote_test

그림 7: 샘플 출력
9. A2A 에이전트 만들기
이 단계에서는 이전 단계에서 만든 에이전트를 기반으로 간단한 A2A 에이전트를 만듭니다. 기존 ADK (에이전트 개발 키트) 에이전트는 A2A 프로토콜로 게시할 수 있습니다. 이 단계에서 학습할 주요 사항은 다음과 같습니다.
이 실습에서는 image_scoring_adk_a2a_server 폴더의 코드를 사용합니다. 작업을 시작하기 전에 디렉터리를 이 폴더로 변경하세요 (Cloud Shell 편집기 터미널에서 실행).
#change directory to image_scoring_adk_a2a_server
cd ~/imagescoring/multiagenthandson/image_scoring_adk_a2a_server
#copy the env file
cp ~/imagescoring/multiagenthandson/image_scoring/.env remote_a2a/image_scoring
1. A2A 에이전트 카드 만들기
A2A 프로토콜에는 에이전트 기능, 에이전트 사용 가이드 등 에이전트에 관한 모든 정보가 포함된 에이전트 카드가 필요합니다. A2A 에이전트가 배포되면 '.well-known/agent-card.json' 링크를 사용하여 에이전트 카드를 볼 수 있습니다. 클라이언트는 이 정보를 참고하여 에이전트에 요청을 보낼 수 있습니다.
remote_a2a/image_scoring 폴더에서 Cloud Shell 편집기를 사용하여 다음 콘텐츠가 포함된 agents.json이 있는지 확인합니다.
{
"name": "image_scoring",
"description": "Agent that generates images based on user prompts and scores their adherence to the prompt.",
"url": "http://localhost:8001/a2a/image_scoring",
"version": "1.0.0",
"defaultInputModes": ["text/plain"],
"defaultOutputModes": ["image/png", "text/plain"],
"capabilities": {
"streaming": true,
"functions": true
},
"skills": [
{
"id": "generate_and_score_image",
"name": "Generate and Score Image",
"description": "Generates an image from a given text prompt and then evaluates how well the generated image adheres to the original prompt, providing a score.",
"tags": ["image generation", "image scoring", "evaluation", "AI art"],
"examples": [
"Generate an image of a futuristic city at sunset",
"Create an image of a cat playing a piano",
"Show me an image of a serene forest with a hidden waterfall"
]
}
]
}
2. A2A 에이전트 만들기
루트 폴더 image_scoring_adk_a2a_server 내에서 Cloud Shell 편집기 측면 창을 사용하여 a2a_agent.py 파일이 있는지 확인합니다. 이 파일은 A2A 에이전트의 진입점입니다. 다음 콘텐츠가 있어야 합니다.
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent
root_agent = RemoteA2aAgent(
name="image_scoring",
description="Agent to give interesting facts.",
agent_card="http://localhost:8001/a2a/image_scoring/.well-known/agent.json",
# Optional configurations
timeout=300.0, # HTTP timeout (seconds)
httpx_client=None, # Custom HTTP client
)
3. A2A 에이전트 실행
이제 에이전트를 실행할 준비가 되었습니다. 에이전트를 실행하려면 최상위 폴더 image_scoring_adk_a2a_server 내에서 다음 명령어를 실행합니다 (Cloud Shell 편집기 터미널에서 실행).
#following command runs the ADK agent as a2a agent
adk api_server --a2a --port 8001 remote_a2a
4. A2A 에이전트 테스트
이제 에이전트가 실행되면 에이전트를 테스트할 수 있습니다. 먼저 상담사 카드를 확인해 보겠습니다. 터미널> 새 터미널을 사용하여 새 터미널을 열고 다음 명령어를 실행합니다 (새로 열린 Cloud Shell 편집기 터미널에서 실행).
#Execute the following
curl http://localhost:8001/a2a/image_scoring/.well-known/agent.json
위의 코드를 실행하면 A2A 에이전트의 에이전트 카드가 표시됩니다. 이는 이전 단계에서 만든 agent.json의 콘텐츠입니다.
이제 에이전트에 요청을 보내 보겠습니다. curl을 사용하여 에이전트에 요청을 보낼 수 있습니다 (새로 열린 Cloud Shell 편집기 터미널에서 실행).
curl -X POST http://localhost:8001/a2a/image_scoring -H 'Content-Type: application/json' -d '{
"id": "uuid-123",
"params": {
"message": {
"messageId": "msg-456",
"parts": [{"text": "Create an image of a cat"}],
"role": "user"
}
}
}'
위 요청에서 '고양이 이미지 만들기' 줄을 변경하여 프롬프트를 변경할 수 있습니다. 명령어를 실행하면 지정된 Google Cloud Storage에서 출력 이미지를 확인할 수 있습니다.
10. 삭제
이제 방금 만든 항목을 정리해 보겠습니다.
- 방금 만든 Vertex AI Agent Engine 서버를 삭제합니다. Google Cloud 콘솔의 검색창에 Vertex AI를 입력하여 Vertex AI로 이동합니다. 왼쪽의 Agent Engine을 클릭합니다.삭제를 클릭하여 에이전트를 삭제할 수 있습니다.

그림 8
- Cloud Shell에서 파일 삭제
#Execute the following to delete the files
cd ~
rm -R ~/imagescoring
- 버킷을 삭제합니다. GCP 콘솔->Cloud Storage로 이동하여 버킷을 선택하고 삭제하면 됩니다.

그림 9: 버킷 삭제
11. 결론
축하합니다. 멀티 에이전트 ADK (에이전트 개발 키트) 애플리케이션을 Vertex AI Agent Engine에 배포했습니다. 이는 최신 클라우드 네이티브 애플리케이션의 핵심 수명 주기를 다루는 중요한 성과로, 자체 복잡한 에이전트 시스템을 배포하기 위한 견고한 기반을 제공합니다.
요약
이 실습에서는 다음 작업을 수행하는 방법을 배웠습니다.
- ADK (에이전트 개발 키트)를 사용하여 멀티 에이전트 애플리케이션 만들기
- Vertex AI Agent Engine에 애플리케이션 배포
- A2A 프로토콜을 사용하여 통신할 수 있는 에이전트를 만듭니다.
유용한 리소스