• Mensagens
  • Agentes Gerenciados
  • Administração
Search...
⌘K
Primeiros passos
Introdução ao ClaudeInício rápido
Desenvolvendo com o Claude
Visão geral dos recursosUsando a API de MensagensMotivos de parada e fallbackRecusas e fallbackCrédito de fallback
Capacidades do modelo
Pensamento estendidoPensamento adaptativoEsforçoOrçamentos de tarefas (beta)Modo rápido (prévia de pesquisa)Saídas estruturadasCitaçõesStreaming de MensagensProcessamento em loteResultados de pesquisaStreaming de recusasSuporte multilíngueEmbeddings
Ferramentas
Visão geralComo funciona o uso de ferramentasTutorial: Crie um agente com uso de ferramentasDefinir ferramentasLidar com chamadas de ferramentasUso de ferramentas em paraleloTool Runner (SDK)Uso de ferramentas estritoUso de ferramentas com cache de promptFerramentas de servidorSolução de problemasFerramenta de pesquisa na webFerramenta de busca na webFerramenta de execução de códigoFerramenta de consultoriaFerramenta de memóriaFerramenta BashFerramenta de uso de computadorFerramenta de editor de texto
Infraestrutura de ferramentas
Referência de ferramentasGerenciar contexto de ferramentasCombinações de ferramentasPesquisa de ferramentasChamada programática de ferramentasStreaming granular de ferramentas
Gerenciamento de contexto
Janelas de contextoCompactaçãoEdição de contextoCache de promptMensagens de sistema no meio da conversaCriar um modo de orquestraçãoDiagnóstico de cache (beta)Contagem de tokens
Trabalhando com arquivos
API de ArquivosSuporte a PDFImagens e visão
Skills
Visão geralInício rápidoPráticas recomendadasSkills para empresasSkills na API
MCP
Servidores MCP remotosConector MCP
Claude em plataformas de nuvem
Amazon BedrockAmazon Bedrock (legado)Claude Platform na AWSMicrosoft FoundryVertex AI
Log in
Diagnóstico de cache (beta)
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
Mensagens/Gerenciamento de contexto

Diagnóstico de cache

Diagnostique falhas inesperadas no cache de prompt comparando requisições consecutivas e identificando exatamente onde o prefixo do prompt divergiu.

Este recurso se qualifica para Zero Data Retention (ZDR) com retenção técnica limitada. Consulte a seção Retenção de dados para detalhes sobre o que é retido e por quê.

O cache de prompt reduz significativamente a latência e o custo, mas apenas quando o início do seu prompt é idêntico byte a byte a uma requisição recente. Uma ferramenta reordenada, um timestamp interpolado no seu prompt do sistema ou uma edição em uma mensagem anterior podem invalidar o cache silenciosamente. Sem o diagnóstico de cache, o único sinal é usage.cache_read_input_tokens caindo para zero, sem nenhuma indicação do que mudou.

O diagnóstico de cache preenche essa lacuna. Passe o id da sua resposta anterior, e a API compara as duas requisições e informa onde elas divergiram (o modelo, o prompt do sistema, as ferramentas ou o histórico de mensagens) para que você possa corrigir a causa raiz em vez de adivinhar.

O diagnóstico de cache está em beta. Inclua o cabeçalho beta cache-diagnosis-2026-04-07 nas suas requisições de API para usar este recurso.

O diagnóstico de cache está atualmente disponível apenas na API do Claude. Não é compatível com Amazon Bedrock ou Vertex AI.

Como o diagnóstico de cache funciona

Quando o cabeçalho beta está presente, a API armazena uma impressão digital (fingerprint) leve de cada requisição, indexada pelo id da resposta. Na sua próxima requisição, inclua esse id como diagnostics.previous_message_id. A API reconstrói a impressão digital para a nova requisição, compara-a com a armazenada e anexa um objeto diagnostics à resposta descrevendo o primeiro ponto de divergência.

A comparação diz respeito à estrutura da requisição, independentemente de o cache ter sido efetivamente aproveitado. Consulte Lendo o diagnóstico junto com o uso para saber como combinar o resultado de diagnostics com usage.cache_read_input_tokens.

As impressões digitais contêm apenas hashes e estimativas de contagem de tokens (nunca o conteúdo bruto do prompt), são retidas por tempo limitado, têm escopo restrito à sua organização e workspace, e não são usadas para nenhum outro propósito.

Uso básico

Envie o cabeçalho beta em cada turno. No primeiro turno, passe "previous_message_id": null para aderir ao recurso sem uma mensagem anterior para comparar. Nos turnos subsequentes, passe o id da resposta anterior.

Streaming

Em respostas com streaming, diagnostics aparece no evento message_start.

O evento message_start carrega o campo diagnostics completo; consulte Formato da resposta para os valores possíveis.

Encadeando o diagnóstico em um loop de conversa

