시맨틱 계층: 이중 증류
포맷 세금은 잘랐어요. 이제 내용 자체를 봐요. RAG와 긴 문서에서 가장 흔한 엔지니어링 실수: 컨텍스트 윈도우를 쓰레기통으로 쓰는 것—Few-Shot 사례와 검색 문서를 전부 쑤셔 넣고 모델이 알아서 가리라고 기대해요. 되긴 해요. 그렇게 쓰면 안 돼요.
첫째, 비싸고 느려요. Transformer 셀프 어텐션 복잡도는 O(N²): Prompt 길이가 두 배가 되면 연산량은 네 배. Prompt가 길수록 Prefill이 길고 첫 토큰 지연(TTFT)이 높아져요—사용자가 첫 글자도 보기 전에 인내심이 먼저 달아나요.
둘째, 효과가 더 나빠질 수 있어요. 유효 정보가 잡담에 묻히면 「중간 소실(lost-in-the-middle)」 효과가 나요. 긴 글을 읽는 사람과 같아요: 앞부분은 집중하고(무슨 이야기인지), 끝도 챙기고(곧 결론), 가운데 큰 덩어리는—눈은 지나가도 머리는 안 가요. 정성 들여 고른 참고 자료가 불행히 중간에 있으면, 모델이 제대로 안 볼 수 있어요.
색 막대는 Prompt 위치별 어텐션 강도를 흉내 내요(초록=강, 회색=약). 길이를 드래그해 중단이 어떻게 가라앉는지 보세요.
Text-to-SQL을 예로 들게요: 온갖 비즈니스를 커버하려고 Prompt에 SQL 사례 20개를 박아 두는 사람이 있어요—합치면 4,000 Token이 넘어요. 사용자가 물을 때마다 모델이 이 4,000자를 「복습」해요. Token도 타고 느려요. 다른 접근:
사례 20개를 벡터 데이터베이스에 저장해요.
사용자가 「지난달 매출」을 물으면 시맨틱 검색으로 재무 관련 Top-3만 꺼내요.
최종 Prompt가 4,000 Token에서 500으로 줄어들어요.
(무관한 사례 간섭 제거)
금융 리서치, 회의록 같은 문서는 「맞는 잡담」으로 가득해요: 면책 조항, 반복 배경, 구어체 군소리. 그대로 AI에 넣으면, 박사생에게 스팸 메일을 읽히며 큰돈을 쓰는 셈이에요.
해법은 RAG 검색 뒤, 추론 전에 LLMLingua-2 미들웨어를 끼우는 거예요. 단어를 막 자르지 않아요: BERT 양방향 어텐션으로 앞뒤를 동시에 보고, 핵심 의미(개체, 수치, 핵심 동사)를 정확히 집어 내고 잉여 노이즈를 걷어내요. 5–20배 압축, Prefill 1초가 50ms로—고동시성 시나리오 처리량이 한 단계 올라가요.
| 증류 | 대상 | 수단 | 대표 이득 |
|---|---|---|---|
| 1차 | Few-Shot 사례 | 벡터 검색으로 Top-K 동적 선택 | 4,000 → 500 Token |
| 2차 | 검색된 문서 | LLMLingua-2 시맨틱 압축 | 5–20배 압축, Prefill 1s → 50ms |
Prompt가 두 배 = 연산량 네 배: O(N²)가 긴 컨텍스트가 비싸고 느린 물리적 뿌리예요.
중간 소실: 핵심 정보는 앞이나 끝에, 중간은 없어도 아깝지 않은 내용에.
Few-Shot을 하드코딩하지 말고, 벡터 DB에 두고 질문별로 동적 검색: 87.5% 절약에 더 정확해요.
긴 문서는 LLMLingua-2를 거친 뒤 추론: 고밀도 Prompt로 고품질 Attention—사용자를 기다림 속에 잃지 마세요.
출처: 저자 팀 내부 공유 《AI Token 비용 엔지니어링 전략 공유》 실전편 「02|시맨틱 계층」에서 정리했어요. 중간 소실은 Chroma의 컨텍스트 부패(Context Rot) 연구로 이어 읽을 수 있고, 압축 벤치마크는 LLMLingua를 보세요. 컨텍스트 윈도우 원리는 Harness 핵심 · 컨텍스트 윈도우에서 복습하세요.