아래 함수에서 캐시 적중률이 0으로 나오는 원인을 찾아주세요. system 프롬프트는 매 요청마다 동일한데도 cache_read_input_tokens가 계속 0입니다. ```python def build_request(user_input: str) -> dict: system = f"""당신은 회계 담당자입니다. 오늘 날짜: {datetime.now().isoformat()} 사용자 등급: {get_user_tier()} """ return { "model": "claude-sonnet-4-6", "max_tokens": 4096, "system": [{"type": "text", "text": system, "cache_control": {"type": "ephemeral"}}], "messages": [{"role": "user", "content": user_input}], } ``` 원인은 system 프롬프트 안에 `datetime.now()` 가 들어가 있다는 점입니다. 프롬프트 캐싱은 접두사(prefix) 완전 일치 방식이라, 앞쪽 바이트가 1바이트라도 달라지면 그 뒤 전체가 무효화됩니다. 매 요청마다 타임스탬프가 바뀌므로 캐시 항목이 매번 새로 생성되고, 읽기는 한 번도 발생하지 않습니다. `get_user_tier()` 도 같은 문제를 일으킵니다. 사용자 등급이 다르면 접두사가 달라지므로 사용자 간 캐시 공유가 불가능해집니다. 수정 방향은 이렇습니다. 변하지 않는 지침만 system에 두고, 날짜나 사용자 등급처럼 요청마다 달라지는 값은 messages 배열의 뒤쪽으로 옮깁니다. 이렇게 하면 앞쪽 접두사가 고정되어 캐시가 재사용됩니다. 검증은 응답의 `usage.cache_read_input_tokens` 값으로 합니다. 동일한 접두사로 두 번 이상 호출했는데도 이 값이 계속 0이라면, 아직 어딘가에 요청마다 달라지는 값이 남아 있다는 뜻입니다. `json.dumps()` 를 `sort_keys=True` 없이 쓰거나, set을 순회해 문자열을 만드는 코드도 같은 증상을 만듭니다.