ADK 에이전트 스킬 패턴: 구글의 프로그레시브 디스클로저 완전 가이드

왜 모놀리식 프롬프트는 한계가 있을까요?

대부분의 AI 에이전트는 시스템 프롬프트 하나에 모든 도메인 지식을 몰아넣는 방식으로 동작해요. 컴플라이언스 규칙, 스타일 가이드, API 레퍼런스, 트러블슈팅 절차까지 하나의 거대한 문자열로 연결하는 거죠. 태스크가 두세 개일 땐 문제없지만, 열 개 이상으로 늘어나면 매 LLM 호출마다 수천 토큰을 소비하게 돼요 — 사용자의 쿼리가 그 지식을 전혀 필요로 하지 않더라도요.

Google의 ADK(Agent Development Kit)는 이 문제를 프로그레시브 디스클로저(Progressive Disclosure)라는 아키텍처 패턴으로 풀어요. 필요한 컨텍스트를 필요한 시점에만 로드하는 구조인데, 이 글에서는 ADK의 SkillToolset을 활용한 4가지 실전 스킬 패턴을 단계별로 살펴볼게요.

ADK 에이전트 스킬 패턴 개요

ADK 스킬 스펙: 3단계 지식 로딩 구조

ADK 에이전트 스킬의 핵심은 지식을 세 단계로 분리하는 데 있어요.

L1 메타데이터 (~100 토큰/스킬)

스킬 이름과 설명만 포함하는 최소 정보예요. 에이전트가 시작될 때 모든 스킬의 L1을 로드해서, 어떤 스킬이 현재 쿼리에 관련 있는지 판단하는 메뉴 역할을 해요.

L2 인스트럭션 (<5,000 토큰)

스킬의 전체 본문이에요. 에이전트가 특정 스킬을 명시적으로 활성화할 때만 API를 통해 로드돼요.

L3 리소스 (필요 시)

스타일 가이드나 API 스펙 같은 외부 참조 파일이에요. 스킬의 인스트럭션이 요구할 때만 로드되죠.

이 구조 덕분에 10개 스킬을 가진 에이전트가 매 호출 시 약 1,000 토큰의 L1 메타데이터만 사용해요. 모놀리식 프롬프트 대비 약 90%의 컨텍스트 사용량 절감이 가능한 거예요. SkillToolset 클래스가 activate_skill, deactivate_skill, list_skills 세 가지 도구를 자동 생성해서 이 흐름을 관리해 줘요.

프로그레시브 디스클로저 아키텍처

4가지 스킬 패턴 구현하기

패턴 1: 인라인 스킬 — 가장 단순한 시작점

파이썬 객체로 직접 정의하는 방식이에요. 변경 빈도가 낮고 규모가 작은 규칙에 적합해요.

# Pattern 1: Inline Skill
seo_skill = models.Skill(
    frontmatter=models.Frontmatter(
        name="seo-checklist",
        description="SEO optimization checklist for blog posts.",
    ),
    instructions=(
        "When optimizing a blog post for SEO, check each item:\n"
        "1. Title: 50-60 chars, primary keyword near the start\n"
        "2. Meta description: 150-160 chars, includes a call-to-action\n"
        "3. Headings: H2/H3 hierarchy, keywords in 2-3 headings\n"
        "4. First paragraph: Primary keyword in first 100 words\n"
        "5. Images: Alt text with keywords, compressed\n"
    ),
)

frontmatternamedescription이 L1 메타데이터가 되고, instructions가 L2로 동작해요. "내 블로그 글 SEO 리뷰해줘"라고 요청하면 에이전트가 이 스킬을 로드해서 체계적으로 각 항목을 점검하게 돼요.

패턴 2: 파일 기반 스킬 — 레퍼런스가 필요할 때

인라인 스킬로는 스타일 가이드나 API 스펙 같은 참조 문서를 포함하기 어려워요. 파일 기반 스킬은 디렉터리 구조를 활용해요.

skills/blog-writer/
├── SKILL.md           # L2: 인스트럭션
└── references/
    └── style-guide.md # L3: 필요 시 로드