Em uma conversa de múltiplos turnos, propague o id da resposta mais recente como previous_message_id em cada turno. A primeira iteração passa null para aderir ao recurso; cada iteração subsequente passa o id da resposta anterior.

Formato da resposta

O campo diagnostics na Message de resposta tem quatro estados possíveis:

ValorSignificado
campo ausenteA requisição não incluiu diagnostics, ou o cabeçalho beta estava ausente.
nullOu previous_message_id era null (primeiro turno, nada para comparar), ou uma comparação foi executada e não encontrou divergência.
{"cache_miss_reason": null}A comparação ainda estava em execução quando a resposta foi serializada. Isso pode acontecer quando a resposta começa muito rapidamente. Trate como inconclusivo e verifique o próximo turno.
{"cache_miss_reason": {...}}Um cache_miss_reason está anexado. Para tipos *_changed, isso identifica o primeiro ponto de divergência; previous_message_not_found e unavailable são casos em que nenhuma comparação foi produzida.

Quando cache_miss_reason não é nulo, ele tem esta aparência:

{
  "id": "msg_01Xyz...",
  "type": "message",
  "role": "assistant",
  "content": [{ "type": "text", "text": "..." }],
  "usage": {
    "input_tokens": 42,
    "cache_read_input_tokens": 0,
    "cache_creation_input_tokens": 41850,
    "output_tokens": 210
  },
  "diagnostics": {
    "cache_miss_reason": {
      "type": "system_changed",
      "cache_missed_input_tokens": 41850
    }
  }
}

Tipos de motivo de falha de cache

cache_miss_reason é uma união discriminada em type. A resposta reporta apenas a divergência mais antiga, então corrija-a primeiro; divergências posteriores podem estar ocultas atrás dela.

TipoO que significaO que mudar
model_changedO model difere da requisição anterior (por exemplo, um roteador, teste A/B ou fallback selecionou um modelo diferente). O cache é por modelo.Mantenha o modelo constante dentro de uma conversa em cache.
system_changedO parâmetro system difere. Normalmente um timestamp, ID de requisição ou outro valor por requisição foi interpolado no prompt do sistema.Torne o prompt do sistema uma constante estável em bytes e mova dados dinâmicos para a primeira mensagem user após o seu ponto de quebra de cache.
tools_changedO array tools difere: ferramentas foram adicionadas, removidas ou reordenadas entre turnos, ou o JSON de input_schema da ferramenta foi serializado de forma não determinística.Envie a mesma lista de ferramentas em cada turno em uma ordem fixa com schemas serializados deterministicamente (por exemplo, ordene as chaves).

Os quatro tipos *_changed também carregam um inteiro cache_missed_input_tokens: uma estimativa de quantos tokens de entrada ficaram após o ponto de divergência, dando uma noção de quanto prefixo cacheável foi perdido. Ele é derivado de comprimentos em bytes antes da tokenização, então trate-o como um indicador de magnitude em vez de um número de faturamento. Ele pode diferir de (e ocasionalmente exceder) usage.input_tokens.

Lendo o diagnóstico junto com o uso

diagnostics responde "minha requisição mudou?", enquanto usage.cache_read_input_tokens responde "o cache foi aproveitado?". Combiná-los indica onde procurar.

Esta matriz se aplica a turnos em que você passou um previous_message_id real. No primeiro turno (previous_message_id: null), diagnostics é sempre null e cache_read_input_tokens é normalmente zero porque o cache está sendo escrito, não lido; nenhuma solução de problemas é necessária. A matriz também não se aplica quando cache_miss_reason é null (a comparação ainda está pendente; verifique o próximo turno) ou quando seu type é previous_message_not_found ou unavailable (nenhuma comparação foi produzida).

Resultado do diagnósticoTokens de leitura de cacheInterpretação
nullaltoFuncionando como esperado. Seu prefixo está estável e o cache foi aproveitado.
nullbaixo ou zeroSuas requisições coincidem, mas a entrada de cache não estava mais disponível. Considere reduzir os intervalos entre turnos ou usar o TTL de cache de 1 hora.
cache_miss_reason é um tipo *_changedbaixo ou zeroBug seu. A requisição mudou; corrija a causa indicada por type.
cache_miss_reason é um tipo *_changedaltoRaro. Uma mudança ocorreu tarde no prompt, mas um ponto de quebra cache_control anterior ainda foi aproveitado. Vale a pena corrigir, mas com baixo impacto.

Limitações

  • Beta: Nomes de campos e semântica podem mudar antes da disponibilidade geral.
  • Apenas API do Claude: Não disponível no Amazon Bedrock ou Vertex AI.
  • Retenção limitada: Impressões digitais para consulta de previous_message_id expiram após um curto período. Execute comparações de diagnóstico entre requisições próximas no tempo.
  • Mesmo workspace: A requisição anterior deve ter sido feita com uma chave de API da mesma organização e workspace.
  • Horizonte de comparação: Para conversas muito longas em que a única mudança está no fundo da lista de mensagens, a resposta pode ser unavailable em vez de uma localização precisa.
  • Melhor esforço: O diagnóstico nunca bloqueia ou faz sua requisição falhar. Se informações de diagnóstico não estiverem disponíveis, a resposta retorna unavailable, ou cache_miss_reason: null quando a comparação ainda estava em execução.

