장기 실행 AI 에이전트에서 대화 히스토리가 무한정 쌓이면 컨텍스트 창이 포화되고 중요한 오래된 정보가 밀려난다. 이 튜토리얼에서는 센텐스 트랜스포머 임베딩으로 의미적 유사도를 계산하고, 꼭 필요한 컨텍스트만 남기는 컨텍스트 프루닝(context pruning) 파이프라인을 Python으로 구현하는 방법을 다룬다.
저자: Iván Palomares Carrascosa (MachineLearningMastery.com, 2026-05-28)
컨텍스트 프루닝이 필요한 이유
기존 슬라이딩 윈도우 방식은 오래된 정보를 단순히 잘라내는데, 그 안에 중요한 세부 사항이 포함될 수 있다. 컨텍스트 프루닝은 LLM에 필요한 것만 정확히 제공하는 선택적 메모리 전략이다.
| 기존 슬라이딩 윈도우 | 컨텍스트 프루닝 |
|---|---|
| 오래된 순서대로 제거 | 의미 유사도 기반 선택적 유지 |
| 중요 히스토리 손실 가능 | 관련 과거 정보 보존 |
| 구현 단순 | 임베딩 계산 오버헤드 |
메모리 전략
프루닝 후 컨텍스트는 세 가지 요소로만 구성된다:
- 현재 프롬프트(current prompt) — 사용자의 현재 요청
- 가장 최근 턴(most recent turn) — 직전 입출력 쌍 (대화 연속성 유지)
- Top-K 의미 유사 매치 — 현재 프롬프트와 임베딩 유사도가 높은 과거 턴들
이 세 가지 외의 모든 대화 히스토리는 활성 컨텍스트에서 제거된다.
구현
설치
pip install sentence-transformers numpy코어 프루닝 함수
from sentence_transformers import SentenceTransformer
import numpy as np
model = SentenceTransformer("all-MiniLM-L6-v2")
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def prune_context(history: list[dict], current_prompt: str, top_k: int = 3) -> list[dict]:
if not history:
return []
# 가장 최근 턴은 항상 포함
recent = history[-1:]
archive = history[:-1]
if not archive:
return recent
# 현재 프롬프트 임베딩
prompt_emb = model.encode(current_prompt)
# 과거 턴들의 임베딩 계산 및 유사도 정렬
scored = []
for turn in archive:
turn_text = f"{turn.get('user', '')} {turn.get('assistant', '')}"
turn_emb = model.encode(turn_text)
score = cosine_similarity(prompt_emb, turn_emb)
scored.append((score, turn))
scored.sort(key=lambda x: x[0], reverse=True)
top_relevant = [t for _, t in scored[:top_k]]
return top_relevant + recent에이전트 루프에 적용
def agent_loop(user_input: str, history: list[dict]) -> str:
# 프루닝된 컨텍스트만 LLM에 전달
pruned = prune_context(history, user_input, top_k=3)
response = call_llm(system_prompt, pruned, user_input)
history.append({"user": user_input, "assistant": response})
return response시뮬레이션 기반 검증
긴 대화 시뮬레이션을 만들고 각 턴에서 프루닝 전/후 컨텍스트 토큰 수와 응답 관련성을 비교해 top_k 값을 튜닝한다. 일반적으로 3~5가 균형점이 된다.
요약 및 적용 지침
top_k는 작업 특성과 컨텍스트 창 크기에 따라 조정한다- 임베딩 모델은 프로젝트 언어·도메인에 맞는 것을 선택한다 (
all-MiniLM-L6-v2는 영어 일반 용도에 적합) - 대화가 길어질수록 슬라이딩 윈도우보다 프루닝 방식이 유리하다
참고 자료
- Building a Context Pruning Pipeline for Long-Running Agents — MachineLearningMastery.com (2026-05-28)