
부제: 전문 지식을 매 턴 프롬프트에 넣지 않고 필요할 때만 펼치기
챗봇에 도메인 전문 지식을 넣고 싶었다.
러닝 코칭 규칙, 영양 상담 지식 같은 것들이다.
가장 단순한 방법은 시스템 프롬프트에 그걸 다 박는 거다.
그런데 이 단순함이 비쌌다.
다 넣으면 매 턴 낭비
시스템 프롬프트는 대화의 매 턴마다 함께 실린다.
전문 지식을 거기 박으면, 그 지식 전체가 턴마다 로딩된다.
"오늘 날씨 어때" 같은 일반 대화에도 러닝 페이스 계산표와 훈련 주기화 규칙이 매번 딸려 온다.
쓰지도 않을 지식을 위해 턴마다 수백에서 수천 토큰을 버리는 셈이다.
토큰은 돈이고, 컨텍스트 창은 유한하다.
필요할 때만 단계적으로 펼친다
그래서 지식을 "스킬"로 묶고, 필요할 때만 로드하게 했다.
세 단계로 점진적으로 펼치는 방식(progressive disclosure)이다.
- 1단계 — 카탈로그: 어떤 스킬이 있는지 짧은 목록만 항상 보여준다. 스킬 하나에 한 줄이다.
- 2단계 — 본문: 에이전트가 "이 스킬이 필요하다" 판단해
load_skill("training-plan")을 부르면, 그때 그 스킬의 본문과 딸린 파일 목록이 대화에 붙는다. - 3단계 — 상세 파일: 더 깊은 데이터가 필요하면
read_skill_file로 그때 해당 파일만 읽는다.
문서 검색(RAG)과 같은 발상이다.
다 넣지 않고, 목록에서 필요한 것만 골라 그때 가져온다.
부수 효과도 좋았다.
활성화되지 않은 스킬의 전용 도구는 LLM에게 아예 안 보인다.
그래서 도구 후보가 줄어 선택 정확도가 오르고, 토큰도 아낀다.
안 한 것들
몇 가지는 일부러 피했다.
파일 목록을 1단계 카탈로그에 미리 넣는 안은 접었다.
그러면 카탈로그 토큰이 스킬마다 불어나 "필요할 때만 펼친다"는 원칙을 스스로 깬다.
파일 목록은 2단계에서 스킬을 열 때 같이 주면 충분하다.
스킬 본문을 외부 도구(프롬프트 관리 도구)에 저장하는 안도 접었다.
그러면 설명과 본문이 두 곳으로 갈려 편집할 때마다 양쪽을 맞춰야 한다.
설명과 본문을 한 파일에 두는 편이 관리가 단순했다.
정리
- 도메인 지식을 시스템 프롬프트에 다 박으면 일반 대화에도 매 턴 로딩돼 토큰을 낭비한다
- 스킬 = 필요할 때만 로드되는 지식 — 카탈로그(목록) → load_skill(본문) → read_skill_file(상세)의 3단계
- 미활성 스킬의 도구는 LLM에 안 보여 선택 정확도도 오른다
- 파일 목록을 카탈로그에 미리 넣기·본문을 외부 저장은 원칙·관리 이유로 접었다
컨텍스트는 유한하고 토큰은 비싸다.
필요할지 모를 지식을 미리 다 넣는 대신, 목록만 보이고 필요할 때 펼치는 게 싸고 정확했다.
'AI' 카테고리의 다른 글
| [에이전트] 실측 0회 경로 방어 코드 어디까지 짤까 문서화된 미완성 (0) | 2026.07.14 |
|---|---|
| [에이전트] 컨텍스트 오염 타임존을 거주지로 착각한 날씨 조회 (0) | 2026.07.13 |
| [프롬프트] LLM 프롬프트 중앙 관리 Langfuse SWR 캐싱 (0) | 2026.07.12 |
| [RAG] 하이브리드 검색 BM25 벡터 RRF 순위 결합 (0) | 2026.07.12 |
| [LLM] Gemini inline tool_code 도구 호출 합성 후처리 (0) | 2026.07.10 |