AI Sparkup

최신 AI 쉽게 깊게 따라잡기⚡

Long-running Agents 튜토리얼 – 컨텍스트 프루닝 파이프라인 구축하기

장기 실행 AI 에이전트에서 대화 히스토리가 무한정 쌓이면 컨텍스트 창이 포화되고 중요한 오래된 정보가 밀려난다. 이 튜토리얼에서는 센텐스 트랜스포머 임베딩으로 의미적 유사도를 계산하고, 꼭 필요한 컨텍스트만 남기는 컨텍스트 프루닝(context pruning) 파이프라인을 Python으로 구현하는 방법을 다룬다.

저자: Iván Palomares Carrascosa (MachineLearningMastery.com, 2026-05-28)

컨텍스트 프루닝이 필요한 이유

기존 슬라이딩 윈도우 방식은 오래된 정보를 단순히 잘라내는데, 그 안에 중요한 세부 사항이 포함될 수 있다. 컨텍스트 프루닝은 LLM에 필요한 것만 정확히 제공하는 선택적 메모리 전략이다.

기존 슬라이딩 윈도우컨텍스트 프루닝
오래된 순서대로 제거의미 유사도 기반 선택적 유지
중요 히스토리 손실 가능관련 과거 정보 보존
구현 단순임베딩 계산 오버헤드

메모리 전략

프루닝 후 컨텍스트는 세 가지 요소로만 구성된다:

  1. 현재 프롬프트(current prompt) — 사용자의 현재 요청
  2. 가장 최근 턴(most recent turn) — 직전 입출력 쌍 (대화 연속성 유지)
  3. 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는 영어 일반 용도에 적합)
  • 대화가 길어질수록 슬라이딩 윈도우보다 프루닝 방식이 유리하다

참고 자료



AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)