Como desarrollador independiente de apps que gestiona varios productos móviles local-first, mis principios siempre han sido la velocidad, la utilidad y la eficiencia de costes. El objetivo de TinyRecipe era sencillo: ayudar a reducir el desperdicio de comida generando recetas prácticas, paso a paso, únicamente con los ingredientes que ya hay en la nevera o la despensa.
Si no se diseña con cuidado, añadir IA generativa a una app móvil puede acabar en respuestas lentas, datos JSON impredecibles y costes de API cada vez mayores. Así integré Firebase AI Logic, con Gemini en Vertex AI, para generar recetas estructuradas rápidamente y mantener bajos los costes de operación.
El reto principal: poner límites al LLM
Si se da libertad total a un LLM para crear una receta, aparecen enseguida tres problemas:
- Alucinaciones y combinaciones extrañas: podría sugerir preparar una sopa con aceite de oliva, salsa de soja y un limón.
- Esquema inconsistente: convertir texto libre o Markdown sin estructura en componentes nativos de interfaz provoca errores frágiles en el cliente.
- Alto consumo de tokens: las respuestas sin límite agotan rápidamente el presupuesto de tokens con instrucciones de varios pasos.
Para resolverlo, utilicé la integración de Firebase con Vertex AI para imponer instrucciones de sistema estrictas y analizar una salida estructurada.
1. Límites en el prompt del sistema y validación del esquema JSON
En lugar de pedirle al modelo una buena receta, el prompt del sistema lo obliga a cumplir un contrato estricto de esquema JSON:
{
"title": "String",
"prep_time_minutes": "Number",
"difficulty": "Easy | Medium | Hard",
"matched_pantry_items": ["Array of Strings"],
"missing_staples_required": ["Array of Strings"],
"instructions": [
{
"step_number": 1,
"text": "String"
}
]
}Dos límites hicieron que la función fuera mucho más útil en la práctica:
- Exención de ingredientes básicos: los usuarios no deberían tener que marcar la sal, la pimienta, el agua del grifo ni el aceite de cocina en la despensa. El prompt permite explícitamente estos básicos para que elegir ingredientes sea sencillo.
- Aislamiento estricto de ingredientes: el modelo prioriza los ingredientes marcados como disponibles en la despensa digital antes de sugerir otros adicionales.
2. Optimización en el cliente: una experiencia sin fricción
Nadie quiere escribir «250 g de pechuga de pollo en dados» con el teclado del móvil mientras está en la cocina.
[El usuario toca etiquetas de la despensa] -> [El cliente crea un array] -> [Solicitud a Firebase AI] -> [Renderizado de la interfaz nativa]- Etiquetas de selección rápida por categoría: la interfaz ofrece etiquetas categorizadas que permiten seleccionar rápidamente ingredientes comunes de la nevera y la despensa.
- Caché local: antes de enviar una solicitud a Firebase AI Logic, la app calcula un hash del array de ingredientes seleccionado. Si el usuario pide una receta con los mismos ingredientes principales poco después, TinyRecipe muestra el resultado almacenado al instante y sin otra llamada a la API.
3. Lecciones aprendidas y próximos pasos
Firebase AI Logic facilitó mucho la ampliación de una función de IA generativa para un desarrollador independiente. Al exigir esquemas JSON estrictos en el límite del modelo y mantener el estado en el dispositivo, TinyRecipe consigue:
- generar recetas en menos de dos segundos
- mostrar resultados de forma predecible, sin errores de análisis
- desperdiciar muy pocos tokens de API
La función de despensa con IA ya está disponible tanto en iOS como en Android.
