본문 바로가기
C.W.K.
Stream
Lesson 07 of 10 · published

긴 맥락의 한계 — 모델이 중간을 놓칠 때

~16 min · context, long-context, attention

Level 0수련생
0 XP0/100 lessons0/14 achievements
0/120 XP to next level120 XP to go0% complete

‘중간에서 잃어버리기’는 실제로 측정돼

맥락 창이 100만 토큰인 모델도 모든 위치에 주의를 고르게 나누지는 않아. 시작과 끝에 놓인 정보는 비교적 정확히 떠올리지만, 중간에 묻힌 정보는 눈에 띄게 더 자주 놓쳐. 건초더미 속 바늘 찾기 성적은 해마다 좋아졌지만 이 현상은 사라지지 않았어. 게다가 실제 운영 프롬프트는 그런 시험만큼 단정하게 짜여 있지도 않고.

놓침을 줄이는 네 가지 방법

  • 중요도순으로 놓아 — 원문 순서가 아니라 질문과 가장 관련 있는 청크부터 둬.
  • 끝에서 지시를 되짚어 — 긴 근거 묶음 뒤에 한 줄짜리 알림을 붙이면 모델이 해야 할 일로 다시 돌아와.
  • 과감히 덜어내 — 어중간하게 관련 있는 20만 토큰은 잘 고른 2만 토큰보다 오히려 나쁠 수 있어.
  • 계층적으로 검색해 — 먼저 요약 수준에서 찾고, 관련 있는 절만 깊이 내려가. 모든 자료를 한꺼번에 가운데 쏟아붓지 마.

프롬프트마다 직접 시험해

정답을 알고 있는 사실 하나를 긴 맥락의 시작, 중간, 끝에 차례로 넣고 모델에게 찾아내게 해봐. 중간에 놓았을 때 성적이 눈에 띄게 낮다면 그 프롬프트도 ‘중간에서 잃어버리기’의 영향을 받고 있어.

Code

위치에 따른 회상 시험·python
import random
import anthropic

def build_haystack(needle: str, position: str, total_tokens: int = 100_000) -> str:
    filler = "Lorem ipsum ... " * (total_tokens // 4)  # crude
    parts = filler.split(". ")
    if position == "start":
        out = needle + ". " + ". ".join(parts)
    elif position == "end":
        out = ". ".join(parts) + ". " + needle
    else:  # middle
        mid = len(parts) // 2
        out = ". ".join(parts[:mid] + [needle] + parts[mid:])
    return out

# Run with the same needle at three positions; compare recall.

External links

Exercise

한 모델에 5만 토큰짜리 맥락을 넣고 위치에 따른 회상 시험을 만들어봐. 정답이 놓인 위치별 정확도를 그래프로 그리고, 내용을 덜거나 순서를 바꿔야 하는지 판단해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.