컨텍스트 오염 (Context poisoning)
컨텍스트 오염이 무엇인지, Bob Shell 세션에서 이를 어떻게 인식하는지, 새로운 세션을 시작하거나 컨텍스트 관리를 개선하여 복구하는 방법을 알아보세요.
컨텍스트 오염이란?
**컨텍스트 오염(Context poisoning)**은 잘못되었거나 관련 없는 정보가 context window에 들어가 transcript에 남아있는 현상을 말해요. Bob은 후속 프롬프트에서 해당 정보를 사실로 취급해요. 답변이 빗나가고 도구 호출이 부정확해지며 work goal(작업 목표)을 잃어버리게 돼요.
이는 단순히 한 번 잘못된 답변이 나오는 것과는 달라요. 잘못된 데이터가 Messages에 남아 있거나(또는 파일 읽기, 명령 출력 붙여넣기, 오래된 주석 등을 통해 유입됨), 사용자가 세션을 초기화하거나 새 세션을 시작할 때까지 Bob이 모든 프롬프트에서 이를 다시 전송해요.
창이 어떻게 채워지는지와 언제 새로 시작해야 하는지에 대해서는 컨텍스트 윈도우 관리를 참조하세요.
증상
다음 중 하나라도 발견되면 컨텍스트 오염이 발생했을 가능성이 높아요:
- 출력 품질 저하: 제안이 반복되거나 빗나가며 리포지토리와 일치하지 않음.
- 잘못된 도구 사용: transcript의 도구 단계가 요청한 내용과 더 이상 일치하지 않음.
- 다단계 작업 중단: 긴 다중 프롬프트 흐름이 루프에 빠지거나 멈춤.
- 단기적인 수정: 수정 프롬프트가 한 번은 도움이 되지만 곧 문제가 다시 발생함.
- 도구 혼란: Tool definitions가 변경되지 않았음에도 Bob이 도구를 잘못 사용함.
Messages가 이미 큰 경우 먼저 토큰 사용량을 확인하세요. 오염과 창 과밀 현상은 종종 함께 발생해요.
일반적인 원인
| 원인 | 발생하는 현상 |
|---|---|
| 세션 내 잘못된 사실 | Bob이 잘못된 내용을 진술하고, 이후 대화에서 이를 Messages의 기본 사실(ground truth)로 취급해요. |
| 오래되었거나 잘못된 리포지토리 텍스트 | 오래된 주석, README 내용 또는 생성된 문서가 파일 읽기를 잘못 유도해요. |
| 과도한 크기의 붙여넣기 | 노이즈, 잘림 또는 숨겨진 문자가 포함된 로그나 스니펫이 Messages에 들어가요. |
| 압축 (Condensation) | Bob이 이전 Messages를 요약해요. 유용한 세부 정보가 사라지고 남은 내용이 세션을 지배할 수 있어요. |
| 관련 없는 컨텍스트 | 관련 없는 파일, 이전 계획 또는 이전 work goal이 여전히 transcript에 남아있어요. |
잘못된 컨텍스트가 Messages에 들어가면 이후 모든 프롬프트에 걸쳐 지속돼요. Bob은 그저 틀렸다는 이유만으로 그럴듯한 텍스트를 안정적으로 무시하지 못해요.
수정 프롬프트의 한계
대화에 Tool definitions, 규칙 또는 엄격한 수정 프롬프트를 붙여넣으면 한두 번의 대화에서는 문제가 가려질 수 있어요. 하지만 오염된 Messages 기록은 여전히 남아있어요. 다음 번 주제를 벗어난 질문에서 동일한 실패가 다시 나타날 수 있어요.
확실한 해결책은 새 세션을 시작하는 것이에요. 종료하고 bob을 다시 실행하여 새로 시작하세요. 이렇게 하면 디스크의 Rules와 프로젝트 파일은 유지하면서 오염된 Messages를 지울 수 있어요.
복구 방법
- 종료 후
bob을 다시 실행하여 새 세션을 시작하세요. 이렇게 하면 디스크의 Rules와 프로젝트 파일은 유지하면서 오염된 Messages가 지워져요. - 붙여넣기를 줄이세요. Bob에게 필요한 로그 라인이나 오류만 보내세요. 대량으로 덤프하면 Messages가 늘어나고 더 많은 위험이 발생해요.
- 작업 목표(work goal)를 분할하세요. 이전 transcript가 이어지지 않도록 관련 없는 단계에는 별도의 세션을 사용하세요.
- 도구 출력을 확인하세요. 도구가 잘못된 결과를 반환하면 Bob이 Messages에서 이를 기반으로 작업을 진행하도록 두지 말고 중지한 후 새 세션을 시작하세요.
- 텍스트보다 테스트를 신뢰하세요. 주석과 코드가 일치하지 않으면 Bob에게 실행 가능한 검사를 가리키도록 하세요. 이는 컨텍스트 윈도우 모범 사례와 동일한 지침이에요.
예방 방법
대부분의 예방은 우수한 컨텍스트 관리 습관에서 비롯돼요:
- 리포지토리 탐색 전에 work goal의 범위를 지정하세요 (컨텍스트 윈도우 관리).
AGENTS.md와 Rules를 짧고 실용적으로 유지하세요.- 파일과 로그는 미리 추가하지 말고 필요할 때 추가하세요.
- 진행 상황 없이 Messages가 커지면 초기화하세요.
리포지토리 전체 읽기의 경우 하위 에이전트 (subagents)를 사용하여 세션이 Messages의 모든 도구 단계 대신 subagent results만 볼 수 있도록 하세요.