Resumen

Controlar cómo responde un large language model es clave para construir agentes que tomen decisiones con seguridad. Pasar de texto libre a respuestas estructuradas permite evaluar, guardar y accionar sobre datos concretos como nombre, email, teléfono, tono y sentimiento, reduciendo impredecibilidad y costos.

¿Por qué estructurar respuestas de un large language model?

Estructurar la salida transforma un mensaje impredecible en un objeto controlado. En lugar de depender del tono, longitud o adherencia variable al prompt y a la temperatura, se fuerza al modelo a devolver un JSON con un schema claro para operar en código y en el lang graph del agente.

  • Evaluación programática: extraer nombre, email, teléfono, tono o sentimiento para usarlos como variables.
  • Decisiones de agente: con datos consistentes, un nodo puede ramificar o reevaluar.
  • Más que chat: el modelo ya no conversa, actúa como extractor.

¿Qué aporta el structured output frente a JSON mode?

La salida estructurada resuelve la necesidad de “responder en JSON” sin depender del antiguo JSON mode.

  • Integraciones en LangChain con múltiples modelos y soporte de salida estructurada.
  • Ejemplo citado: “Entropic” con tool chain, tool coding, salida estructurada y multimodal.
  • JSON mode ya no es central cuando se usa structured output.

¿Cómo implementar un extractor con structured output?

El flujo parte de un schema y un system prompt. Se define una clase Pydantic, se activa el structured output del modelo y se envía el historial para que el LLM devuelva un objeto validado.

  • Definir clase contact info con campos como name, email, phone, tone e age.
  • Usar Pydantic en Python para que el schema se traduzca a lo que la API necesita.
  • Indicar en la descripción cómo evaluar variables, por ejemplo tone en un rango 0–100 o sentimiento categórico.
  • Enviar un system prompt: el modelo debe “extraer información de la conversación” siguiendo el schema.
  • Enviar mensajes como tuplas tipo system y usuario, con todo el historial cuando se requiera.
  • La respuesta llega como objeto Pydantic, listo para hacer acceso directo a campos.

¿Qué errores comunes y cómo mitigarlos?

Al estructurar, emergen fallos típicos que se corrigen con prompt y validación.

  • Alucinación de datos: puede inventar “age”. Pedir explícitamente “si no encuentras, no inventes”.
  • Validaciones estrictas: si un campo es entero y no hay dato, se rompe. Ponerlo como string o usar fallback temporal.
  • Sentimiento/tono ambiguo: aclarar escalas o enums en descripciones.
  • Mensajes genéricos del modelo: recordar que aquí no se busca chat, sino extracción.

¿Cómo integrar el extractor en un agente con memoria compartida?

Se agrega un nodo extractor con structured output y se mantiene el nodo conversacional estándar. El extractor lee el historial, extrae datos clave y los guarda en la memoria para que el siguiente nodo los use en su prompt.

  • Instanciar un LLM con structured output (se mostró con “Claude”) solo en el nodo extractor.
  • Mantener el LLM conversacional normal en el nodo de conversación.
  • Lógica de disparo: si customer name es none o si el historial supera >10 mensajes, volver a extraer.
  • Guardar en estado compartido: customer name, email, phone, age.
  • Inyectar memoria en el system prompt del nodo conversacional de forma dinámica, con fallback si falta información.
  • Optimizar costos: evitar llamadas si ya se obtuvo el dato y el historial no cambió.
  • Si no hay “información relevante”, instruir al nodo de conversación a seguir el flujo normal, no a consultar la base vectorial.

¿Qué habilidades y keywords se practican?

El ejercicio refuerza técnicas de prompting y diseño de agentes con salida sólida y reusable.

  • Prompting: buen system prompt y reglas de no invención.
  • Técnicas: zero shot, few shot, chain of thought cuando aplique.
  • Schema design: Pydantic, tipos, rangos y descripciones claras.
  • Memoria compartida: actualización de estado y uso en prompts.
  • Control de flujo: condiciones por tamaño de historial y reextracción.
  • Integraciones: LangChain, chat models, salida estructurada, opciones locales como Ollama o Hugging Face.
  • Ecosistema: JSON Schema, API, Python, “Claude”, “OpenAI”, “Cloudflare”.

¿Te gustaría ver más patrones de extracción y prompts dinámicos para tus agentes? Comparte tus dudas y casos en los comentarios.