본문 바로가기
배움: MBA, English, 운동

OpenAi - 프롬프트 캐싱 (Prompt Caching)

by Heedong-Kim 2024. 10. 3.

모델 프롬프트에는 시스템 프롬프트와 일반적인 지침과 같은 반복적인 콘텐츠가 자주 포함됩니다. OpenAI는 동일한 프롬프트를 최근에 처리한 서버로 API 요청을 라우팅하여 처음부터 프롬프트를 처리하는 것보다 더 저렴하고 빠르게 만듭니다. 이를 통해 지연 시간을 최대 80%까지 줄이고 긴 프롬프트의 경우 비용을 50%까지 절감할 수 있습니다. 프롬프트 캐싱은 모든 API 요청에서 자동으로 작동하며 추가 비용이 발생하지 않습니다.

 

프롬프트 캐싱이 활성화된 모델은 다음과 같습니다:

  • gpt-4o (gpt-4o-2024-05-13 제외)
  • gpt-4o-mini
  • o1-preview
  • o1-mini

이 가이드는 프롬프트 캐싱이 어떻게 작동하는지를 자세히 설명하여, 더 낮은 지연 시간과 비용을 위해 프롬프트를 최적화할 수 있도록 돕습니다.

프롬프트 구성하기

캐시 히트는 프롬프트 내에서 정확한 접두어 일치에만 가능하므로, 지침이나 예시와 같은 정적 콘텐츠는 프롬프트의 시작 부분에 배치하고, 사용자별 정보와 같은 가변 콘텐츠는 끝에 배치하십시오. 이는 이미지 및 도구에도 적용되며, 요청 간에 동일해야 합니다.

 

프롬프트 캐싱 시각화

작동 방식

프롬프트가 1024개 이상의 토큰을 포함하는 경우 캐싱이 자동으로 활성화됩니다. API 요청을 할 때 다음 단계가 발생합니다:

  1. 캐시 조회: 시스템은 프롬프트의 초기 부분(접두어)이 캐시에 저장되어 있는지 확인합니다.
  2. 캐시 히트: 일치하는 접두어가 발견되면 시스템은 캐시된 결과를 사용합니다. 이는 지연 시간을 크게 줄이고 비용을 절감합니다.
  3. 캐시 미스: 일치하는 접두어가 없으면 시스템이 전체 프롬프트를 처리합니다. 처리 후, 프롬프트의 접두어가 이후 요청을 위해 캐시에 저장됩니다.

캐시된 접두어는 일반적으로 비활성 상태일 때 5~10분 동안 유지됩니다. 그러나 비피크 시간 동안에는 캐시가 최대 1시간까지 유지될 수 있습니다.

요구 사항

캐싱은 1024개 이상의 토큰을 포함하는 프롬프트에서 사용할 수 있으며, 캐시 히트는 128개의 토큰 단위로 발생합니다. 따라서 요청에서 캐시된 토큰 수는 프롬프트의 길이에 따라 1024, 1152, 1280, 1408 등과 같은 시퀀스 내에서 발생합니다.

모든 요청(1024개 미만의 토큰을 포함하는 요청 포함)은 캐시 히트를 나타내는 cached_tokens 필드를 포함합니다. 1024개 미만의 토큰을 가진 요청의 경우 cached_tokens는 0입니다.

 

 

캐시할 수 있는 항목

  • 메시지: 시스템, 사용자 및 어시스턴트 상호작용을 포함한 전체 메시지 배열
  • 이미지: 사용자 메시지에 포함된 링크 또는 base64로 인코딩된 데이터로 제공된 이미지
  • 도구 사용: 메시지 배열 및 사용 가능한 도구 목록
  • 구조화된 출력: 구조화된 출력 스키마는 시스템 메시지의 접두어로 사용되며 캐시될 수 있습니다.

모범 사례

  • 정적 또는 반복적인 콘텐츠는 프롬프트 시작 부분에, 동적인 콘텐츠는 끝에 배치하십시오.
  • 캐시 히트 비율, 지연 시간 및 캐시된 토큰 비율과 같은 메트릭을 모니터링하여 프롬프트 및 캐싱 전략을 최적화하십시오.
  • 캐시 히트를 증가시키려면 더 긴 프롬프트를 사용하고 비피크 시간 동안 API 요청을 수행하십시오. 캐시는 피크 시간 동안 더 자주 삭제됩니다.
  • 최근에 사용되지 않은 프롬프트는 자동으로 캐시에서 제거됩니다. 삭제를 최소화하려면 동일한 프롬프트 접두어를 사용하는 일관된 요청 흐름을 유지하십시오.

자주 묻는 질문

  1. 캐시의 데이터 개인정보는 어떻게 유지됩니까?
    프롬프트 캐시는 조직 간에 공유되지 않습니다. 동일한 조직의 구성원만 동일한 프롬프트의 캐시에 액세스할 수 있습니다.

  2. 프롬프트 캐싱이 출력 토큰 생성이나 API의 최종 응답에 영향을 미칩니까?
    프롬프트 캐싱은 출력 토큰 생성이나 최종 응답에 영향을 미치지 않습니다. 캐시된 프롬프트만 사용되며, 실제 응답은 캐시된 프롬프트를 기반으로 새로 계산됩니다.

  3. 캐시를 수동으로 삭제할 수 있습니까?
    현재 수동 캐시 삭제는 제공되지 않습니다. 최근에 사용되지 않은 프롬프트는 자동으로 캐시에서 삭제됩니다. 일반적인 캐시 삭제는 비활성 상태일 때 5~10분 후에 발생하지만, 비피크 시간 동안에는 최대 1시간까지 유지될 수 있습니다.

  4. 프롬프트 캐싱을 사용할 때 추가 요금이 발생합니까?
    아닙니다. 캐싱은 자동으로 이루어지며 추가 비용이 발생하지 않습니다.

  5. 프롬프트 캐싱이 TPM(rate limits)에 영향을 줍니까?
    예, 캐싱은 속도 제한에 영향을 미치지 않습니다.

  6. Scale Tier와 Batch API에서 프롬프트 캐싱 할인이 제공됩니까?
    Batch API에서는 프롬프트 캐싱 할인이 제공되지 않지만, Scale Tier에서는 가능합니다. Scale Tier의 경우, 공유 API로 넘어간 토큰도 캐싱 대상이 됩니다.

  7. 프롬프트 캐싱이 Zero Data Retention 요청에서 작동합니까?
    네, 프롬프트 캐싱은 기존 Zero Data Retention 정책과 호환됩니다.