개요
이 글은 Drew Breunig의 "How to Fix Your Context" 글을 기반으로 작성하였다.
LLM(Long Language Model)을 사용할 때, 긴 컨텍스트를 입력하면 응답 품질이 오히려 저하되는 문제들이 종종 발생한다.
본 글에서는 이러한 긴 컨텍스트의 한계를 진단하고, 이를 해결하기 위한 6가지 전략을 체계적으로 소개한다.
긴 컨텍스트에서 발생하는 4가지 주요 실패 유형
- Context Poisoning: 오류나 헛소리가 컨텍스트에 포함되어 반복 참조되는 현상
- Context Distraction: 컨텍스트가 너무 길어져 모델이 일반 지식보다 입력에만 집착하게 되는 문제
- Context Confusion: 불필요한 정보가 응답 품질을 떨어뜨리는 경우
- Context Clash: 새로운 정보나 도구가 기존 정보와 충돌하여 오류 발생
핵심은 정보 관리다. "Garbage in, garbage out"이라는 말처럼, 무엇을 컨텍스트에 넣느냐가 결과를 결정짓는다.
컨텍스트 문제 해결을 위한 6가지 전략
1. RAG (Retrieval-Augmented Generation)
정의: 필요한 정보만 선택적으로 검색해서 컨텍스트에 추가하는 방식
- 컨텍스트 윈도우가 크더라도 모든 정보를 넣으면 실패
- 노이즈가 포함되면 품질 저하로 이어짐
- RAG는 여전히 유효하고 효과적인 전략임
예시: 삼성전자 에어컨 오류코드 E4 해결법을 묻는 질문에 전체 매뉴얼을 넣기보다는 E4 오류 관련 단락만 추출해서 프롬프트에 추가
효과: 응답 정확도 향상, 처리 속도 향상, 토큰 절약
2. Tool Loadout (도구 구성 최적화)
정의: 도구(API, 함수 등)의 설명을 필요한 만큼만 선택해 프롬프트에 삽입하는 전략
- 도구가 30개 이상일 경우 혼란 가능성 증가
- 100개가 넘으면 거의 무조건 실패
- 도구 선택도 RAG 방식으로 최적화 가능
예시: 환율 관련 질문이 들어오면 50개 도구 중 '환율 도구'만 로딩
효과: 불필요한 도구 설명 제거, 혼란 방지, 응답 정확도 향상
3. Context Quarantine (컨텍스트 격리)
정의: 작업마다 별도의 컨텍스트를 할당하는 방식
- 서브 에이전트를 병렬로 구성하고 결과를 통합
- 충돌 방지 및 멀티 에이전트 시스템 구축에 효과적
예시: 보고서 작성 시 Agent1은 재무제표, Agent2는 HR 정책, Agent3는 ESG 이슈 분석
효과: 업무 집중도 향상, 정확도 향상, 병렬 처리 가능
4. Context Pruning (가지치기)
정의: 불필요하거나 오래된 정보를 컨텍스트에서 제거하는 전략
- LLM 자체에게 pruning 지시하거나 별도 pruning 툴 사용
- 문서 구조화, dictionary 관리, Provence 등 활용
예시: 상담 챗봇이 100턴 이상 대화했을 경우, 이전 대화에서 중요하지 않은 내용은 제거
효과: 프롬프트 최적화, 처리 부하 감소, 중복 제거
5. Context Summarization (요약)
정의: 긴 대화나 문서를 요약해서 다시 컨텍스트에 투입하는 방식
- 100K 이상의 입력이 반복되면 모델의 창의성과 정확도 감소
- 사전 요약 단계로 품질 향상 가능
예시: 회의 발화록 전체를 유지하지 않고, 각 회의 종료 시 핵심 논의 사항 3가지만 요약해 다음 회의에 활용
효과: 주의력 집중, 컨텍스트 길이 절감
6. Context Offloading (오프로드)
정의: 컨텍스트 밖에 메모 공간(scratchpad)을 만들어 중간 데이터를 저장하는 전략
- Anthropic의 Think 도구 등이 대표적
- 복잡한 판단, 다단계 처리에 효과적
예시: 3단계 계산에서 각 중간 결과를 scratchpad에 저장 후 마지막에만 요약해 포함
효과: 중간 결과 유실 없이, 주 컨텍스트는 깔끔하게 유지
관련 용어 정리
| 용어 | 설명 |
|---|---|
| Context | LLM이 응답을 생성할 때 참조하는 모든 정보 (입력, 히스토리, 도구 정의 등) |
| RAG | 검색된 외부 문서를 LLM에 삽입해 응답 품질을 향상시키는 방식 |
| Tool Loadout | 필요한 도구만 선택적으로 로딩하여 응답 품질을 높이는 전략 |
| Context Quarantine | 작업마다 컨텍스트를 분리하여 충돌이나 정보 혼선을 방지하는 방식 |
| Context Pruning | 불필요한 정보를 제거하여 프롬프트를 간결하게 만드는 전략 |
| Context Summarization | 긴 정보를 요약하여 필요한 핵심 내용만 남기는 전략 |
| Context Offloading | 컨텍스트 외부에 임시 저장 공간을 만들어 중간 정보를 따로 관리하는 방식 |
마무리
컨텍스트는 공짜가 아니다. LLM은 입력된 모든 토큰에 영향을 받기 때문에, 무의미한 정보가 포함되면 성능 저하로 이어진다.
긴 컨텍스트 윈도우가 있다고 해서 무조건 많은 정보를 넣는 것은 오히려 위험할 수 있다.
에이전트를 설계하거나 프롬프트를 구성할 때, 반드시 이 질문을 던져보자:
"이 정보는 정말 필요한가?"
그렇지 않다면, 이 글에서 소개한 6가지 전략 중 하나를 적용하여 컨텍스트를 정비하는 것이 좋다.
'IT 관련 정리' 카테고리의 다른 글
| RAG의 핵심 기술: 임베딩과 벡터 DB란? (1) | 2025.07.15 |
|---|---|
| RAG(Retrieval-Augmented Generation) 란 무엇일까? (0) | 2025.07.15 |
| 지금 당장 ‘바이브 코딩’으로 구현할 수 없는 것들 (3) | 2025.07.14 |
| MCP‑B: 브라우저 기반 AI 에이전트 (2) | 2025.07.14 |
| 에이전트보다 중요한 LLM 워크플로우 5가지 (1) | 2025.07.10 |