Few-shot 취약성과 대응
컨텍스트는 오염될 수 있다
섹션 제목: “컨텍스트는 오염될 수 있다”에이전트가 오랜 시간 실행되면서 컨텍스트에는 다양한 문제가 축적됩니다. 잘못된 정보, 관련 없는 세부 사항, 모순된 지시가 쌓이면 에이전트의 판단력이 저하됩니다. 이를 **컨텍스트 취약성(Context Vulnerability)**이라고 부릅니다.
네 가지 컨텍스트 취약성
섹션 제목: “네 가지 컨텍스트 취약성”1. 컨텍스트 오염 (Context Poisoning)
섹션 제목: “1. 컨텍스트 오염 (Context Poisoning)”에이전트가 생성한 잘못된 정보나 환각(hallucination)이 컨텍스트에 기록되고, 이후 단계에서 사실로 취급되는 현상입니다.
스텝 3: 에이전트가 잘못 추론 → "파일 A가 클래스 B를 상속한다" (사실: 전혀 관계없음)
스텝 7: 동일 에이전트가 스텝 3을 근거로 결정 → "클래스 B의 메서드를 오버라이드하여..." (완전히 잘못된 방향)대응: 중요한 사실(파일 구조, API 응답 등)은 항상 도구를 통해 실제로 확인하고, 추론된 내용과 명확히 구분하여 저장합니다.
2. 컨텍스트 산만 (Context Distraction)
섹션 제목: “2. 컨텍스트 산만 (Context Distraction)”관련성 낮은 정보가 너무 많아 모델이 실제로 필요한 정보에 집중하지 못합니다. 신호 대 잡음비가 낮아지면 성능이 저하됩니다.
나쁜 예: 단순한 함수 수정 요청에 전체 코드베이스 컨텍스트 주입좋은 예: 해당 파일과 직접 관련된 파일 2~3개만 선택적으로 포함대응: Select 전략으로 태스크와 직접 관련된 정보만 컨텍스트에 포함합니다. “더 많으면 더 좋다”는 직관은 틀렸습니다.
3. 컨텍스트 혼란 (Context Confusion)
섹션 제목: “3. 컨텍스트 혼란 (Context Confusion)”불필요한 세부 사항이 모델의 주의를 분산시킵니다. 오염과 달리 정보 자체는 정확하지만, 현재 태스크와 무관하여 혼란을 야기합니다.
| 구분 | 원인 | 결과 |
|---|---|---|
| 오염 | 잘못된 정보 포함 | 사실로 오인하여 잘못된 결정 |
| 산만 | 무관한 정보 과다 | 신호 약화, 성능 저하 |
| 혼란 | 관련은 있지만 지금 불필요한 세부 사항 | 집중 분산 |
| 충돌 | 서로 모순된 지시 | 예측 불가능한 행동 |
4. 컨텍스트 충돌 (Context Clash)
섹션 제목: “4. 컨텍스트 충돌 (Context Clash)”시스템 프롬프트와 사용자 지시, 또는 서로 다른 시점의 지시가 모순될 때 발생합니다.
시스템 프롬프트: "항상 TypeScript를 사용하라"사용자 메시지: "JavaScript로 빠르게 작성해줘"
→ 에이전트 행동 예측 불가대응: 우선순위 계층을 명확히 정의합니다. 시스템 프롬프트 > 최근 사용자 지시 > 이전 대화 맥락 등 명확한 충돌 해소 규칙을 수립합니다.
Few-shot 경직성 문제
섹션 제목: “Few-shot 경직성 문제”Few-shot 예시는 모델의 성능을 높이는 강력한 도구입니다. 하지만 Manus의 연구에 따르면 균일한 패턴의 예시는 오히려 경직성을 유발합니다.
문제: 패턴 드리프트
섹션 제목: “문제: 패턴 드리프트”같은 형식의 예시를 여러 개 제공하면, 모델은 예시의 패턴을 과도하게 모방하여 새로운 상황에서도 동일한 패턴을 강제 적용합니다.
# Few-shot 예시가 모두 동일한 패턴일 때예시 1: 입력 → 분석 → 결론예시 2: 입력 → 분석 → 결론예시 3: 입력 → 분석 → 결론
# 실제 태스크가 다른 구조가 필요해도 같은 패턴 강제새 입력: 간단한 조회 질문에이전트: "분석..." (불필요한 분석 과정 수행)해결: 구조적 변형 도입
섹션 제목: “해결: 구조적 변형 도입”예시 간에 의도적인 변형을 도입합니다.
# 구조적으로 다양한 예시예시 1: 직접 답변형 → 분석 없이 바로 결론예시 2: 단계별 추론 → 입력 → 분석 → 결론예시 3: 불확실성 표현 → "확인 필요: ... / 잠정적 결론: ..."예시 4: 거절형 → "이 요청은 범위 밖입니다. 대신..."
# 모델이 상황에 맞는 패턴을 선택하도록 유도컨텍스트 품질 체크리스트
섹션 제목: “컨텍스트 품질 체크리스트”코드 리뷰처럼 컨텍스트도 설계 후 검토해야 합니다.
정확성 검사
- 포함된 모든 사실(파일명, API, 스키마 등)이 실제로 확인된 것인가?
- 에이전트가 추론한 내용과 검증된 사실이 구분되어 있는가?
- 오래된 정보가 최신 정보와 모순되지 않는가?
관련성 검사
- 포함된 각 정보가 현재 태스크에 직접 필요한가?
- 제거해도 태스크 수행에 지장 없는 정보가 있는가?
- 도구 출력이 필요한 부분만 추출되었는가?
일관성 검사
- 시스템 프롬프트와 사용자 지시 간 모순이 없는가?
- 충돌 발생 시 우선순위 규칙이 명확히 정의되어 있는가?
Few-shot 품질 검사
- 예시들이 다양한 구조와 형식을 포함하는가?
- 예시가 현재 태스크 유형과 실제로 관련 있는가?
- 예시의 수가 적절한가? (3~5개가 일반적으로 최적)
실전 적용: 컨텍스트 오염 방지 패턴
섹션 제목: “실전 적용: 컨텍스트 오염 방지 패턴”interface VerifiedFact { content: string; source: 'tool_output' | 'user_provided' | 'agent_inferred'; verifiedAt: Date; confidence: number;}
// 추론된 내용은 낮은 confidence로 저장const inferred: VerifiedFact = { content: "파일 A가 클래스 B를 참조하는 것으로 보임", source: 'agent_inferred', verifiedAt: new Date(), confidence: 0.6, // 낮은 신뢰도};
// 도구로 확인된 사실은 높은 confidenceconst verified: VerifiedFact = { content: "파일 A는 클래스 C만 import함 (실제 파일 읽기 확인)", source: 'tool_output', verifiedAt: new Date(), confidence: 0.99,};컨텍스트 취약성은 오염(잘못된 정보), 산만(무관한 정보 과다), 혼란(불필요한 세부 사항), 충돌(모순된 지시) 네 가지입니다. Few-shot 예시는 균일한 패턴보다 구조적 변형을 도입해야 경직성을 방지합니다. 컨텍스트 품질 체크리스트를 시스템 설계 단계에 통합하면 에이전트의 신뢰성이 크게 향상됩니다.