• Mensajes
  • Agentes gestionados
  • Administración

Search...
⌘K
Primeros pasos
Introducción a ClaudeInicio rápido
Desarrollar con Claude
Descripción general de funcionesUso de la API de MensajesMotivos de detención y respaldoRechazos y respaldoCrédito de respaldo
Capacidades del modelo
Pensamiento extendidoPensamiento adaptativoEsfuerzoPresupuestos de tareas (beta)Modo rápido (vista previa de investigación)Salidas estructuradasCitasStreaming de mensajesProcesamiento por lotesResultados de búsquedaStreaming de rechazosSoporte multilingüeEmbeddings
Herramientas
Descripción generalCómo funciona el uso de herramientasTutorial: Crear un agente que usa herramientasDefinir herramientasGestionar llamadas a herramientasUso de herramientas en paraleloTool Runner (SDK)Uso de herramientas estrictoUso de herramientas con almacenamiento en caché de promptsHerramientas de servidorSolución de problemasHerramienta de búsqueda webHerramienta de obtención webHerramienta de ejecución de códigoHerramienta de asesorHerramienta de memoriaHerramienta BashHerramienta de uso de computadoraHerramienta de editor de texto
Infraestructura de herramientas
Referencia de herramientasGestionar contexto de herramientasCombinaciones de herramientasBúsqueda de herramientasLlamadas programáticas a herramientasStreaming detallado de herramientas
Gestión de contexto
Ventanas de contextoCompactaciónEdición de contextoAlmacenamiento en caché de promptsMensajes del sistema a mitad de conversaciónCrear un modo de orquestaciónDiagnóstico de caché (beta)Conteo de tokens
Trabajar con archivos
API de archivosCompatibilidad con PDFImágenes y visión
Habilidades
Descripción generalInicio rápidoMejores prácticasHabilidades para empresasHabilidades en la API
MCP
Servidores MCP remotosConector MCP
Claude en plataformas en la nube
Amazon BedrockAmazon Bedrock (heredado)Claude Platform en AWSMicrosoft FoundryVertex AI

Log in
Salidas estructuradas
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
Mensajes/Capacidades del modelo

Salidas estructuradas

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

Was this page helpful?

  • Por qué usar salidas estructuradas
  • Salidas JSON
  • Inicio rápido
  • Cómo funciona
  • Trabajar con salidas JSON en los SDK
  • Casos de uso comunes
  • Uso estricto de herramientas
  • Usar ambas funcionalidades juntas
  • Consideraciones importantes
  • Compilación y almacenamiento en caché de gramáticas
  • Modificación de prompts y costos de tokens
  • Limitaciones de JSON Schema
  • Orden de las propiedades
  • Salidas inválidas
  • Límites de complejidad del esquema
  • Retención de datos
  • Compatibilidad de funcionalidades

Las salidas estructuradas restringen las respuestas de Claude para que sigan un esquema específico, garantizando una salida válida y analizable para el procesamiento posterior. Las salidas estructuradas proporcionan dos funcionalidades complementarias:

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

Puedes usar estas funcionalidades de forma independiente o juntas en la misma solicitud.



Las salidas estructuradas están disponibles de forma general en la API de Claude para Claude Opus 4.8, Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5, y Claude Haiku 4.5. En Amazon Bedrock, las salidas estructuradas están disponibles de forma general para Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5, y Claude Haiku 4.5; Claude Opus 4.7 y Claude Mythos Preview están disponibles a través de Claude en Amazon Bedrock (el endpoint de Bedrock con la API de Messages). Las salidas estructuradas están disponibles en Claude Platform en AWS y en beta en Microsoft Foundry. En Vertex AI, las salidas estructuradas están disponibles de forma general para Claude Opus 4.8, Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5, y Claude Haiku 4.5.



Esta función califica para Zero Data Retention (ZDR) (retención cero de datos) con retención técnica limitada. Consulta la sección Retención de datos para obtener detalles sobre qué se retiene y por qué.



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

Por qué usar salidas estructuradas

