ADK 및 Gemini CLI로 에이전트의 '바이브 빌딩' 흐름 간소화

2025년 7월 16일
Julia Wiesinger Product Manager
Hangfei Lin Staff Soft Engineer

개발자에게 작업의 '흐르듯' 이루어지는 상태는 신성한 것입니다. 이 상태는 대단한 노력 없이도 아이디어가 코드로 구현되는 마법의 공간입니다. 이 상태의 가장 큰 적은 설명서 읽기, 프레임워크 선택, 컨텍스트 전환 등 개발자를 창의의 영역에서 벗어나게 만드는 방해 요인들입니다.

그래서 Gemini CLI와 페어링할 때 방해 요인을 없애고 에이전트의 '바이브 코딩' 경험을 강화하도록 설계된 ADK(에이전트 개발 키트)에 대한 업데이트를 발표하게 되어 기쁩니다. 이 조합을 통해 사용자와 Gemini 간 대화에서 모든 적절한 맥락을 매끄럽게 연결해, 고차원적 아이디어를 전례 없는 속도와 유연성을 통해 기능적인 에이전트로 전환할 수 있습니다. 이를 통해 에이전트를 사용하여 실제 문제를 해결하는 데 더 많은 시간을 할애할 수 있고 처음부터 코딩에 소요되는 시간을 크게 줄일 수 있습니다.


비밀의 소스: ADK의 llms-full.txt가 흐름을 촉진하는 방법

이 업그레이드의 핵심은 ADK 저장소에 포함된 수정을 거친 llms-full.txt 파일입니다. 이 파일은 전체 ADK 프레임워크에 대한 완벽하게 정리 및 요약된 가이드라고 생각하시면 됩니다. 즉, ADK의 모든 구성요소, 기능, 권장사항을 자세히 설명하는 지도인 셈입니다.

특히, 파일을 50% 이상 줄였고 (토큰 수도 감소!) LLM이 더 쉽게 이해할 수 있도록 만들었습니다. 이는 더 나은 바이브 코딩 경험의 핵심입니다. Gemini가 컨텍스트 윈도우를 소모하거나 소위 '컨텍스트 부패'의 제물이 되지 않고 ADK를 완전히 이해하고 있음을 의미하기 때문입니다.

이제 Gemini CLI와 함께 사용하면 훨씬 저렴한 비용과 향상된 정확도로 ADK 전문가로 탈바꿈한 강력한 코딩 어시스턴트를 사용할 수 있습니다. CLI는 프레임워크에 대한 깊은 본질적 이해를 바탕으로 상위 수준의 전체적 계획을 정확하고 자연스러운 멀티 에이전트 코드로 직접 변환할 수 있습니다. 이를 통해 프로토타입 제작 속도가 획기적으로 빨라집니다. 단 몇 분 만에 기능적인 에이전트를 생성할 수 있으므로 선행적인 코딩 작업에 많은 시간을 투자하지 않고도 얼마든지 실험하고 반복할 수 있습니다.


바이브의 구현 사례: AI Github 이슈 라벨링 에이전트 개발

실제 상황에서는 어떤 느낌인지 살펴보겠습니다. ADK의 Github 이슈에 라벨을 지정하는 AI 에이전트를 몇 단계만에 단순한 아이디어에서 실제 작동하는 ADK 에이전트로 개발해 보겠습니다. 이 작업을 통해 보다 쉽게 이슈 우선순위를 정하고 이슈를 할당할 수 있습니다.


0단계: llms-full.txt 다운로드

adk-python에서 작업 디렉터리로 llms-full.txt를 다운로드합니다.


1단계: Gemini CLI로 계획 구상

먼저, Gemini CLI를 브레인스토밍 파트너로 삼아 전체적인 상위 계획을 세웁니다.

