Loading...
    • Guia do Desenvolvedor
    • Referência da API
    • MCP
    • Recursos
    • Notas de lançamento
    Search...
    ⌘K
    Primeiros passos
    Introdução ao ClaudeInício rápido
    Modelos e preços
    Visão geral dos modelosEscolhendo um modeloNovidades no Claude 4.6Guia de migraçãoDescontinuação de modelosPreços
    Construir com Claude
    Visão geral de recursosUsando a API MessagesTratando razões de paradaMelhores práticas de prompts
    Gerenciamento de contexto
    Janelas de contextoCompactaçãoEdição de contexto
    Capacidades
    Cache de promptsPensamento estendidoPensamento adaptativoEsforçoStreaming de mensagensProcessamento em loteCitaçõesSuporte multilíngueContagem de tokensEmbeddingsVisãoSuporte a PDFAPI de ArquivosResultados de pesquisaSaídas estruturadas
    Ferramentas
    Visão geralComo implementar o uso de ferramentasStreaming de ferramentas granularFerramenta BashFerramenta de execução de códigoChamada de ferramentas programáticaFerramenta de uso de computadorFerramenta de editor de textoFerramenta de busca na webFerramenta de pesquisa na webFerramenta de memóriaFerramenta de busca de ferramentas
    Habilidades de agente
    Visão geralInício rápidoMelhores práticasHabilidades para empresasUsando habilidades com a API
    Agent SDK
    Visão geralInício rápidoSDK TypeScriptTypeScript V2 (prévia)SDK PythonGuia de migração
    Entrada de streamingTransmitir respostas em tempo realTratando razões de paradaTratando permissõesAprovações de usuário e entradaControlar execução com hooksGerenciamento de sessãoPonto de verificação de arquivoSaídas estruturadas no SDKHospedando o Agent SDKImplantação segura de agentes de IAModificando prompts do sistemaMCP no SDKFerramentas personalizadasSubagentos no SDKComandos de barra no SDKHabilidades de agente no SDKRastreando custos e usoListas de tarefasPlugins no SDK
    MCP na API
    Conector MCPServidores MCP remotos
    Claude em plataformas de terceiros
    Amazon BedrockMicrosoft FoundryVertex AI
    Engenharia de prompts
    Visão geralGerador de promptsUsar modelos de promptsMelhorador de promptsSeja claro e diretoUse exemplos (prompting multishotshot)Deixe Claude pensar (CoT)Use tags XMLDê um papel ao Claude (prompts do sistema)Encadear prompts complexosDicas de contexto longoDicas de pensamento estendido
    Testar e avaliar
    Definir critérios de sucessoDesenvolver casos de testeUsando a ferramenta de avaliaçãoReduzindo latência
    Fortalecer proteções
    Reduzir alucinaçõesAumentar consistência de saídaMitigar jailbreaksRecusas de streamingReduzir vazamento de promptManter Claude em personagem
    Administração e monitoramento
    Visão geral da API AdminResidência de dadosEspaços de trabalhoAPI de uso e custoAPI de análise de código ClaudeRetenção zero de dados
    Console
    Log in
    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
    • Catalog
    • 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
    • Catalog
    • 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
    Guias

    Tratando razões de parada

    Detecte recusas e outras razões de parada diretamente de mensagens de resultado no Agent SDK

    O campo stop_reason em mensagens de resultado informa por que o modelo parou de gerar. Esta é a forma recomendada de detectar recusas, limites de token máximo e outras condições de encerramento (nenhuma análise de stream necessária).

    stop_reason está disponível em toda ResultMessage, independentemente de o streaming estar ativado. Você não precisa definir include_partial_messages (Python) ou includePartialMessages (TypeScript).

    Lendo stop_reason

    O campo stop_reason está presente em mensagens de resultado de sucesso e erro. Verifique-o após iterar pelo fluxo de mensagens:

    from claude_agent_sdk import query, ResultMessage
    import asyncio
    
    async def check_stop_reason():
        async for message in query(prompt="Write a poem about the ocean"):
            if isinstance(message, ResultMessage):
                print(f"Stop reason: {message.stop_reason}")
                if message.stop_reason == "refusal":
                    print("The model declined this request.")
    
    asyncio.run(check_stop_reason())

    Razões de parada disponíveis

    Razão de paradaSignificado
    end_turnO modelo terminou de gerar sua resposta normalmente.
    max_tokensA resposta atingiu o limite máximo de tokens de saída.
    stop_sequenceO modelo gerou uma sequência de parada configurada.
    refusalO modelo recusou cumprir a solicitação.
    tool_useA saída final do modelo foi uma chamada de ferramenta. Isto é incomum em resultados do SDK porque as chamadas de ferramenta são normalmente executadas antes do resultado ser retornado.
    nullNenhuma resposta da API foi recebida; por exemplo, um erro ocorreu antes da primeira solicitação, ou o resultado foi reproduzido de uma sessão em cache.

    Razões de parada em resultados de erro

    Resultados de erro (como error_max_turns ou error_during_execution) também carregam stop_reason. O valor reflete a última mensagem do assistente recebida antes do erro ocorrer:

    Variante de resultadovalor de stop_reason
    successA razão de parada da mensagem final do assistente.
    error_max_turnsA razão de parada da última mensagem do assistente antes do limite de turnos ser atingido.
    error_max_budget_usdA razão de parada da última mensagem do assistente antes do orçamento ser excedido.
    error_max_structured_output_retriesA razão de parada da última mensagem do assistente antes do limite de tentativas ser atingido.
    error_during_executionA última razão de parada vista, ou null se o erro ocorreu antes de qualquer resposta da API.
    from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
    import asyncio
    
    async def handle_max_turns():
        options = ClaudeAgentOptions(max_turns=3)
    
        async for message in query(prompt="Refactor this module", options=options):
            if isinstance(message, ResultMessage):
                if message.subtype == "error_max_turns":
                    print(f"Hit turn limit. Last stop reason: {message.stop_reason}")
                    # stop_reason might be "end_turn" or "tool_use"
                    # depending on what the model was doing when the limit hit
    
    asyncio.run(handle_max_turns())

    Detectando recusas

    stop_reason === "refusal" é a forma mais simples de detectar quando o modelo recusa uma solicitação. Anteriormente, detectar recusas exigia ativar o streaming de mensagens parciais e verificar manualmente mensagens StreamEvent para eventos message_delta. Com stop_reason na mensagem de resultado, você pode verificar diretamente:

    from claude_agent_sdk import query, ResultMessage
    import asyncio
    
    async def safe_query(prompt: str):
        async for message in query(prompt=prompt):
            if isinstance(message, ResultMessage):
                if message.stop_reason == "refusal":
                    print("Request was declined. Please revise your prompt.")
                    return None
                return message.result
        return None
    
    asyncio.run(safe_query("Summarize this article"))

    Próximas etapas

    • Transmitir respostas em tempo real: acesse eventos brutos da API incluindo message_delta conforme chegam
    • Saídas estruturadas: obtenha respostas JSON tipadas do agente
    • Rastreando custos e uso: entenda o uso de tokens e faturamento de mensagens de resultado

    Was this page helpful?

    • Lendo stop_reason
    • Razões de parada disponíveis
    • Razões de parada em resultados de erro
    • Detectando recusas
    • Próximas etapas