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
    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
    Capacidades

    Salidas estructuradas

    Obtén resultados JSON validados de flujos de trabajo de agentes

    Las salidas estructuradas restringen las respuestas de Claude para seguir un esquema específico, asegurando una salida válida y analizable para el procesamiento posterior. Hay dos características complementarias disponibles:

    • Salidas JSON (output_config.format): Obtén la respuesta de Claude en un formato JSON específico
    • Uso estricto de herramientas (strict: true): Garantiza validación de esquema en nombres de herramientas e entradas

    El parámetro output_format se ha movido a output_config.format. El parámetro antiguo output_format aún funciona temporalmente pero está deprecado y se eliminará en una versión futura de la API. Actualiza tu código para usar output_config: {format: {...}} en su lugar.

    Estas características se pueden usar de forma independiente o juntas en la misma solicitud.

    Las salidas estructuradas están disponibles en general en la API de Claude y Amazon Bedrock para Claude Opus 4.6, Claude Sonnet 4.5, Claude Opus 4.5 y Claude Haiku 4.5. Las salidas estructuradas permanecen en beta pública en Microsoft Foundry.

    ¿Migrando desde beta? El parámetro output_format se ha movido a output_config.format, y los encabezados beta ya no son necesarios. El encabezado beta antiguo (structured-outputs-2025-11-13) y el parámetro output_format continuarán funcionando durante un período de transición. Consulta los ejemplos de código a continuación para la forma de API actualizada.

    Por qué usar salidas estructuradas

    Sin salidas estructuradas, Claude puede generar respuestas JSON malformadas o entradas de herramientas inválidas que rompan tus aplicaciones. Incluso con indicaciones cuidadosas, puedes encontrar:

    • Errores de análisis de sintaxis JSON inválida
    • Campos requeridos faltantes
    • Tipos de datos inconsistentes
    • Violaciones de esquema que requieren manejo de errores y reintentos

    Las salidas estructuradas garantizan respuestas conformes al esquema mediante decodificación restringida:

    • Siempre válidas: Sin más errores de JSON.parse()
    • Seguras de tipo: Tipos de campo garantizados y campos requeridos
    • Confiables: Sin reintentos necesarios para violaciones de esquema

    Salidas JSON

    Las salidas JSON controlan el formato de respuesta de Claude, asegurando que Claude devuelva JSON válido que coincida con tu esquema. Usa salidas JSON cuando necesites:

    • Controlar el formato de respuesta de Claude
    • Extraer datos de imágenes o texto
    • Generar informes estructurados
    • Formatear respuestas de API

    Inicio rápido

    curl https://api.anthropic.com/v1/messages \
      -H "content-type: application/json" \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "claude-opus-4-6",
        "max_tokens": 1024,
        "messages": [
          {
            "role": "user",
            "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
          }
        ],
        "output_config": {
          "format": {
            "type": "json_schema",
            "schema": {
              "type": "object",
              "properties": {
                "name": {"type": "string"},
                "email": {"type": "string"},
                "plan_interest": {"type": "string"},
                "demo_requested": {"type": "boolean"}
              },
              "required": ["name", "email", "plan_interest", "demo_requested"],
              "additionalProperties": false
            }
          }
        }
      }'

    Formato de respuesta: JSON válido que coincide con tu esquema en response.content[0].text

    {
      "name": "John Smith",
      "email": "[email protected]",
      "plan_interest": "Enterprise",
      "demo_requested": true
    }

    Cómo funciona

    1. 1

      Define tu esquema JSON

      Crea un esquema JSON que describa la estructura que deseas que Claude siga. El esquema utiliza el formato estándar de JSON Schema con algunas limitaciones (consulta limitaciones de JSON Schema).

    2. 2

      Añade el parámetro output_config.format

      Incluye el parámetro output_config.format en tu solicitud de API con type: "json_schema" y tu definición de esquema.

    3. 3

      Analiza la respuesta

      La respuesta de Claude será JSON válido que coincida con tu esquema, devuelto en response.content[0].text.

    Trabajar con salidas JSON en SDKs

    Los SDKs de Python y TypeScript proporcionan ayudantes que facilitan el trabajo con salidas JSON, incluyendo transformación de esquema, validación automática e integración con bibliotecas de esquema populares.

    Los métodos auxiliares del SDK (como .parse() e integración con Pydantic/Zod) aún aceptan output_format como parámetro de conveniencia. El SDK maneja la traducción a output_config.format internamente. Los ejemplos a continuación muestran la sintaxis del ayudante del SDK.

    Usar Pydantic y Zod

    Para desarrolladores de Python y TypeScript, puedes usar herramientas familiares de definición de esquema como Pydantic y Zod en lugar de escribir esquemas JSON sin procesar.

    from pydantic import BaseModel
    from anthropic import Anthropic, transform_schema
    
    class ContactInfo(BaseModel):
        name: str
        email: str
        plan_interest: str
        demo_requested: bool
    
    client = Anthropic()
    
    # With .create() - requires transform_schema()
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
            }
        ],
        output_config={
            "format": {
                "type": "json_schema",
                "schema": transform_schema(ContactInfo),
            }
        }
    )
    
    print(response.content[0].text)
    
    # With .parse() - can pass Pydantic model directly
    response = client.messages.parse(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
            }
        ],
        output_format=ContactInfo,
    )
    
    print(response.parsed_output)

    Métodos específicos del SDK

    Python: client.messages.parse() (Recomendado)

    El método parse() transforma automáticamente tu modelo Pydantic, valida la respuesta y devuelve un atributo parsed_output.

    Python: ayudante transform_schema()

    Para cuando necesites transformar manualmente esquemas antes de enviar, o cuando quieras modificar un esquema generado por Pydantic. A diferencia de client.messages.parse(), que transforma esquemas proporcionados automáticamente, esto te da el esquema transformado para que puedas personalizarlo aún más.

    Cómo funciona la transformación del SDK

    Tanto los SDKs de Python como de TypeScript transforman automáticamente esquemas con características no soportadas:

    1. Elimina restricciones no soportadas (por ejemplo, minimum, maximum, minLength, maxLength)
    2. Actualiza descripciones con información de restricciones (por ejemplo, "Debe ser al menos 100"), cuando la restricción no es directamente soportada con salidas estructuradas
    3. Añade additionalProperties: false a todos los objetos
    4. Filtra formatos de cadena a lista soportada solo
    5. Valida respuestas contra tu esquema original (con todas las restricciones)

    Esto significa que Claude recibe un esquema simplificado, pero tu código aún refuerza todas las restricciones mediante validación.

    Ejemplo: Un campo Pydantic con minimum: 100 se convierte en un entero simple en el esquema enviado, pero la descripción se actualiza a "Debe ser al menos 100", y el SDK valida la respuesta contra la restricción original.

    Casos de uso comunes

    Uso estricto de herramientas

    El uso estricto de herramientas valida parámetros de herramientas, asegurando que Claude llame a tus funciones con argumentos correctamente tipados. Usa uso estricto de herramientas cuando necesites:

    • Validar parámetros de herramientas
    • Construir flujos de trabajo de agentes
    • Garantizar llamadas de función seguras de tipo
    • Manejar herramientas complejas con propiedades anidadas

    Por qué el uso estricto de herramientas es importante para agentes

    Construir sistemas de agentes confiables requiere conformidad de esquema garantizada. Sin modo estricto, Claude podría devolver tipos incompatibles ("2" en lugar de 2) o campos requeridos faltantes, rompiendo tus funciones y causando errores en tiempo de ejecución.

    El uso estricto de herramientas garantiza parámetros seguros de tipo:

    • Las funciones reciben argumentos correctamente tipados cada vez
    • No hay necesidad de validar y reintentar llamadas de herramientas
    • Agentes listos para producción que funcionan consistentemente a escala

    Por ejemplo, supongamos que un sistema de reservas necesita passengers: int. Sin modo estricto, Claude podría proporcionar passengers: "two" o passengers: "2". Con strict: true, la respuesta siempre contendrá passengers: 2.

    Inicio rápido

    curl https://api.anthropic.com/v1/messages \
      -H "content-type: application/json" \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "claude-opus-4-6",
        "max_tokens": 1024,
        "messages": [
          {"role": "user", "content": "What is the weather in San Francisco?"}
        ],
        "tools": [{
          "name": "get_weather",
          "description": "Get the current weather in a given location",
          "strict": true,
          "input_schema": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA"
              },
              "unit": {
                "type": "string",
                "enum": ["celsius", "fahrenheit"]
              }
            },
            "required": ["location"],
            "additionalProperties": false
          }
        }]
      }'

    Formato de respuesta: Bloques de uso de herramientas con entradas validadas en response.content[x].input

    {
      "type": "tool_use",
      "name": "get_weather",
      "input": {
        "location": "San Francisco, CA"
      }
    }

    Garantías:

    • La entrada de la herramienta sigue estrictamente el input_schema
    • El nombre de la herramienta siempre es válido (de herramientas proporcionadas o herramientas del servidor)

    Cómo funciona

    1. 1

      Define tu esquema de herramienta

      Crea un esquema JSON para el input_schema de tu herramienta. El esquema utiliza el formato estándar de JSON Schema con algunas limitaciones (consulta limitaciones de JSON Schema).

    2. 2

      Añade strict: true

      Establece "strict": true como una propiedad de nivel superior en tu definición de herramienta, junto a name, description e input_schema.

    3. 3

      Maneja llamadas de herramientas

      Cuando Claude usa la herramienta, el campo input en el bloque tool_use seguirá estrictamente tu input_schema, y el name siempre será válido.

    Casos de uso comunes

    Usar ambas características juntas

    Las salidas JSON y el uso estricto de herramientas resuelven problemas diferentes y se pueden usar juntas:

    • Salidas JSON controlan el formato de respuesta de Claude (lo que Claude dice)
    • Uso estricto de herramientas valida parámetros de herramientas (cómo Claude llama a tus funciones)

    Cuando se combinan, Claude puede llamar a herramientas con parámetros garantizados válidos Y devolver respuestas JSON estructuradas. Esto es útil para flujos de trabajo de agentes donde necesitas tanto llamadas de herramientas confiables como salidas finales estructuradas.

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[{"role": "user", "content": "Help me plan a trip to Paris for next month"}],
        # JSON outputs: structured response format
        output_config={
            "format": {
                "type": "json_schema",
                "schema": {
                    "type": "object",
                    "properties": {
                        "summary": {"type": "string"},
                        "next_steps": {"type": "array", "items": {"type": "string"}}
                    },
                    "required": ["summary", "next_steps"],
                    "additionalProperties": False
                }
            }
        },
        # Strict tool use: guaranteed tool parameters
        tools=[{
            "name": "search_flights",
            "strict": True,
            "input_schema": {
                "type": "object",
                "properties": {
                    "destination": {"type": "string"},
                    "date": {"type": "string", "format": "date"}
                },
                "required": ["destination", "date"],
                "additionalProperties": False
            }
        }]
    )

    Consideraciones importantes

    Compilación de gramática y almacenamiento en caché

    Las salidas estructuradas utilizan muestreo restringido con artefactos de gramática compilados. Esto introduce algunas características de rendimiento a tener en cuenta:

    • Latencia de primera solicitud: La primera vez que uses un esquema específico, habrá latencia adicional mientras se compila la gramática
    • Almacenamiento en caché automático: Las gramáticas compiladas se almacenan en caché durante 24 horas desde el último uso, haciendo que las solicitudes posteriores sean mucho más rápidas
    • Invalidación de caché: El caché se invalida si cambias:
      • La estructura del esquema JSON
      • El conjunto de herramientas en tu solicitud (cuando se usan tanto salidas estructuradas como uso de herramientas)
      • Cambiar solo campos name o description no invalida el caché

    Modificación de indicaciones y costos de tokens

    Cuando usas salidas estructuradas, Claude recibe automáticamente una indicación de sistema adicional explicando el formato de salida esperado. Esto significa:

    • Tu recuento de tokens de entrada será ligeramente mayor
    • La indicación inyectada te cuesta tokens como cualquier otra indicación de sistema
    • Cambiar el parámetro output_config.format invalidará cualquier caché de indicaciones para ese hilo de conversación

    Limitaciones de JSON Schema

    Las salidas estructuradas soportan JSON Schema estándar con algunas limitaciones. Tanto las salidas JSON como el uso estricto de herramientas comparten estas limitaciones.

    Los SDKs de Python y TypeScript pueden transformar automáticamente esquemas con características no soportadas eliminándolas y añadiendo restricciones a descripciones de campos. Consulta métodos específicos del SDK para detalles.

    Salidas inválidas

    Aunque las salidas estructuradas garantizan conformidad de esquema en la mayoría de los casos, hay escenarios donde la salida podría no coincidir con tu esquema:

    Rechazos (stop_reason: "refusal")

    Claude mantiene sus propiedades de seguridad y utilidad incluso cuando usa salidas estructuradas. Si Claude rechaza una solicitud por razones de seguridad:

    • La respuesta tendrá stop_reason: "refusal"
    • Recibirás un código de estado 200
    • Se te cobrará por los tokens generados
    • La salida podría no coincidir con tu esquema porque el mensaje de rechazo tiene prioridad sobre las restricciones de esquema

    Límite de tokens alcanzado (stop_reason: "max_tokens")

    Si la respuesta se corta debido a alcanzar el límite de max_tokens:

    • La respuesta tendrá stop_reason: "max_tokens"
    • La salida podría estar incompleta y no coincidir con tu esquema
    • Reintenta con un valor max_tokens más alto para obtener la salida estructurada completa

    Errores de validación de esquema

    Si tu esquema usa características no soportadas o es demasiado complejo, recibirás un error 400:

    "Too many recursive definitions in schema"

    • Causa: El esquema tiene definiciones recursivas excesivas o cíclicas
    • Solución: Simplifica la estructura del esquema, reduce la profundidad de anidamiento

    "Schema is too complex"

    • Causa: El esquema excede los límites de complejidad
    • Solución: Divide en esquemas más pequeños, simplifica la estructura, o reduce el número de herramientas marcadas como strict: true

    Para problemas persistentes con esquemas válidos, contacta con soporte con tu definición de esquema.

    Compatibilidad de características

    Funciona con:

    • Procesamiento por lotes: Procesa salidas estructuradas a escala con descuento del 50%
    • Conteo de tokens: Cuenta tokens sin compilación
    • Streaming: Transmite salidas estructuradas como respuestas normales
    • Uso combinado: Usa salidas JSON (output_config.format) y uso estricto de herramientas (strict: true) juntos en la misma solicitud

    Incompatible con:

    • Citas: Las citas requieren intercalar bloques de citas con texto, lo que entra en conflicto con restricciones de esquema JSON estricto. Devuelve error 400 si las citas están habilitadas con output_config.format.
    • Prefijado de mensajes: Incompatible con salidas JSON

    Alcance de gramática: Las gramáticas se aplican solo a la salida directa de Claude, no a llamadas de uso de herramientas, resultados de herramientas o etiquetas de pensamiento (cuando se usa Pensamiento extendido). El estado de la gramática se reinicia entre secciones, permitiendo que Claude piense libremente mientras aún produce salida estructurada en la respuesta final.

    Was this page helpful?

    • Por qué usar salidas estructuradas
    • Salidas JSON
    • Inicio rápido
    • Cómo funciona
    • Trabajar con salidas JSON en SDKs
    • Casos de uso comunes
    • Uso estricto de herramientas
    • Por qué el uso estricto de herramientas es importante para agentes
    • Inicio rápido
    • Cómo funciona
    • Casos de uso comunes
    • Usar ambas características juntas
    • Consideraciones importantes
    • Compilación de gramática y almacenamiento en caché
    • Modificación de indicaciones y costos de tokens
    • Limitaciones de JSON Schema
    • Salidas inválidas
    • Errores de validación de esquema
    • Compatibilidad de características