Lesson 05 · 계획

필요할 때만 불러오는 도메인 지식

"Don't put everything in the system prompt. Load on demand."

⏱ 약 10 분 · 📝 3 개 인터랙티브 컴포넌트 · 🧑‍💻 기반 shareAI-lab · s05_skill_loading.py

"system prompt에 전부 넣기"의 함정

skill이 20개 있고 각각 꽤 자세하게 작성되어 있습니다: pdf-processing(PDF 읽는 법), code-review(review 체크리스트), git-workflow(자주 쓰는 git 패턴)... 직관적인 방법: 전부 system prompt에 붙여 넣어 모델이 언제든 참조하게 합니다.

결과:

  • 호출마다 15-30K 입력 token을 소모합니다 (문제가 어떤 skill도 필요하지 않더라도).
  • 모델의 주의가 분산됩니다—긴 system prompt에서 언급된 규칙은 복종도가 떨어집니다.
  • skill 하나를 바꾸면 모든 이전 대화의 캐시가 무효화됩니다.

s05의 방법은 이것을 2계층으로 나누는 것입니다.

2계층 아키텍처

Layer 1 · 저렴함: system prompt에는 skill 이름과 한 줄 설명만 넣습니다 (각각 약 100 token). 20개 skill = 2K token, 수용 가능합니다.

# 시스템 프롬프트의 skill 목록
Skills available:
  - pdf: Process PDF files. Extract text, tables, metadata.
  - code-review: Systematic code review checklist.
  - git-workflow: Common git branching and rebase patterns.

Layer 2 · 필요할 때: 모델이 특정 skill을 사용하려 할 때 load_skill(name="pdf")를 호출하면 전체 skill 본문(5-10K token일 수 있음)이 tool_result를 통해 context에 로드됩니다. 사용하지 않는 skill은 token이 하나도 로드되지 않습니다.

# tool_result에 전체 skill이 반환됩니다
<skill name="pdf">
  Step 1: Use pdfplumber for extraction...
  Step 2: Handle OCR fallback when needed...
  Step 3: Structure output as Markdown table...
</skill>

token 비용 비교

실제 시나리오로 테스트해봅니다. 20개 skill이 있고 각 본문 평균 3000 token이라고 가정합니다. 사용자가 질문을 하면 (예: "로그인 API의 버그를 수정해줘")—이 문제는 아마 어떤 skill도 필요하지 않습니다.

SKILL.md 형식

skill 파일은 YAML frontmatter + 본문으로 구성됩니다:

---
name: pdf
description: Process PDF files. Extract text, tables, metadata.
tags: document,parsing
---

Step 1: Use pdfplumber for extraction. Handle multi-column layouts...
Step 2: For scanned PDFs, fall back to OCR via tesseract...

frontmatter는 Layer 1에 사용되고(name/description/tags), 본문은 Layer 2에 사용됩니다. 이 방식은 정적 블로그(Jekyll, Hugo)에서 영감을 받았으며 익숙한 사람이라면 한 눈에 이해됩니다.

Interactive

Widget 1 · Token Economy · 두 아키텍처 비교

왼쪽: system prompt에 전부 넣기. 오른쪽: 2계층 아키텍처. 20번 대화 후 누적 token을 확인하세요.

system prompt에 전부 넣기
System prompt: 60000 tokens
(20 × 3000 token짜리 skill 전체 포함)
× 대화 횟수: 1

합계: 60000 tokens
2계층 아키텍처
System prompt: 2000 tokens
(20개 설명 × ~100 token 각)
+ 필요 시 로드된 skill 본문: 0 tokens
(매 5번 대화마다 1회 트리거)

합계: 2000 tokens
1
0% 절약
Interactive

Widget 2 · Frontmatter Parser · skill 메타데이터 추출

SKILL.md를 입력하면 s05의 YAML frontmatter 파싱 로직으로 Layer 1과 Layer 2가 각각 무엇을 가져가는지 확인할 수 있습니다.

SKILL.md (편집 가능)
Layer 1 · system prompt에 들어가는 부분

          
Layer 2 · load_skill 시의 tool_result

          
Interactive

Widget 3 · Discoverability · skill 설명을 잘 써야 모델이 찾을 수 있다

Layer 1의 설명이 모델이 skill을 선택하는 기준입니다. 3가지 비교 세트를 보고 더 잘 쓰인 것을 선택하세요—어떤 설명은 모델이 영원히 이 skill을 찾지 못하게 만듭니다.

0 / 3 정답