Retenção de dados

O diagnóstico de cache é elegível para ZDR (qualificado). A Anthropic não armazena o texto bruto dos seus prompts ou das saídas do Claude para este recurso.

A impressão digital armazenada para cada requisição consiste apenas em hashes criptográficos e estimativas de contagem de tokens, indexada pelo id da resposta e com escopo restrito à sua organização e workspace. As impressões digitais expiram após um curto período e não são usadas para nenhum outro propósito.

Para elegibilidade ZDR em todos os recursos, consulte API e retenção de dados.

Veja também

  • Cache de prompt
  • Contagem de tokens
  • Cabeçalhos beta

Was this page helpful?

  • Como o diagnóstico de cache funciona
  • Uso básico
  • Streaming
  • Encadeando o diagnóstico em um loop de conversa
  • Formato da resposta
  • Tipos de motivo de falha de cache
  • Lendo o diagnóstico junto com o uso
  • Limitações
  • Retenção de dados
  • Veja também
client = anthropic.Anthropic()

SYSTEM = "You are an AI assistant analyzing a large document. <document>...</document>"

# Turno 1: ativar com previous_message_id=None
r1 = client.beta.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    cache_control={"type": "ephemeral"},
    system=SYSTEM,
    messages=[{"role": "user", "content": "Summarize section 1."}],
    diagnostics={"previous_message_id": None},
    betas=["cache-diagnosis-2026-04-07"],
)

# Turno 2: referenciar o id da resposta anterior
r2 = client.beta.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    cache_control={"type": "ephemeral"},
    system=SYSTEM,
    messages=[
        {"role": "user", "content": "Summarize section 1."},
        {"role": "assistant", "content": r1.content},
        {"role": "user", "content": "Now summarize section 2."},
    ],
    diagnostics={"previous_message_id": r1.id},
    betas=["cache-diagnosis-2026-04-07"],
)

diagnostics = r2.diagnostics
if diagnostics is None:
    print("No divergence detected.")
elif diagnostics.cache_miss_reason is None:
    print("Comparison still pending.")
else:
    print(f"cache_miss_reason: {diagnostics.cache_miss_reason.type}")
# Turno 2: fazer streaming, referenciando o id da resposta anterior
with client.beta.messages.stream(
    model="claude-opus-4-8",
    max_tokens=1024,
    cache_control={"type": "ephemeral"},
    system=SYSTEM,
    messages=[
        {"role": "user", "content": "Summarize section 1."},
        {"role": "assistant", "content": r1.content},
        {"role": "user", "content": "Now summarize section 2."},
    ],
    diagnostics={"previous_message_id": r1.id},
    betas=["cache-diagnosis-2026-04-07"],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
    print()
    r2 = stream.get_final_message()

diagnostics = r2.diagnostics
if diagnostics is None:
    print("No divergence detected.")
elif diagnostics.cache_miss_reason is None:
    print("Comparison still pending.")
else:
    print(f"cache_miss_reason: {diagnostics.cache_miss_reason.type}")
messages_changedO modelo, o sistema e as ferramentas coincidem, mas uma entrada anterior em messages foi alterada, reordenada ou removida em vez de apenas acrescentada. Normalmente o histórico da conversa foi truncado ou editado, ou turnos do assistente e blocos tool_result foram re-serializados de forma diferente no reenvio.Trate o histórico como somente de acréscimo (append-only); ecoe o content do assistente e os resultados de ferramentas de volta literalmente.
previous_message_not_foundNão existe impressão digital armazenada para o previous_message_id fornecido. Isso não é evidência de que sua requisição mudou. Normalmente a requisição anterior não carregava o cabeçalho beta, veio de um workspace diferente, ou passou tempo demais desde que foi enviada.Envie o cabeçalho beta em cada turno e mantenha turnos consecutivos próximos no tempo.
unavailableInformações de diagnóstico não estavam disponíveis para esta requisição. Isso inclui o caso em que model, system e tools coincidem, mas outro parâmetro de requisição que afeta o prompt (tool_choice, thinking, context_management, output_config, output_format ou o conjunto de cabeçalhos anthropic-beta ativos) difere, e conversas muito longas em que a divergência está além do horizonte de comparação. Sua requisição foi processada normalmente.Mantenha constantes os parâmetros de requisição que afetam o prompt durante toda a vida de uma conversa em cache. Se persistir, aplique as verificações manuais em Solução de problemas comuns na página de cache de prompt.