Sin salidas estructuradas, Claude puede generar respuestas JSON mal formadas o entradas de herramientas inválidas que rompen tus aplicaciones. Incluso con indicaciones cuidadosas, puedes encontrarte con:

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

Las salidas estructuradas garantizan respuestas que cumplen con el esquema mediante decodificación restringida:

  • Siempre válidas: No más errores de JSON.parse()
  • Seguridad de tipos: Tipos de campos y campos obligatorios garantizados
  • Confiables: No se necesitan reintentos por 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
  • Dar formato a respuestas de API

Inicio rápido

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

Output
{
  "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 quieres que Claude siga. El esquema usa el formato estándar de JSON Schema con algunas limitaciones (consulta Limitaciones de JSON Schema).

  2. 2

    Agrega el parámetro output_config.format

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

  3. 3

    Analiza la respuesta

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

Trabajar con salidas JSON en los SDK

Los SDK proporcionan utilidades que facilitan el trabajo con salidas JSON, incluyendo transformación de esquemas, validación automática e integración con bibliotecas de esquemas populares.



El método client.messages.parse() del SDK de Python todavía acepta output_format como parámetro de conveniencia y lo traduce internamente a output_config.format. Otros SDK requieren output_config directamente. Los siguientes ejemplos muestran la sintaxis de las utilidades del SDK.

Usar definiciones de esquema nativas

En lugar de escribir esquemas JSON sin procesar, puedes usar herramientas de definición de esquemas familiares en tu lenguaje:

  • Python: Modelos de Pydantic con client.messages.parse()
  • TypeScript: Esquemas de Zod con zodOutputFormat() o literales de JSON Schema tipados con jsonSchemaOutputFormat()
  • Java: Clases Java simples con derivación automática de esquemas mediante outputConfig(Class<T>)
  • Ruby: Clases Anthropic::BaseModel con output_config: {format: Model}
  • PHP: Clases que implementan StructuredOutputModel con outputConfig: ['format' => MyClass::class]
  • CLI, C#, Esquemas JSON sin procesar pasados a través de

Métodos específicos de cada SDK

Cada SDK proporciona utilidades que facilitan el trabajo con salidas estructuradas. Consulta las páginas individuales de cada SDK para obtener todos los detalles.

Cómo funciona la transformación del SDK

Los SDK de Python, TypeScript, Ruby y PHP transforman automáticamente los esquemas con funcionalidades no compatibles:

  1. Eliminan restricciones no compatibles (por ejemplo, minimum, maximum, minLength, maxLength)
  2. Actualizan las descripciones con información de restricciones (por ejemplo, "Must be at least 100"), cuando la restricción no es compatible directamente con las salidas estructuradas
  3. Agregan additionalProperties: false a todos los objetos
  4. Filtran los formatos de cadena a solo la lista compatible
  5. Validan las respuestas contra tu esquema original (con todas las restricciones)

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

Ejemplo: Un campo de Pydantic con minimum: 100 se convierte en un entero simple en el esquema enviado, pero el SDK actualiza la descripción a "Must be at least 100" y valida la respuesta contra la restricción original.

Casos de uso comunes

Uso estricto de herramientas

Para aplicar el cumplimiento de JSON Schema en las entradas de herramientas con muestreo restringido por gramática, consulta Uso estricto de herramientas.

Usar ambas funcionalidades juntas

Las salidas JSON y el uso estricto de herramientas resuelven problemas diferentes y funcionan juntos:

  • Las salidas JSON controlan el formato de respuesta de Claude (lo que Claude dice)
  • El uso estricto de herramientas valida los parámetros de las herramientas (cómo Claude llama a tus funciones)

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

Consideraciones importantes

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

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

  • Latencia de la primera solicitud: La primera vez que usas un esquema específico, hay 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, lo que hace que las solicitudes posteriores sean mucho más rápidas
  • Invalidación de caché: La caché se invalida si cambias:
    • La estructura del esquema JSON
    • El conjunto de herramientas en tu solicitud (cuando usas tanto salidas estructuradas como uso de herramientas)
    • Cambiar solo los campos name o description no invalida la caché

Modificación de prompts y costos de tokens

Al usar salidas estructuradas, Claude recibe automáticamente una indicación del sistema adicional que explica el formato de salida esperado. Esto significa que:

  • Tu recuento de tokens de entrada es ligeramente mayor
  • El prompt inyectado te cuesta tokens como cualquier otra indicación del sistema
  • Cambiar el parámetro output_config.format invalidará cualquier caché de prompts para ese hilo de conversación

Limitaciones de JSON Schema

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



Los SDK de Python, TypeScript, Ruby y PHP pueden transformar automáticamente esquemas con funcionalidades no compatibles eliminándolas y agregando restricciones a las descripciones de los campos. Consulta Métodos específicos de cada SDK para más detalles.

Orden de las propiedades

Al usar salidas estructuradas, las propiedades en los objetos mantienen el orden definido en tu esquema, con una salvedad importante: las propiedades obligatorias aparecen primero, seguidas de las propiedades opcionales.

Por ejemplo, dado este esquema:

{
  "type": "object",
  "properties": {
    "notes": { "type": "string" },
    "name": { "type": "string" },
    "email": { "type": "string" },
    "age": { "type": "integer" }
  },
  "required": ["name", "email"],
  "additionalProperties": false
}

La salida ordenará las propiedades así:

  1. name (obligatoria, en el orden del esquema)
  2. email (obligatoria, en el orden del esquema)
  3. notes (opcional, en el orden del esquema)
  4. age (opcional, en el orden del esquema)

Esto significa que la salida podría verse así:

{
  "name": "John Smith",
  "email": "[email protected]",
  "notes": "Interested in enterprise plan",
  "age": 35
}

Si el orden de las propiedades en la salida es importante para tu aplicación, marca todas las propiedades como obligatorias, o ten en cuenta este reordenamiento en tu lógica de análisis.

Salidas inválidas

Si bien las salidas estructuradas garantizan el cumplimiento del esquema en la mayoría de los casos, hay escenarios en los que la salida puede no coincidir con tu esquema:

Rechazos (stop_reason: "refusal")

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

  • La respuesta tiene stop_reason: "refusal"
  • Recibirás un código de estado 200
  • Se te facturarán los tokens generados
  • La salida puede no coincidir con tu esquema porque el mensaje de rechazo tiene prioridad sobre las restricciones del esquema

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

Si la respuesta se corta debido a que se alcanzó el límite de max_tokens:

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

Límites de complejidad del esquema

Las salidas estructuradas funcionan compilando tus esquemas JSON en una gramática que restringe la salida de Claude. Los esquemas más complejos producen gramáticas más grandes que tardan más en compilarse. Para protegerse contra tiempos de compilación excesivos, la API aplica varios límites de complejidad.

Límites explícitos

Los siguientes límites se aplican a todas las solicitudes con output_config.format o strict: true:

LímiteValorDescripción
Herramientas estrictas por solicitud20Número máximo de herramientas con strict: true. Las herramientas no estrictas no cuentan para este límite.
Parámetros opcionales24Total de parámetros opcionales en todos los esquemas de herramientas estrictas y esquemas de salida JSON. Cada parámetro no listado en required cuenta para este límite.
Parámetros con tipos unión16Total de parámetros que usan anyOf o arrays de tipos (por ejemplo, "type": ["string", "null"]) en todos los esquemas estrictos. Estos son especialmente costosos porque crean un costo de compilación exponencial.


Estos límites se aplican al total combinado de todos los esquemas estrictos en una sola solicitud. Por ejemplo, si tienes 4 herramientas estrictas con 6 parámetros opcionales cada una, alcanzarás el límite de 24 parámetros aunque ninguna herramienta individual parezca compleja.

Límites internos adicionales

Más allá de los límites explícitos de la tabla anterior, hay límites internos adicionales sobre el tamaño de la gramática compilada. Estos límites existen porque la complejidad del esquema no se reduce a una sola dimensión: funcionalidades como parámetros opcionales, tipos unión, objetos anidados y número de herramientas interactúan entre sí de maneras que pueden hacer que la gramática compilada sea desproporcionadamente grande.

Cuando se exceden estos límites, recibirás un error 400 con el mensaje "Schema is too complex for compilation." Estos errores significan que la complejidad combinada de tus esquemas excede lo que se puede compilar eficientemente, incluso si se satisface cada límite individual de la tabla anterior. Como última medida de protección, la API también aplica un tiempo de espera de compilación de 180 segundos. Los esquemas que pasan todas las verificaciones explícitas pero producen gramáticas compiladas muy grandes pueden alcanzar este tiempo de espera.

Consejos para reducir la complejidad del esquema

Si estás alcanzando los límites de complejidad, prueba estas estrategias en orden:

  1. Marca solo las herramientas críticas como estrictas. Si tienes muchas herramientas, resérvalo para herramientas donde las violaciones de esquema causan problemas reales, y confía en la adherencia natural de Claude para herramientas más simples.

  2. Reduce los parámetros opcionales. Haz que los parámetros sean required cuando sea posible. Cada parámetro opcional aproximadamente duplica una porción del espacio de estados de la gramática. Si un parámetro siempre tiene un valor predeterminado razonable, considera hacerlo obligatorio y que Claude proporcione ese valor predeterminado explícitamente.

  3. Simplifica las estructuras anidadas. Los objetos profundamente anidados con campos opcionales multiplican la complejidad. Aplana las estructuras cuando sea posible.

  4. Divide en múltiples solicitudes. Si tienes muchas herramientas estrictas, considera dividirlas en solicitudes separadas o subagentes.

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

Retención de datos

Los prompts y las respuestas se procesan con ZDR al usar salidas estructuradas. Sin embargo, el esquema JSON en sí se almacena temporalmente en caché hasta 24 horas desde el último uso con fines de optimización. No se retienen datos de prompts ni respuestas más allá de la respuesta de la API.

Las salidas estructuradas son elegibles para HIPAA, pero no se debe incluir PHI en las definiciones de esquemas JSON. La API compila los esquemas JSON en gramáticas que se almacenan en caché por separado del contenido de los mensajes, y estos esquemas en caché no reciben las mismas protecciones de PHI que los prompts y las respuestas. No incluyas PHI en nombres de propiedades del esquema, valores de enum, valores de const ni expresiones regulares de pattern. La PHI solo debe aparecer en el contenido de los mensajes (prompts y respuestas), donde está protegida bajo las salvaguardas de HIPAA.

Para la elegibilidad de ZDR y HIPAA en todas las funcionalidades, consulta API y retención de datos.

Compatibilidad de funcionalidades

Funciona con:

  • Procesamiento por lotes: Procesa salidas estructuradas a escala con un 50% de descuento
  • 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 las restricciones estrictas de esquema JSON. Devuelve un error 400 si las citas están habilitadas con output_config.format.
  • Prellenado de mensajes: Incompatible con salidas JSON


Alcance de la gramática: Las gramáticas se aplican solo a la salida directa de Claude, no a las llamadas de uso de herramientas, resultados de herramientas ni etiquetas de pensamiento (al usar Pensamiento extendido). El estado de la gramática se restablece entre secciones, lo que permite a Claude pensar libremente mientras sigue produciendo salida estructurada en la respuesta final.

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-8",
    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,
            },
        }
    },
)
print(response.content[0].text)
Go:
output_config
from pydantic import BaseModel
from anthropic import Anthropic


class ContactInfo(BaseModel):
    name: str
    email: str
    plan_interest: str
    demo_requested: bool


client = Anthropic()

response = client.messages.parse(
    model="claude-opus-4-8",
    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)

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": "Help me plan a trip to Paris departing May 15, 2026",
        }
    ],
    # Salidas JSON: formato de respuesta estructurado
    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,
            },
        }
    },
    # Uso estricto de herramientas: parámetros de herramientas garantizados
    tools=[
        {
            "name": "search_flights",
            "strict": True,
            "input_schema": {
                "type": "object",
                "properties": {
                    "destination": {"type": "string"},
                    "date": {"type": "string", "format": "date"},
                },
                "required": ["destination", "date"],
                "additionalProperties": False,
            },
        }
    ],
)

print(response)