프롬프트 맨 위에 시간을 넣으면 모든 호출마다 전체 비용을 지불하게 됩니다
요약
프롬프트 캐싱의 작동 원리를 이해하는 것이 중요합니다. 프롬프트는 접두사(prefix) 기반으로 캐시되므로, 맨 위에 날짜나 시간처럼 매번 변하는 요소가 있으면 전체 비용이 청구되고 캐싱 효과를 볼 수 없습니다. 따라서 절대 변하지 않는 지침이나 고정된 정보부터 배치해야 합니다.
핵심 포인트
- 프롬프트는 접두사 기반으로 캐시되므로, 시작 부분이 완전히 동일해야 재사용됩니다.
- 매번 바뀌는 타임스탬프 등을 프롬프트 맨 위에 두면 비용이 증가하고 캐싱 효과가 사라집니다.
- 변하지 않는 지침, 도구 정의 등 고정된 내용을 가장 먼저 배치하는 것이 효율적입니다.
- 프롬프트의 순서는 변경 빈도에 따라 (고정 -> 세션별 -> 요청별) 정해야 합니다.
프롬프트는 길었고 대부분 고정적이었습니다.
4,000개의 토큰으로 된 지침,
제품 매뉴얼,
수십 개의 예시들.
그리고 마지막에 사용자 질문이 있었습니다.
제공업체는 프롬프트 캐싱(prompt caching) 기능을 제공했습니다.
누군가 이 기능을 켰습니다.
청구서 금액은 변하지 않았습니다.
지연 시간(latency)도 변하지 않았습니다.
대시보드에는 거의 캐시된 토큰이 보이지 않았습니다.
프롬프트의 첫 줄은 현재 날짜와 시간이었습니다.
두 번째 줄도 마찬가지였습니다.
그 줄이 거기에 있는 데는 좋은 이유가 있었습니다.
모델들은 오늘이 무슨 날인지 알아야 합니다.
그런데 그 위치가 최악이었습니다.
프롬프트 캐싱은 접두사(prefixes)를 기반으로 작동합니다.
제공업체는 사용자의 프롬프트 시작 부분을 처리하여 저장하고,
나중에 요청이 들어올 때, 그것이 정확히 같은 토큰으로 시작할 경우에만 재사용할 수 있습니다.
유사한 것이 아닙니다.
첫 번째 토큰부터 캐시된 지점까지 완전히 동일해야 합니다.
맨 위 근처의 단 하나의 문자만 달라져도,
그 뒤의 모든 내용은 다시 새롭게 취급되어,
전체 요율(full rate)로 청구되고 처음부터 처리됩니다.
첫 줄에 타임스탬프가 있으면, 모든 요청이 첫 글자부터 다르게 만듭니다.
캐시는 아무도 다시 보내지 않을 접두사를 저장합니다.
다른 것도 같은 방식으로 작동하지만,
더 조용하게 합니다.
시스템 프롬프트 내의 사용자 이름.
실행마다 순서가 바뀌는 딕셔너리에서 만들어진 도구 목록.
디버깅을 위해 누군가 추가한 요청 ID.
모델이 다양성을 볼 수 있도록 무작위로 선택된 예시들.
따라서 프롬프트의 순서는 변경 빈도에 따라 정해야 합니다.
절대 변하지 않는 것이 가장 먼저 옵니다.
지침, 고정된 순서의 도구 정의, 참고 문서, 예시들.
다음으로 세션별로 변경되는 것들.
그리고 요청별로 변경되는 것, 즉 날짜, 사용자, 질문입니다.
타임스탬프는 관련된 내용 옆, 즉 맨 아래에 위치해야 합니다.
그러고 모든 응답에서 사용량 블록(usage block)을 읽으세요.
그것은 얼마나 많은 입력 토큰이 캐시에서 왔는지 알려줍니다.
비용 옆에 그것을 기록하세요.
만약 프롬프트의 대부분이 동일한데도 그 숫자가 0에 가깝다면,
맨 위 근처 어딘가에서 무언가가 움직이고 있다는 뜻입니다.
캐시는 같은 순서로 두 번 보내는 것만 도와줄 수 있습니다.
안정적인 부분을 먼저 배치하고,
그리고 그대로 유지하십시오.
– Serguey Asael Shinder
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기