AI

[LLM] 프롬프트 캐시 깨는 시계 현재시각 도구로 분리

jykim23 2026. 7. 22. 23:24
반응형

프롬프트 캐시 현재시각 도구 분리 시스템 프롬프트 고정 캐시 히트

부제: 시스템 프롬프트에 든 현재 시각 하나가 매 요청 캐시를 깨뜨렸다

LLM은 프롬프트 앞부분이 같으면 그 부분을 캐시해 비용과 속도를 아낀다(프롬프트 캐싱).
그런데 캐시가 먹으려면 그 앞부분이 요청마다 똑같아야 한다.

여기서 우리가 스스로 캐시를 깨고 있었다.

캐시되는 자리에 변하는 값

시스템 프롬프트에 "현재 시각"을 넣고 있었다.
"지금은 몇 시"를 모델이 알아야 "오늘"·"이번 주" 같은 말에 제대로 답하니까.

문제는 시각이 매 요청 바뀐다는 거다.
캐시 대상인 시스템 지시가 요청마다 조금씩 달라지니, 캐시가 매번 깨졌다.
정작 나머지는 다 똑같은데, 시계 하나 때문에 앞부분 전체가 캐시 미스가 됐다.

시각을 프롬프트에서 빼 도구로

처음엔 시각을 프롬프트 뒤쪽(사용자 메시지의 컨텍스트 블록)으로 옮기는 걸 검토했다.
캐시되는 앞부분에서만 빼면 되니까.

그런데 더 근본적으로 갔다.
시각을 프롬프트에서 아예 빼고, "현재 시각"을 알려주는 내장 도구로 대체했다.
이제 시스템 지시엔 변하는 값이 하나도 없다. 완전히 고정돼 캐시가 안정적으로 먹는다.
모델은 시간이 필요할 때만 그 도구를 부른다.

트레이드오프도 있었다.
모델이 시간이 필요한데도 도구를 안 부르는(under-calling) 경우다.
이건 도구를 쓰도록 유도하는 안내로 완화했다.

정리

  • 프롬프트 캐싱은 앞부분이 같아야 먹는데, 시스템 프롬프트에 든 "현재 시각"이 매 요청 바뀌어 캐시가 깨졌다
  • 시각을 뒤로 옮기는 대신, 프롬프트에서 빼 도구(get_current_time)로 대체 — 시스템 지시 완전 고정
  • 모델은 필요할 때만 도구를 호출. under-calling 리스크는 사용 유도로 완화

캐시를 살리려면 캐시되는 부분에 변하는 값을 두지 마라.
매 요청 바뀌는 값은 프롬프트에 박지 말고, 필요할 때 가져오는 도구로 빼면 앞부분이 고정돼 캐시가 산다.

반응형