이 페이지는 도구 정의에 대한 프롬프트 캐싱을 다룹니다: cache_control 중단점을 배치할 위치, defer_loading이 캐시를 보존하는 방법, 그리고 무엇이 캐시를 무효화하는지에 대해 설명합니다. 일반적인 프롬프트 캐싱에 대해서는 프롬프트 캐싱을 참조하세요.
tools 배열의 마지막 도구에 cache_control: {"type": "ephemeral"}을 배치하세요. 이렇게 하면 첫 번째 도구부터 표시된 중단점까지 전체 도구 정의 접두사가 캐시됩니다:
{
"tools": [
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": { "type": "string" }
},
"required": ["location"]
}
},
{
"name": "get_time",
"description": "Get the current time in a given time zone",
"input_schema": {
"type": "object",
"properties": {
"timezone": { "type": "string" }
},
"required": ["timezone"]
},
"cache_control": { "type": "ephemeral" }
}
]
}mcp_toolset의 경우, cache_control 중단점은 세트의 마지막 도구에 적용됩니다. MCP 도구 세트 내에서 도구 순서를 제어할 수 없으므로, mcp_toolset 항목 자체에 중단점을 배치하면 API가 이를 마지막으로 확장된 도구에 적용합니다.
지연된 도구는 시스템 프롬프트 접두사에 포함되지 않습니다. 모델이 도구 검색을 통해 지연된 도구를 발견하면, 해당 정의는 대화 기록에 tool_reference 블록으로 인라인 추가됩니다. 접두사는 변경되지 않으므로 프롬프트 캐싱이 보존됩니다.
즉, 도구 검색을 통해 동적으로 도구를 추가해도 캐시가 깨지지 않습니다. 항상 로드되는 소수의 도구 세트(캐시됨)로 대화를 시작하고, 모델이 필요에 따라 추가 도구를 발견하도록 하면서, 모든 턴에서 동일한 캐시 히트를 유지할 수 있습니다.
defer_loading은 또한 엄격 모드의 문법 구성과 독립적으로 작동합니다. 어떤 도구가 지연되었는지와 관계없이 문법은 전체 도구 세트로부터 구축되므로, 도구가 동적으로 로드될 때 프롬프트 캐싱과 문법 캐싱이 모두 보존됩니다.
캐시는 접두사 계층 구조(tools → system → messages)를 따르므로, 한 수준에서의 변경은 해당 수준과 그 이후의 모든 것을 무효화합니다:
| 변경 | 무효화 대상 |
|---|---|
| 도구 정의 수정 | 전체 캐시 (tools, system, messages) |
| 웹 검색 또는 인용 토글 | 시스템 및 메시지 캐시 |
tool_choice 변경 | 메시지 캐시 |
disable_parallel_tool_use 변경 | 메시지 캐시 |
| 이미지 존재/부재 토글 | 메시지 캐시 |
| 사고 매개변수 변경 | 메시지 캐시는 항상; 사고 구성을 그보다 앞에 렌더링하는 모델에서는 도구 및 시스템 캐시도 포함 (자세한 내용) |
output_config.effort 변경 | 사고 매개변수와 동일; 모델의 기본값을 명시적으로 설정하는 것은 생략하는 것과 동일합니다 |
요청에 프롬프트 캐싱이 활성화되어 있고 Claude가 웹 검색, 웹 가져오기 또는 코드 실행과 같은 서버 도구를 사용하는 경우, API는 에이전트 루프의 다음 반복을 실행하기 전에 서버 도구 결과에 자동으로 캐시 중단점을 배치합니다. 이를 통해 동일한 요청 내의 이후 반복이 증가하는 접두사를 다시 처리하는 대신 캐시에서 읽을 수 있습니다.
이 자동 중단점은 사용자가 자신의 cache_control 마커에 설정한 TTL과 관계없이 항상 기본 5분 TTL을 사용합니다. 응답 usage에서 이러한 쓰기는 cache_creation.ephemeral_5m_input_tokens 아래에 나타나므로, 설정한 모든 cache_control이 1시간 TTL을 사용하더라도 5분 캐시 쓰기가 표시될 수 있습니다.
이 동작은 요청에 이미 하나 이상의 cache_control 마커가 있는 경우에만 적용됩니다. 프롬프트 캐싱이 없는 요청은 자동 중단점을 받지 않습니다.
| 도구 | 캐싱 고려 사항 |
|---|---|
| 웹 검색 | 활성화 또는 비활성화 시 시스템 및 메시지 캐시가 무효화됩니다 |
| 웹 가져오기 | 활성화 또는 비활성화 시 시스템 및 메시지 캐시가 무효화됩니다 |
| 코드 실행 | 컨테이너 상태는 프롬프트 캐시와 독립적입니다 |
| 도구 검색 | 발견된 도구는 tool_reference 블록으로 로드되어 접두사 캐시를 보존합니다 |
| 컴퓨터 사용 | 스크린샷 존재 여부가 메시지 캐시에 영향을 줍니다 |
| 텍스트 편집기 | 표준 클라이언트 도구, 특별한 캐싱 상호작용 없음 |
| Bash | 표준 클라이언트 도구, 특별한 캐싱 상호작용 없음 |
| 메모리 | 표준 클라이언트 도구, 특별한 캐싱 상호작용 없음 |
TTL 및 가격을 포함한 전체 프롬프트 캐싱 모델을 알아보세요.
캐시를 깨뜨리지 않고 필요에 따라 도구를 로드하세요.
사용 가능한 모든 도구와 해당 매개변수를 살펴보세요.
Was this page helpful?