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