콘텐츠로 이동

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)”

불필요한 세부 사항이 모델의 주의를 분산시킵니다. 오염과 달리 정보 자체는 정확하지만, 현재 태스크와 무관하여 혼란을 야기합니다.

구분원인결과
오염잘못된 정보 포함사실로 오인하여 잘못된 결정
산만무관한 정보 과다신호 약화, 성능 저하
혼란관련은 있지만 지금 불필요한 세부 사항집중 분산
충돌서로 모순된 지시예측 불가능한 행동

시스템 프롬프트와 사용자 지시, 또는 서로 다른 시점의 지시가 모순될 때 발생합니다.

시스템 프롬프트: "항상 TypeScript를 사용하라"
사용자 메시지: "JavaScript로 빠르게 작성해줘"
→ 에이전트 행동 예측 불가

대응: 우선순위 계층을 명확히 정의합니다. 시스템 프롬프트 > 최근 사용자 지시 > 이전 대화 맥락 등 명확한 충돌 해소 규칙을 수립합니다.

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, // 낮은 신뢰도
};
// 도구로 확인된 사실은 높은 confidence
const verified: VerifiedFact = {
content: "파일 A는 클래스 C만 import함 (실제 파일 읽기 확인)",
source: 'tool_output',
verifiedAt: new Date(),
confidence: 0.99,
};

컨텍스트 취약성은 오염(잘못된 정보), 산만(무관한 정보 과다), 혼란(불필요한 세부 사항), 충돌(모순된 지시) 네 가지입니다. Few-shot 예시는 균일한 패턴보다 구조적 변형을 도입해야 경직성을 방지합니다. 컨텍스트 품질 체크리스트를 시스템 설계 단계에 통합하면 에이전트의 신뢰성이 크게 향상됩니다.