반응형

부제: 시스템 프롬프트에 든 현재 시각 하나가 매 요청 캐시를 깨뜨렸다
LLM은 프롬프트 앞부분이 같으면 그 부분을 캐시해 비용과 속도를 아낀다(프롬프트 캐싱).
그런데 캐시가 먹으려면 그 앞부분이 요청마다 똑같아야 한다.
여기서 우리가 스스로 캐시를 깨고 있었다.
캐시되는 자리에 변하는 값
시스템 프롬프트에 "현재 시각"을 넣고 있었다.
"지금은 몇 시"를 모델이 알아야 "오늘"·"이번 주" 같은 말에 제대로 답하니까.
문제는 시각이 매 요청 바뀐다는 거다.
캐시 대상인 시스템 지시가 요청마다 조금씩 달라지니, 캐시가 매번 깨졌다.
정작 나머지는 다 똑같은데, 시계 하나 때문에 앞부분 전체가 캐시 미스가 됐다.
시각을 프롬프트에서 빼 도구로
처음엔 시각을 프롬프트 뒤쪽(사용자 메시지의 컨텍스트 블록)으로 옮기는 걸 검토했다.
캐시되는 앞부분에서만 빼면 되니까.
그런데 더 근본적으로 갔다.
시각을 프롬프트에서 아예 빼고, "현재 시각"을 알려주는 내장 도구로 대체했다.
이제 시스템 지시엔 변하는 값이 하나도 없다. 완전히 고정돼 캐시가 안정적으로 먹는다.
모델은 시간이 필요할 때만 그 도구를 부른다.
트레이드오프도 있었다.
모델이 시간이 필요한데도 도구를 안 부르는(under-calling) 경우다.
이건 도구를 쓰도록 유도하는 안내로 완화했다.
정리
- 프롬프트 캐싱은 앞부분이 같아야 먹는데, 시스템 프롬프트에 든 "현재 시각"이 매 요청 바뀌어 캐시가 깨졌다
- 시각을 뒤로 옮기는 대신, 프롬프트에서 빼 도구(get_current_time)로 대체 — 시스템 지시 완전 고정
- 모델은 필요할 때만 도구를 호출. under-calling 리스크는 사용 유도로 완화
캐시를 살리려면 캐시되는 부분에 변하는 값을 두지 마라.
매 요청 바뀌는 값은 프롬프트에 박지 말고, 필요할 때 가져오는 도구로 빼면 앞부분이 고정돼 캐시가 산다.
반응형
'AI' 카테고리의 다른 글
| [비동기] 스트리밍 도중 클라이언트 끊김 진행 작업 shield 복구 (0) | 2026.07.23 |
|---|---|
| [LLM] 대화 요약 대신 정보 추출 화자 귀속 편향 방지 (0) | 2026.07.23 |
| [에이전트] 내부 도구 MCP 안 쓴 이유 이식성 재사용성 (0) | 2026.07.22 |
| [메모리] 챗봇 사용자 기억 Identity Episodic 4계층 (1) | 2026.07.21 |
| [에이전트] 같은 말 반복, 프롬프트 대신 그래프 제어로 끝낸 턴 (0) | 2026.07.21 |