Salidas Estructuradas (JSON)
El mayor dolor de cabeza al integrar LLMs en software tradicional son las respuestas impredecibles.
Tú pides una lista de usuarios y el modelo responde: “¡Por supuesto! Aquí tienes la lista que pediste…”. Ese texto extra rompe tu código.
Gemini tiene una solución nativa: JSON Mode. Al activarlo, garantizamos que la respuesta sea un objeto JSON válido, eliminando la necesidad de expresiones regulares complejas o limpieza manual.
Extracción de datos
Sección titulada «Extracción de datos»Imagina que tu aplicación recibe correos electrónicos de facturas desordenadas y necesitas extraer: Fecha, Total, Empresa y una lista de Items.
Vamos a crear src/json-extract.js:
Directoriogemini-lab
Directoriosrc
- config.js
- text-gen.js
- json-extract.js Nuevo archivo
Copia el siguiente código:
import { client } from "./config.js";
async function extractInvoiceData(emailContent) { // 1. Definir el esquema esperado en el prompt const prompt = ` Extrae la información de la siguiente factura desordenada.
Responde ÚNICAMENTE con un objeto JSON que siga esta estructura: { "fecha": "YYYY-MM-DD", "empresa": "string", "total": number, "moneda": "string", "items": [ { "producto": "string", "cantidad": number, "precio_unitario": number } ] }
Factura: ${emailContent} `;
try { console.log("Procesando documento...");
// 2. Configuración mágica: responseMimeType const result = await client.models.generateContent({ model: "gemini-3-flash-preview", contents: [{ role: "user", parts: [{ text: prompt }] }], generationConfig: { temperature: 0.1, // Baja temperatura para datos precisos responseMimeType: "application/json", // <--- LA CLAVE }, });
const responseText = result.text;
// 3. Parseo seguro. Gracias a 'application/json'. const invoiceData = JSON.parse(responseText);
console.log("Datos extraídos (Objeto JS):"); console.log(invoiceData);
// Aquí ya podrías hacer: db.invoices.save(invoiceData) console.log("Total a pagar:", invoiceData.total, invoiceData.moneda);
} catch (error) { console.error("Error de parseo:", error); }}
// Un correo desordenado típicoconst rawEmail = `Hola, les envío la cuenta de la cena de ayer en el Restaurante "El Buen Sabor".Fue el día 12 de Octubre de 2023.Pedimos 2 hamburguesas a $15.000 cada una y 3 gaseosas a $5.000.El total fue de $45.000 pesos. Gracias.`;
extractInvoiceData(rawEmail);Ejecútalo: node src/json-extract.js
Si todo salió bien, verás algo como:
Procesando documento...Datos extraídos (Objeto JS):{ fecha: '2023-10-12', empresa: 'El Buen Sabor', total: 45000, moneda: 'pesos', items: [ { producto: 'hamburguesas', cantidad: 2, precio_unitario: 15000 }, { producto: 'gaseosas', cantidad: 3, precio_unitario: 5000 } ]}Total a pagar: 45000 pesos¿Por qué funciona tan bien?
Sección titulada «¿Por qué funciona tan bien?»Al configurar responseMimeType: "application/json", cambias la forma en que el modelo selecciona los siguientes tokens. Literalmente le prohíbes generar texto que no sea sintaxis JSON válida (como comillas, llaves y comas).