Salida estructurada con LangChain: with_structured_output y Pydantic

By Carlos Montiel | Especialista en IA Empresarial
Publicado: 2026-07-28 | Por: Carlos Montiel | Lectura: ~4 minutos

with_structured_output hace que parezca mágico forzar JSON válido desde un LLM — pero por debajo, lo que realmente estás haciendo es escribirle un prompt más detallado a través de tu schema de Pydantic.

Qué hace with_structured_output

El método `with_structured_output` te permite pasar una clase Pydantic BaseModel a un chat model, que después devuelve respuestas estructuradas, con la opción de incluir también el output crudo. Es el mecanismo central de LangChain para imponer formatos de datos específicos sobre los resultados generados por LLMs.

Por qué el docstring y las descripciones importan tanto como el tipo

Con modelos Pydantic, el nombre de la clase, el docstring, y los nombres y descripciones provistas de los parámetros son importantes, ya que `with_structured_output` típicamente usa la API de function/tool-calling del modelo y agrega esta información al prompt del modelo. La descripción de clases y campos es crucial porque dicta el contenido del output que genera el modelo grande — un campo mal descrito produce output mal formado, aunque el tipo de dato sea técnicamente correcto.

Ejemplo de código

from pydantic import BaseModel, Field from langchain_openai import ChatOpenAI class Ticket(BaseModel): """Extrae la información clave de un ticket de soporte.""" categoria: str = Field(description="Una de: bug, pregunta, solicitud de feature") urgencia: int = Field(description="Del 1 (baja) al 5 (crítica)") resumen: str = Field(description="Resumen en una frase del problema") model = ChatOpenAI(model="gpt-4o-mini") modelo_estructurado = model.with_structured_output(Ticket) resultado = modelo_estructurado.invoke("El login se cae cada vez que uso 2FA, urgente") print(resultado.categoria, resultado.urgencia)

Qué pasa con modelos que no soportan function calling nativo

Para modelos que no soportan salida estructurada nativa, LangChain usa tool calling para lograr el mismo resultado, lo cual funciona con todos los modelos que soportan tool calling (la mayoría de los modelos modernos) — la abstracción de LangChain te aísla de tener que implementar ese fallback manualmente según qué modelo estés usando.

Pydantic es la opción más estricta — y eso es una ventaja

Pydantic es el más poderoso y estricto de los métodos de salida estructurada disponibles en LangChain. Para pipelines donde el output alimenta directamente un sistema downstream (una base de datos, otro servicio), esa rigidez es exactamente lo que necesitás — preferí Pydantic sobre alternativas más laxas como TypedDict cuando la corrección del schema es crítica, no solo una guía aproximada.

Carlos Montiel
Arquitecto de Soluciones IA Empresarial
Especialista en LLMs, Agentes y Orquestación
guatemalia.com/#contacto · info@guatemalia.com

¿Necesitas implementar IA en tu empresa?

Carlos Montiel es arquitecto de soluciones IA empresarial. Implementa LLMs, Agentes, RAG y orquestadores en empresas de Guatemala y Latinoamérica. Contáctalo para una consultoría.

Contactar a Carlos Montiel

info@guatemalia.com