cache_control
:
cache_control
. Isso permite a reutilização deste texto grande em múltiplas chamadas da API sem reprocessá-lo a cada vez. Alterar apenas a mensagem do usuário permite que você faça várias perguntas sobre o livro enquanto utiliza o conteúdo em cache, levando a respostas mais rápidas e maior eficiência.
tools
, system
e messages
(nesta ordem) até e incluindo o bloco designado com cache_control
.Model | Base Input Tokens | 5m Cache Writes | 1h Cache Writes | Cache Hits & Refreshes | Output Tokens |
---|---|---|---|---|---|
Claude Opus 4.1 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Opus 4 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Sonnet 4 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.7 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.5 (deprecated) | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Haiku 3.5 | $0.80 / MTok | $1 / MTok | $1.6 / MTok | $0.08 / MTok | $4 / MTok |
Claude Opus 3 (deprecated) | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Haiku 3 | $0.25 / MTok | $0.30 / MTok | $0.50 / MTok | $0.03 / MTok | $1.25 / MTok |
cache_control
.
Os prefixos de cache são criados na seguinte ordem: tools
, system
, depois messages
. Esta ordem forma uma hierarquia onde cada nível se baseia nos anteriores.
cache_control
, o sistema verifica automaticamente por acertos de cache em todos os limites de blocos de conteúdo anteriores (até aproximadamente 20 blocos antes do seu ponto de interrupção explícito)cache_control
. Qualquer solicitação para armazenar em cache menos que este número de tokens será processada sem cache. Para ver se um prompt foi armazenado em cache, veja os campos de uso da resposta.
Para solicitações concorrentes, note que uma entrada de cache só fica disponível após a primeira resposta começar. Se você precisar de acertos de cache para solicitações paralelas, aguarde a primeira resposta antes de enviar solicitações subsequentes.
Atualmente, “ephemeral” é o único tipo de cache suportado, que por padrão tem uma duração de 5 minutos.
cache_control
não aumenta seus custos - você ainda paga a mesma quantia baseada no que o conteúdo é realmente armazenado em cache e lido. Os pontos de interrupção simplesmente dão controle sobre quais seções podem ser armazenadas em cache independentemente.
cache_control
. Isso inclui:
tools
system
messages.content
, para turnos tanto do usuário quanto do assistentemessages.content
, em turnos do usuáriomessages.content
, em turnos tanto do usuário quanto do assistentecache_control
para habilitar o cache para essa parte da solicitação.
cache_control
. No entanto, blocos de pensamento PODEM ser armazenados em cache junto com outro conteúdo quando aparecem em turnos anteriores do assistente. Quando armazenados em cache desta forma, eles CONTAM como tokens de entrada quando lidos do cache.
tools
→ system
→ messages
. Mudanças em cada nível invalidam esse nível e todos os níveis subsequentes.
A tabela a seguir mostra quais partes do cache são invalidadas por diferentes tipos de mudanças. ✘ indica que o cache é invalidado, enquanto ✓ indica que o cache permanece válido.
O que muda | Cache de ferramentas | Cache do sistema | Cache de mensagens | Impacto |
---|---|---|---|---|
Definições de ferramentas | ✘ | ✘ | ✘ | Modificar definições de ferramentas (nomes, descrições, parâmetros) invalida todo o cache |
Alternância de busca na web | ✓ | ✘ | ✘ | Habilitar/desabilitar busca na web modifica o prompt do sistema |
Alternância de citações | ✓ | ✘ | ✘ | Habilitar/desabilitar citações modifica o prompt do sistema |
Escolha de ferramenta | ✓ | ✓ | ✘ | Mudanças no parâmetro tool_choice afetam apenas blocos de mensagem |
Imagens | ✓ | ✓ | ✘ | Adicionar/remover imagens em qualquer lugar do prompt afeta blocos de mensagem |
Parâmetros de pensamento | ✓ | ✓ | ✘ | Mudanças nas configurações de pensamento estendido (habilitar/desabilitar, orçamento) afetam blocos de mensagem |
Resultados não-ferramenta passados para solicitações de pensamento estendido | ✓ | ✓ | ✘ | Quando resultados não-ferramenta são passados em solicitações enquanto o pensamento estendido está habilitado, todos os blocos de pensamento previamente armazenados em cache são removidos do contexto, e quaisquer mensagens no contexto que seguem esses blocos de pensamento são removidas do cache. Para mais detalhes, veja Cache com blocos de pensamento. |
usage
na resposta (ou evento message_start
se streaming):
cache_creation_input_tokens
: Número de tokens escritos no cache ao criar uma nova entrada.cache_read_input_tokens
: Número de tokens recuperados do cache para esta solicitação.input_tokens
: Número de tokens de entrada que não foram lidos ou usados para criar um cache.tool_choice
e uso de imagem permanecem consistentes entre chamadascache_control
adicionais mais cedo no prompt para garantir que todo o conteúdo possa ser armazenado em cachetool_choice
ou a presença/ausência de imagens em qualquer lugar do prompt invalidarão o cache, exigindo que uma nova entrada de cache seja criada. Para mais detalhes sobre invalidação de cache, veja O que invalida o cache.cache_control
, eles são armazenados em cache como parte do conteúdo da solicitação quando você faz chamadas subsequentes da API com resultados de ferramentas. Isso comumente acontece durante o uso de ferramentas quando você passa blocos de pensamento de volta para continuar a conversa.
Contagem de tokens de entrada: Quando blocos de pensamento são lidos do cache, eles contam como tokens de entrada em suas métricas de uso. Isso é importante para cálculo de custo e orçamento de tokens.
Padrões de invalidação de cache:
cache_control
explícitosttl
na definição cache_control
assim:
cache_creation_input_tokens
é igual à soma dos valores no objeto cache_creation
.
A
: A contagem de tokens no acerto de cache mais alto (ou 0 se não houver acertos).B
: A contagem de tokens no bloco cache_control
de 1 hora mais alto após A
(ou igual a A
se nenhum existir).C
: A contagem de tokens no último bloco cache_control
.B
e/ou C
forem maiores que A
, eles necessariamente serão falhas de cache, porque A
é o acerto de cache mais alto.A
.(B - A)
.(C - B)
.Exemplo de cache de contexto grande
input_tokens
: Número de tokens apenas na mensagem do usuáriocache_creation_input_tokens
: Número de tokens em toda a mensagem do sistema, incluindo o documento legalcache_read_input_tokens
: 0 (nenhum acerto de cache na primeira solicitação)input_tokens
: Número de tokens apenas na mensagem do usuáriocache_creation_input_tokens
: 0 (nenhuma nova criação de cache)cache_read_input_tokens
: Número de tokens em toda a mensagem do sistema em cacheCache de definições de ferramentas
cache_control
é colocado na ferramenta final (get_time
) para designar todas as ferramentas como parte do prefixo estático.Isso significa que todas as definições de ferramentas, incluindo get_weather
e quaisquer outras ferramentas definidas antes de get_time
, serão armazenadas em cache como um único prefixo.Esta abordagem é útil quando você tem um conjunto consistente de ferramentas que deseja reutilizar em múltiplas solicitações sem reprocessá-las a cada vez.Para a primeira solicitação:input_tokens
: Número de tokens na mensagem do usuáriocache_creation_input_tokens
: Número de tokens em todas as definições de ferramentas e prompt do sistemacache_read_input_tokens
: 0 (nenhum acerto de cache na primeira solicitação)input_tokens
: Número de tokens na mensagem do usuáriocache_creation_input_tokens
: 0 (nenhuma nova criação de cache)cache_read_input_tokens
: Número de tokens em todas as definições de ferramentas em cache e prompt do sistemaContinuando uma conversa de múltiplas rodadas
cache_control
para que a conversa possa ser armazenada em cache incrementalmente. O sistema automaticamente procurará e usará o prefixo mais longo previamente armazenado em cache para mensagens de acompanhamento. Ou seja, blocos que foram previamente marcados com um bloco cache_control
posteriormente não são marcados com isso, mas ainda serão considerados um acerto de cache (e também uma atualização de cache!) se forem atingidos dentro de 5 minutos.Além disso, note que o parâmetro cache_control
é colocado na mensagem do sistema. Isso é para garantir que se isso for removido do cache (após não ser usado por mais de 5 minutos), será adicionado de volta ao cache na próxima solicitação.Esta abordagem é útil para manter contexto em conversas em andamento sem processar repetidamente a mesma informação.Quando isso é configurado adequadamente, você deve ver o seguinte na resposta de uso de cada solicitação:input_tokens
: Número de tokens na nova mensagem do usuário (será mínimo)cache_creation_input_tokens
: Número de tokens nas novas rodadas do assistente e usuáriocache_read_input_tokens
: Número de tokens na conversa até a rodada anteriorJuntando tudo: Múltiplos pontos de interrupção de cache
cache_control
na última definição de ferramenta armazena em cache todas as definições de ferramentas.
cache_control
para habilitar cache incremental da conversa conforme ela progride.
input_tokens
: Tokens na mensagem final do usuáriocache_creation_input_tokens
: Tokens em todos os segmentos em cache (ferramentas + instruções + documentos RAG + histórico de conversa)cache_read_input_tokens
: 0 (nenhum acerto de cache)input_tokens
: Tokens apenas na nova mensagem do usuáriocache_creation_input_tokens
: Quaisquer novos tokens adicionados ao histórico de conversacache_read_input_tokens
: Todos os tokens previamente armazenados em cache (ferramentas + instruções + documentos RAG + conversa anterior)Preciso de múltiplos pontos de interrupção de cache ou um no final é suficiente?
Pontos de interrupção de cache adicionam custo extra?
Qual é a duração do cache?
Quantos pontos de interrupção de cache posso usar?
cache_control
) em seu prompt.O cache de prompt está disponível para todos os modelos?
Como o cache de prompt funciona com pensamento estendido?
Como habilito o cache de prompt?
cache_control
em sua solicitação da API.Posso usar cache de prompt com outros recursos da API?
Como o cache de prompt afeta o preço?
Posso limpar manualmente o cache?
Como posso rastrear a efetividade da minha estratégia de cache?
cache_creation_input_tokens
e cache_read_input_tokens
na resposta da API.O que pode quebrar o cache?
Como o cache de prompt lida com privacidade e separação de dados?
cache_control
em qualquer lugar em seus prompts. Para eficiência de custo, é melhor excluir partes altamente variáveis (ex., entrada arbitrária do usuário) do cache.
Posso usar cache de prompt com a API Batches?
Por que estou vendo o erro `AttributeError: 'Beta' object has no attribute 'prompt_caching'` em Python?
Por que estou vendo 'TypeError: Cannot read properties of undefined (reading 'messages')'?