--- layout: default --- # Structured Output
**Problema:** Las respuestas de LLMs son texto plano, difíciles de procesar **Solución:** Forzar al modelo a responder con JSON estructurado
```typescript import { ChatOpenAI } from "@langchain/openai"; import { z } from "zod"; // Definir el esquema con Zod const schema = z.object({ sentiment: z.enum(["positive", "negative", "neutral"]), score: z.number().min(0).max(1), keywords: z.array(z.string()), }); const model = new ChatOpenAI({ model: "gpt-4.1-mini" }) .withStructuredOutput(schema); const result = await model.invoke("Me encanta LangChain!"); // { sentiment: "positive", score: 0.95, keywords: ["encanta", "langchain"] } ```