컨텍스트를 길게 넣을수록 답이 나빠지는 이유와 위치 효과

컨텍스트를 길게 넣을수록

많은 분들이 컨텍스트 창이 넉넉하면 자료를 한 번에 다 밀어 넣는 편이 무조건 유리하다고 생각합니다. 하지만 실제로는 컨텍스트를 길게 넣을수록 답이 나빠지는 경우가 자주 생깁니다. 모델이 실제로 활용하는 ‘실효 길이’는 공식 스펙보다 훨씬 짧고, 특히 프롬프트 중간에 놓인 정보는 앞뒤보다 자주 무시됩니다. 그래서 토큰을 얼마나 채우느냐보다 어디에 배치하느냐가 답변 품질을 좌우합니다.

컨텍스트 창이 커도 실효 길이는 따로 있습니다

컨텍스트 창은 모델이 한 번에 읽어 들일 수 있는 최대 토큰 수를 뜻합니다. 공식 사양만 보면 숫자가 클수록 좋아 보이지만, 그 숫자는 ‘입력 가능한 한계치’일 뿐 ‘실제로 고르게 활용하는 길이’를 보장하지 않습니다.

모델 공식 컨텍스트 창
클로드 3.5 소네트 약 20만 토큰
GPT-4o 약 12.8만 토큰
제미나이 1.5 프로 최대 100만 토큰

앤트로픽은 자사 프롬프트 엔지니어링 가이드에서 긴 문서를 넣을 때 배치 순서에 따라 답변 품질이 달라진다고 안내하고 있습니다. 즉, 최대치를 채웠다고 해서 모델이 그 안의 모든 정보를 동일한 비중으로 참조하지는 않는다는 뜻입니다.

왜 중간에 넣은 정보만 자주 놓칠까요

AI 언어 모델의 어텐션 메커니즘을 시각화한 추상적 디지털 이미지

트랜스포머 계열 모델은 입력 토큰 사이의 관계를 어텐션으로 계산하는데, 이 구조는 위키백과의 트랜스포머 문서에도 정리돼 있듯 모든 토큰 쌍을 동일한 비중으로 다루도록 설계돼 있지 않습니다. 학습 데이터의 특성과 위치 인코딩 방식 때문에 문장의 맨 앞과 맨 뒤에 가까운 토큰이 상대적으로 더 뚜렷하게 반영되는 경향이 생깁니다.

결과적으로 질문에 필요한 핵심 문장이 프롬프트 한가운데 묻혀 있으면, 모델이 그 문장을 읽고도 답변에 제대로 반영하지 못하는 일이 벌어집니다. 컨텍스트가 짧을 때는 잘 드러나지 않다가, 문서 수가 늘어나고 컨텍스트가 길어질수록 이 격차가 점점 커집니다.

위치 효과를 실험으로 확인한 결과

이 현상은 스탠퍼드와 버클리 연구진이 2023년에 발표한 선행연구에서 실증적으로 확인됐습니다. 여러 개의 문서를 프롬프트에 넣고 정답이 담긴 문서의 위치만 앞에서 뒤로 옮겨가며 정답률을 측정했는데, 정답이 맨 앞이나 맨 뒤에 있을 때는 정확도가 높았지만 중간 구간에 있을 때는 뚜렷하게 떨어지는 U자형 곡선이 나타났습니다.

주목할 점은 문서 개수가 늘어날수록, 즉 컨텍스트가 길어질수록 이 U자형 곡선의 골이 더 깊어졌다는 부분입니다. 단순히 관련 자료를 더 많이 넣는다고 답변이 정교해지는 게 아니라, 오히려 핵심 정보가 중간에 묻히면서 성능이 떨어지는 역효과가 나타난 셈입니다.

컨텍스트를 길게 넣을 때는 순서부터 바꿔보세요

RAG(검색 증강 생성) 파이프라인을 쓰고 있다면, 검색된 청크를 관련도 순서 그대로 나열하지 말고 가장 중요한 청크를 맨 앞과 맨 뒤에 배치하는 편이 안전합니다. 아래는 이 원리를 적용한 간단한 파이썬 예시입니다.

def build_prompt(question, ranked_chunks):
    # 관련도 1위는 맨 앞, 2위는 맨 뒤에 두고 나머지는 중간에 넣습니다
    top = ranked_chunks[0]
    second = ranked_chunks[1] if len(ranked_chunks) > 1 else ""
    middle = ranked_chunks[2:]
    context = top + "\n" + "\n".join(middle) + ("\n" + second if second else "")
    return f"{context}\n\n질문: {question}"

chunks = ["관련도1위 문서", "관련도2위 문서", "관련도3위 문서", "관련도4위 문서"]
print(build_prompt("환불 규정이 뭔가요?", chunks))

책상 위에 쌓인 수많은 문서와 자료들로 나타낸 정보 과부하 개념

이렇게 하면 가장 신뢰도 높은 근거 두 개가 모델이 상대적으로 잘 참조하는 시작·끝 구간에 놓이고, 상대적으로 덜 중요한 문서가 중간에 배치됩니다. 청크 수가 많을 때는 상위 3~5개만 남기고 나머지는 아예 빼는 편이 정확도 면에서 더 나은 경우도 많습니다.

컨텍스트를 늘려도 답이 나빠지지 않는 예외

이 위치 효과는 주로 ‘여러 독립 문서 중 정답 하나를 찾는’ 검색형 질의응답 과제에서 두드러집니다. 반대로 긴 문서 전체를 요약하거나 코드 전체 구조를 파악하는 것처럼 모든 구간이 서로 이어져 있는 과제라면, 순서를 바꾸는 트릭만으로는 효과가 제한적입니다. 이럴 때는 애초에 문서를 통째로 넣기보다 구간별로 나눠 요약한 뒤 합치는 방식이 더 안정적입니다.

또한 모델과 버전에 따라 정도 차이가 큽니다. 최신 모델일수록 긴 컨텍스트에 대한 학습이 강화돼 격차가 줄어드는 경향이 있지만, 완전히 사라졌다고 단정할 근거는 없습니다. 사용 중인 모델·버전에서 직접 테스트해 보지 않고 일반론만 믿고 설계를 확정하는 것은 위험합니다.

결국 중요한 건 양이 아니라 배치입니다

공식 컨텍스트 창 숫자만 보고 자료를 최대한 채워 넣는 전략은 오히려 답변 품질을 떨어뜨릴 수 있습니다. 핵심 근거를 프롬프트의 시작과 끝에 배치하고, 덜 중요한 자료는 줄이거나 중간에서 빼는 방식이 현재까지 확인된 가장 실용적인 대응입니다.

다음 단계로는 지금 쓰고 계신 모델과 실제 프롬프트 구조로 ‘정답 위치를 바꿔가며 정확도를 재는’ 간단한 테스트를 직접 돌려 보는 것을 권합니다. 같은 자료라도 순서만 바꿔서 비교해 보면 위치 효과가 자신의 서비스에 얼마나 영향을 주는지 바로 확인할 수 있습니다.

temperature 0인데 답이 매번 다른 이유 — 배치 크기와 부동소수점

참고: 컨텍스트를 길게 넣을수록 — 위키백과

Leave a Comment