Loading...
    • Guía para desarrolladores
    • Referencia de API
    • MCP
    • Recursos
    • Notas de la versión
    Search...
    ⌘K
    Primeros pasos
    Introducción a ClaudeInicio rápido
    Modelos y precios
    Descripción general de modelosElegir un modeloNovedades en Claude 4.6Guía de migraciónModelos deprecadosPrecios
    Crear con Claude
    Descripción general de característicasUsar la API de MessagesManejar razones de paradaMejores prácticas de prompting
    Gestión de contexto
    Ventanas de contextoCompactaciónEdición de contexto
    Capacidades
    Almacenamiento en caché de promptsPensamiento extendidoPensamiento adaptativoEsfuerzoStreaming de MessagesProcesamiento por lotesCitasSoporte multilingüeConteo de tokensEmbeddingsVisiónSoporte de PDFAPI de FilesResultados de búsquedaSalidas estructuradas
    Herramientas
    Descripción generalCómo implementar el uso de herramientasStreaming de herramientas de grano finoHerramienta BashHerramienta de ejecución de códigoLlamada de herramientas programáticaHerramienta de uso de computadoraHerramienta de editor de textoHerramienta de búsqueda webHerramienta de búsqueda webHerramienta de memoriaHerramienta de búsqueda de herramientas
    Agent Skills
    Descripción generalInicio rápidoMejores prácticasSkills para empresasUsar Skills con la API
    Agent SDK
    Descripción generalInicio rápidoSDK de TypeScriptTypeScript V2 (vista previa)SDK de PythonGuía de migración
    Entrada de streamingTransmitir respuestas en tiempo realManejar razones de paradaManejar permisosAprobaciones de usuario e entradaControlar la ejecución con hooksGestión de sesionesPunto de control de archivosSalidas estructuradas en el SDKAlojar el Agent SDKDesplegar agentes de IA de forma seguraModificar prompts del sistemaMCP en el SDKHerramientas personalizadasSubagentes en el SDKComandos de barra en el SDKAgent Skills en el SDKRastrear costos y usoListas de tareasPlugins en el SDK
    MCP en la API
    Conector MCPServidores MCP remotos
    Claude en plataformas de terceros
    Amazon BedrockMicrosoft FoundryVertex AI
    Ingeniería de prompts
    Descripción generalGenerador de promptsUsar plantillas de promptsMejorador de promptsSer claro y directoUsar ejemplos (prompting multishot)Dejar que Claude piense (CoT)Usar etiquetas XMLDar a Claude un rol (prompts del sistema)Encadenar prompts complejosConsejos de contexto largoConsejos de pensamiento extendido
    Probar y evaluar
    Definir criterios de éxitoDesarrollar casos de pruebaUsar la herramienta de evaluaciónReducir latencia
    Fortalecer protecciones
    Reducir alucinacionesAumentar consistencia de salidaMitigar ataques de jailbreakRechazos de streamingReducir fuga de promptsMantener a Claude en personaje
    Administración y monitoreo
    Descripción general de Admin APIResidencia de datosEspacios de trabajoAPI de uso y costosAPI de Claude Code AnalyticsRetención de datos cero
    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
    Guías

    Manejo de razones de parada

    Detecta rechazos y otras razones de parada directamente desde mensajes de resultado en el Agent SDK

    El campo stop_reason en los mensajes de resultado te indica por qué el modelo dejó de generar. Esta es la forma recomendada de detectar rechazos, límites de tokens máximos y otras condiciones de terminación (no se requiere análisis de flujo).

    stop_reason está disponible en cada ResultMessage, independientemente de si el streaming está habilitado. No necesitas establecer include_partial_messages (Python) o includePartialMessages (TypeScript).

    Lectura de stop_reason

    El campo stop_reason está presente tanto en mensajes de resultado exitosos como en mensajes de error. Verifica después de iterar a través del flujo de mensajes:

    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())

    Razones de parada disponibles

    Razón de paradaSignificado
    end_turnEl modelo terminó de generar su respuesta normalmente.
    max_tokensLa respuesta alcanzó el límite máximo de tokens de salida.
    stop_sequenceEl modelo generó una secuencia de parada configurada.
    refusalEl modelo rechazó cumplir con la solicitud.
    tool_useLa salida final del modelo fue una llamada de herramienta. Esto es poco común en resultados de SDK porque las llamadas de herramienta normalmente se ejecutan antes de que se devuelva el resultado.
    nullNo se recibió respuesta de la API; por ejemplo, ocurrió un error antes de la primera solicitud, o el resultado se reprodujo desde una sesión en caché.

    Razones de parada en resultados de error

    Los resultados de error (como error_max_turns o error_during_execution) también llevan stop_reason. El valor refleja el último mensaje del asistente recibido antes de que ocurriera el error:

    Variante de resultadovalor de stop_reason
    successLa razón de parada del mensaje final del asistente.
    error_max_turnsLa razón de parada del último mensaje del asistente antes de que se alcanzara el límite de turnos.
    error_max_budget_usdLa razón de parada del último mensaje del asistente antes de que se excediera el presupuesto.
    error_max_structured_output_retriesLa razón de parada del último mensaje del asistente antes de que se alcanzara el límite de reintentos.
    error_during_executionLa última razón de parada vista, o null si el error ocurrió antes de cualquier respuesta de la 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())

    Detección de rechazos

    stop_reason === "refusal" es la forma más simple de detectar cuándo el modelo rechaza una solicitud. Anteriormente, detectar rechazos requería habilitar el streaming de mensajes parciales y escanear manualmente los mensajes StreamEvent para eventos message_delta. Con stop_reason en el mensaje de resultado, puedes verificar directamente:

    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óximos pasos

    • Transmitir respuestas en tiempo real: accede a eventos de API sin procesar incluyendo message_delta a medida que llegan
    • Salidas estructuradas: obtén respuestas JSON tipadas del agente
    • Seguimiento de costos y uso: comprende el uso de tokens y la facturación desde mensajes de resultado

    Was this page helpful?

    • Lectura de stop_reason
    • Razones de parada disponibles
    • Razones de parada en resultados de error
    • Detección de rechazos
    • Próximos pasos