사용자: ADK 프레임워크를 활용하여 내 저장소(https://github.com/google/adk-python)의 Github 이슈에 Gemini를 사용해 라벨을 지정해 줄 AI 에이전트를 만들고 싶어. AI 에이전트가 Github 이슈를 읽고 미리 정의된 라벨로 이슈에 라벨을 지정해야 해(먼저 몇 가지 일반적인 라벨을 제시해 주세요). 이 작업을 어떻게 수행할지 계획을 세워줘. @llms-full.txt

Gemini CLI:

계획: GitHub 이슈 라벨링 에이전트

목표는 GitHub 이슈를 분석하고 저장소에서 미리 정의된 관련 라벨을 적용할 수 있는 Python 기반 AI 에이전트를 만드는 것입니다. ADK 프레임워크를 사용하여 에이전트의 논리를 구성하고 분석을 위해 Gemini 모델을 오케스트레이션해 보겠습니다.

세부 단계 1: 프로젝트 설정 및 구성

1. 프로젝트 초기화: 새 Python 프로젝트 디렉터리를 설정합니다.

2. 종속 항목 설치: google-adk 라이브러리와 PyGithub 같은 GitHub API 클라이언트 라이브러리를 설치합니다.

3. GitHub 인증: 에이전트가 이슈를 읽고 라벨을 적용할 수 있도록 저장소 권한이 있는 GitHub PAT(개인 액세스 토큰)를 생성합니다. 이 토큰은 안전하게 환경 변수로 구성됩니다.


세부 단계 2: GitHub용 맞춤형 도구 개발

에이전트는 GitHub와 상호 작용하기 위한 도구가 필요합니다. 에이전트에 노출될 다음 함수가 수록된 github_tools.py 파일을 생성합니다.

  • get_issue(repo_name, issue_number): 특정 GitHub 이슈의 제목과 본문을 가져옵니다.

  • get_available_labels(repo_name): 저장소의 모든 기존 라벨 목록을 검색합니다.

  • apply_label(repo_name, issue_number, label): 특정 이슈에 지정된 라벨을 적용합니다.


세부 단계 3: 라벨링 에이전트 만들기

ADK 프레임워크를 사용하여 main.py 파일에 새 에이전트를 정의합니다.

1. 에이전트 정의: 에이전트는 Gemini 모델(예: gemini-1.5-flash)을 사용하도록 구성됩니다.

2. 도구 통합: 세부 단계 2의 맞춤형 GitHub 도구가 에이전트에 제공됩니다.

3. 핵심 지시문(프롬프트): 에이전트의 시스템 프롬프트는 에이전트가 명확한 워크플로를 따르도록 지시합니다.

  • 먼저, get_issue 도구를 사용하여 이슈의 내용을 파악합니다.

  • 그런 다음, get_available_labels 도구를 사용하여 유효한 옵션을 확인합니다.

  • 분석 결과를 바탕으로 적용하기에 가장 적합한 단일 라벨을 결정합니다.

  • 마지막으로, apply_label 도구를 사용하여 선택한 라벨을 이슈에 추가합니다.


세부 단계 4: 애플리케이션 진입점 생성

에이전트를 실행할 수 있는 간단한 명령줄 인터페이스(CLI)를 main.py에 만들어 보겠습니다. CLI는 GitHub 저장소 이름과 이슈 번호를 입력으로 수락한 다음 에이전트가 라벨링 작업을 수행하도록 트리거합니다.

이 계획의 구현을 계속 진행하시겠습니까?


단 한 줄의 코드도 작성하지 않고 논리를 정의하셨습니다.


2단계: 계획을 ADK 에이전트로 변환

이제 ADK의 llms-full.txt를 사용하여 해당 계획을 실제 에이전트로 바꾸어 보겠습니다.

사용자: 좋아. 이제 Python ADK를 사용해서 이 계획을 위한 코드를 생성해 줘. @llms-full.txt (이제 Gemini CLI는 계획을 올바른 ADK 코드로 변환하기 위해 ADK의 llms-full.txt를 참조합니다.)

Gemini CLI

import argparse
import asyncio
from google.adk.agents import Agent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.genai import types
 
from github_tools import get_issue, get_available_labels, apply_label
 
 
 
labeling_agent = Agent(
    name="github_labeler",
    model="gemini-1.5-flash",
    instruction="""당신은 GitHub 이슈에 라벨을 지정하는 AI 에이전트입니다.
    1. 먼저, 'get_issue' 도구를 사용하여 이슈의 제목과 본문을 읽습니다.
    2. 그런 다음, 'get_available_labels' 도구를 사용하여 저장소에 사용 가능한 모든 라벨을 확인합니다.
    3. 이슈 내용을 분석하고 사용 가능한 옵션 중에서 가장 관련성 있는 라벨을 선택합니다.
    4. 마지막으로, 'apply_label' 도구를 사용하여 선택한 라벨을 이슈에 추가합니다.
    5. 적용된 라벨을 언급하는 확인 메시지로 응답합니다.
    """,
    tools=[get_issue, get_available_labels, apply_label],
)
Python


from github import Github
from config import GITHUB_TOKEN
 
g = Github(GITHUB_TOKEN)
 
def get_issue(repo_name: str, issue_number: int) -> str:
    """특정 GitHub 이슈의 제목과 본문을 가져옵니다."""
    repo = g.get_repo(repo_name)
    issue = repo.get_issue(number=issue_number)
    return f"제목: {issue.title}\n본문: {issue.body}"
 
def get_available_labels(repo_name: str) -> list[str]:
    """저장소의 모든 기존 라벨 목록을 검색합니다."""
    repo = g.get_repo(repo_name)
    labels = [label.name for label in repo.get_labels()]
    return labels
 
def apply_label(repo_name: str, issue_number: int, label: str) -> str:
    """지정된 라벨을 특정 이슈에 적용합니다."""
    repo = g.get_repo(repo_name)
    issue = repo.get_issue(number=issue_number)
    issue.add_to_labels(label)
    return f"'{label}' 라벨을 이슈 #{issue_number}에 성공적으로 적용했습니다."
Python

(또한 requirements.txt, label_config.py를 생성했지만, 간결성을 위해 여기에 명시하지는 않겠습니다.)

즉시, ADK 프레임워크를 올바르게 사용하는 완전하고 기능적인 에이전트 애플리케이션이 생성됩니다. llms-full.txt 파일이 필요한 컨텍스트를 제공했으므로 CLI가 모든 상용구를 처리했습니다.


3단계 및 4단계: 흐름을 유지하며 테스트 및 개선

생성된 코드는 로컬에서 테스트할 수 있습니다. 버그를 찾아내거나 개선점이 생각날 수도 있습니다. 예를 들어, ADK 에이전트가 라벨 작업을 완료한 후 요약 정보를 원한다고 해보겠습니다. 사용자는 작업 흐름을 유지한 상태에서 간단히 변경 작업을 요청합니다.

사용자: 에이전트에 'some_new_label'이라는 새 라벨을 추가할 수 있어?


Gemini CLI는 스크립트의 컨텍스트를 그대로 유지하면서 변경 사항을 구현하도록 코드를 리팩터링합니다. 코드를 수동으로 편집하거나 추진력을 잃을 필요가 없습니다.


5단계: 정리 및 반복

이 반복 루프는 새로운 워크플로입니다.

1: 에이전트의 논리를 구상합니다.

2: Gemini CLI로 ADK 코드를 생성합니다.

3: 즉시 테스트합니다.

4: 간단한 대화형 요청으로 개선합니다.

일반적으로 창의적인 영역에서 벗어나게 하는 방해 요소가 발생하지 않고 에이전트가 완벽해질 때까지 이 과정을 반복할 수 있습니다.