# Pattern 2: File-Based Skill
blog_writer_skill = load_skill_from_dir(
    pathlib.Path(__file__).parent / "skills" / "blog-writer"
)

SKILL.md가 YAML 프론트매터로 시작하고 마크다운 인스트럭션이 이어지는 구조예요. L2 인스트럭션이 "스타일 가이드를 참조하라"고 지시하면 그때 L3 리소스가 로드되는 거죠.

패턴 3: 외부 스킬 — 커뮤니티 저장소 활용

코드는 패턴 2와 동일해요. 차이점은 SKILL.md를 직접 작성하는 대신 커뮤니티 저장소에서 가져온다는 것뿐이에요.

# Pattern 3: External Skill
content_researcher_skill = load_skill_from_dir(
    pathlib.Path(__file__).parent / "skills" / "content-research-writer"
)

ADK 에이전트 스킬 스펙이 범용 디렉터리 포맷을 정의하기 때문에 load_skill_from_dir은 스킬의 출처를 신경 쓰지 않아요. Google이 공식 ADK 개발 스킬을 같은 포맷으로 제공하며, npx skills add google/adk-docs -y -g 명령으로 설치할 수 있어요.

패턴 4: 스킬 팩토리 — 스스로 확장하는 메타 스킬

가장 강력한 패턴이에요. 메타 스킬은 새로운 SKILL.md 파일을 생성하는 것이 목적인 스킬이에요. 이 스킬을 장착한 에이전트는 런타임에 새로운 스킬 정의를 작성하고 로드할 수 있어서, 사람의 개입 없이 자체적으로 역량을 확장해요.

보안 리뷰 체크리스트, 컴플라이언스 감사, 데이터 파이프라인 검증기 등 — 필요한 전문성을 그때그때 생성하고 로드해서 사용하는 워크플로우가 가능해지는 거예요. 패턴 1~3이 이미 존재하는 스킬을 다뤘다면, 패턴 4는 에이전트가 스스로 새로운 스킬을 만들어내는 루프를 완성해요.

ADK 에이전트 스킬 아키텍처 상세

실전 적용 시 고려할 점

ADK 에이전트 스킬 패턴을 프로덕션에 도입할 때 몇 가지 트레이드오프를 고려해야 해요.

  • L1 메타데이터의 description 품질이 스킬 선택 정확도를 좌우해요. 모호한 설명은 에이전트가 잘못된 스킬을 활성화하는 원인이 돼요.
  • L2 인스트럭션은 5,000 토큰 이하로 유지하는 게 권장돼요. 이를 초과하면 L3 리소스로 분리하는 편이 효율적이에요.
  • 패턴 4(메타 스킬)를 사용할 땐 생성된 스킬의 품질 검증 로직을 반드시 포함해야 해요. 에이전트가 잘못된 인스트럭션을 생성하면 다운스트림에 영향이 커질 수 있어요.
  • 외부 스킬을 로드할 때는 소스의 신뢰성을 확인하세요. SKILL.md에 임의 코드 실행 인스트럭션이 포함될 수 있으므로 샌드박싱을 고려해야 해요.

마무리

ADK의 프로그레시브 디스클로저 패턴은 모놀리식 프롬프트의 토큰 낭비 문제를 구조적으로 해결해요. 인라인 → 파일 기반 → 외부 → 메타 스킬로 이어지는 4단계 패턴을 통해 에이전트의 확장성과 효율성을 동시에 잡을 수 있어요. 특히 패턴 4의 자기 확장 구조는 에이전트가 새로운 도메인에 자율적으로 적응할 수 있는 가능성을 열어주므로, 복잡한 엔터프라이즈 시나리오에서 주목할 만한 접근이에요.

이 블로그의 인기 게시물

TorchTPU: PyTorch를 TPU에서 네이티브로 실행하는 구글의 전략

가상 파일시스템으로 AI 어시스턴트 비용·속도 최적화하기

gemma4 vllm 실행 방법: 설치·최적화·멀티GPU 완전 가이드