Las salidas estructuradas restringen las respuestas de Claude para seguir un esquema específico, garantizando una salida válida y analizable para el procesamiento posterior. Usa salidas JSON (output_format) para respuestas de datos estructurados, o uso estricto de herramientas (strict: true) para validación de esquema garantizada en nombres de herramientas e entradas.
Las salidas estructuradas están actualmente disponibles como una característica de beta pública en la API de Claude para Claude Sonnet 4.5 y Claude Opus 4.1.
Para usar la característica, establece el encabezado beta beta header structured-outputs-2025-11-13.
Comparte comentarios usando este formulario.
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:
Las salidas estructuradas garantizan respuestas conformes al esquema mediante decodificación restringida:
JSON.parse()Elige el modo correcto para tu caso de uso:
| Usa salidas JSON cuando | Usa uso estricto de herramientas cuando |
|---|---|
| Necesitas la respuesta de Claude en un formato específico | Necesitas parámetros validados y nombres de herramientas para llamadas de herramientas |
| Extrayendo datos de imágenes o texto | Construyendo flujos de trabajo de agentes |
| Generando reportes estructurados | Asegurando llamadas de función seguras de tipo |
| Formateando respuestas de API | Herramientas complejas con muchas propiedades y/o anidadas |
Construir sistemas de agentes confiables requiere conformidad de esquema garantizada. Los parámetros de herramientas inválidos rompen tus funciones y flujos de trabajo. Claude podría devolver tipos incompatibles ("2" en lugar de 2) o campos faltantes, causando errores en tiempo de ejecución.
El uso estricto de herramientas garantiza parámetros seguros de tipo:
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, se garantiza passengers: 2.
Los SDKs de Python y TypeScript proporcionan ayudantes que facilitan trabajar con salidas JSON, incluyendo transformación de esquema, validación automática e integración con bibliotecas de esquema populares.
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.
Solo salidas JSON
Los ayudantes de SDK (Pydantic, Zod, parse()) solo funcionan con salidas JSON (output_format).
Estos ayudantes transforman y validan la salida de Claude para ti. El uso estricto de herramientas valida la entrada de Claude a tus herramientas, que utilizan el campo input_schema existente en definiciones de herramientas.
Para el uso estricto de herramientas, define tu input_schema directamente en la definición de herramienta con strict: true.
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.beta.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
betas=["structured-outputs-2025-11-13"],
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={
"type": "json_schema",
"schema": transform_schema(ContactInfo),
}
)
print(response.content[0].text)
# With .parse() - can pass Pydantic model directly
response = client.beta.messages.parse(
model="claude-sonnet-4-5",
max_tokens=1024,
betas=["structured-outputs-2025-11-13"],
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)Python: client.beta.messages.parse() (Recomendado)
El método parse() transforma automáticamente tu modelo Pydantic, valida la respuesta y devuelve un atributo parsed_output.
El método parse() está disponible en client.beta.messages, no en client.messages.
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.beta.messages.parse(), que transforma esquemas proporcionados automáticamente, esto te da el esquema transformado para que puedas personalizarlo aún más.
Ambos SDKs de Python y TypeScript transforman automáticamente esquemas con características no soportadas:
minimum, maximum, minLength, maxLength)additionalProperties: false a todos los objetosEsto 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.
Las salidas estructuradas utilizan muestreo restringido con artefactos de gramática compilada. Esto introduce algunas características de rendimiento a tener en cuenta:
name o description no invalida el cachéCuando usas salidas estructuradas, Claude recibe automáticamente una indicación de sistema adicional explicando el formato de salida esperado. Esto significa:
output_format invalidará cualquier caché de indicación para ese hilo de conversaciónLas 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. Ver métodos específicos del SDK para detalles.
Aunque las salidas estructuradas garantizan conformidad de esquema en la mayoría de los casos, hay escenarios donde la salida puede 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:
stop_reason: "refusal"Límite de tokens alcanzado (stop_reason: "max_tokens")
Si la respuesta se corta debido a alcanzar el límite de max_tokens:
stop_reason: "max_tokens"max_tokens más alto para obtener la salida estructurada completaSi tu esquema usa características no soportadas o es demasiado complejo, recibirás un error 400:
"Demasiadas definiciones recursivas en el esquema"
"El esquema es demasiado complejo"
strict: truePara problemas persistentes con esquemas válidos, contacta con soporte con tu definición de esquema.
Funciona con:
output_format) y uso estricto de herramientas (strict: true) juntos en la misma solicitudIncompatible con:
output_format.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.