Crea tu propio nutricionista de IA: LLM, RAG y Nutrición Personalizada
Discusión en profundidad
Técnico, pero accesible
0 0 1
Este artículo guía a los lectores a través de la creación de un nutricionista personal de IA utilizando técnicas avanzadas de IA como LLM, function calling y RAG. Detalla la pila tecnológica, la configuración del entorno y la implementación de funciones nutricionales especializadas, culminando en un asistente funcional capaz de responder consultas de nutrición, calcular el IMC y proporcionar consejos dietéticos personalizados.
puntos principales
ideas únicas
aplicaciones prácticas
temas clave
ideas clave
resultados de aprendizaje
• puntos principales
1
Guía completa sobre la creación de un asistente de nutrición de IA
2
Integración de técnicas avanzadas de IA para consejos de nutrición personalizados
3
Implementación práctica con aplicaciones y ejemplos del mundo real
• ideas únicas
1
Combina LLM, function calling y RAG para una mayor precisión en la orientación nutricional
2
Demuestra cómo crear una base de conocimientos nutricionales consultable utilizando incrustaciones vectoriales
• aplicaciones prácticas
El artículo proporciona un enfoque paso a paso para construir un nutricionista de IA funcional, haciendo que la ciencia de la nutrición sea accesible y personalizada para los usuarios.
• temas clave
1
Modelos de Lenguaje Grandes (LLM)
2
Function Calling en IA
3
Retrieval-Augmented Generation (RAG)
• ideas clave
1
Aplicación práctica de la IA en la gestión de la salud personal
2
Implementación detallada de funciones nutricionales para cálculos precisos
3
Uso innovador de técnicas de IA para mejorar la interacción del usuario con datos nutricionales
• resultados de aprendizaje
1
Comprender cómo integrar LLM con function calling para aplicaciones prácticas.
2
Aprender a construir una base de conocimientos nutricionales utilizando incrustaciones vectoriales.
3
Obtener información sobre la creación de asistentes de IA personalizados para la salud y la nutrición.
“ Introducción: La Necesidad de un Nutricionista Personal de IA
En el ajetreado entorno actual, mantener una dieta equilibrada es cada vez más difícil. Los consejos nutricionales contradictorios y las dietas de moda a menudo confunden a las personas. Un Nutricionista Personal de IA, disponible las 24 horas del día, los 7 días de la semana, puede responder preguntas específicas sobre nutrición, calcular las necesidades nutricionales y proporcionar recomendaciones personalizadas. Esto ahora es posible gracias a los avances en inteligencia artificial, particularmente los modelos de lenguaje grandes (LLM) y las técnicas de recuperación. Este artículo te guía a través de la creación de tu propio Asistente Nutricionista Personal de IA, combinando el LLM Gemini de Google con funciones nutricionales especializadas y una base de conocimientos de datos nutricionales reales. El asistente puede responder preguntas sobre nutrición de alimentos, calcular el IMC, estimar las necesidades calóricas diarias, recomendar alimentos según criterios y proporcionar consejos nutricionales basados en evidencia.
“ Comprendiendo la Pila Tecnológica: LLM, Function Calling y RAG
Nuestro Asistente Nutricionista Personal de IA está impulsado por tres tecnologías clave: Modelos de Lenguaje Grandes (LLM) como Gemini 1.5 Pro de Google, Function Calling (Llamada a Funciones) y Retrieval-Augmented Generation (RAG). Los LLM comprenden y generan texto similar al humano, destacando en consultas de lenguaje natural sobre nutrición. Function Calling permite al LLM utilizar cálculos especializados como el IMC o las necesidades calóricas. RAG basa las respuestas del asistente en datos nutricionales fácticos, recuperando información relevante de una base de datos nutricional. Estas tecnologías trabajan juntas para comprender las consultas de los usuarios, recuperar datos nutricionales y manejar cálculos precisos.
“ Configurando tu Entorno de Desarrollo
Para configurar el entorno de desarrollo, instala las bibliotecas necesarias y configura el acceso a la API. Utiliza los siguientes comandos:
```bash
!pip install -U -q "google-genai==1.7.0"
!pip install chromadb
```
Estos comandos instalan el SDK de Python de Google Generative AI y ChromaDB para la base de datos vectorial. A continuación, configura el acceso a la API de Google Gemini:
```python
import google.generativeai as genai
import os
# Configura la clave de API
GOOGLE_API_KEY = "TU_CLAVE_API" # Reemplaza con tu clave de API real
genai.configure(api_key=GOOGLE_API_KEY)
```
Reemplaza `TU_CLAVE_API` con tu clave de API de Gemini real del sitio web de Google AI Studio.
“ Construyendo la Base de Conocimientos Nutricionales
Construye la base de conocimientos nutricionales cargando un conjunto de datos completo de información nutricional utilizando pandas:
```python
import pandas as pd
import numpy as np
# Cargar datos nutricionales
nutrition_data = pd.read_csv('/kaggle/input/nutrition-facts-for-3636-foods/nutrition_facts.csv')
nutrition_data.head()
```
Este conjunto de datos contiene información nutricional detallada para más de 3.600 alimentos. Convierte estos datos en incrustaciones vectoriales utilizando ChromaDB:
```python
# Crear incrustaciones para los datos nutricionales
from chromadb.utils import embedding_functions
import chromadb
# Inicializar cliente ChromaDB
chroma_client = chromadb.Client()
# Crear una colección para datos nutricionales
nutrition_collection = chroma_client.create_collection(
name="nutrition_facts",
embedding_function=embedding_functions.DefaultEmbeddingFunction()
)
# Preparar datos para incrustación
for i, row in nutrition_data.iterrows():
# Crear un documento con información nutricional
document = f"Alimento: {row['name']}, Calorías: {row['calories']}, Proteína: {row['protein_g']}g, Grasa: {row['fat_g']}g, Carbohidratos: {row['carbohydrate_g']}g"
# Añadir a la colección con ID único
nutrition_collection.add(
documents=[document],
ids=[f"food_{i}"]
)
```
Este código crea una colección ChromaDB y la popula con datos nutricionales, permitiendo la búsqueda semántica.
“ Creando Funciones Nutricionales Especializadas: Cálculo de IMC y Calorías
Implementa dos funciones nutricionales esenciales: cálculo del IMC y estimación de las necesidades calóricas diarias:
```python
def calculate_bmi(weight_kg, height_cm):
"""Calcula el IMC dados el peso en kg y la altura en cm."""
height_m = height_cm / 100
bmi = weight_kg / (height_m * height_m)
# Determinar la categoría del IMC
if bmi < 18.5:
category = "Bajo peso"
elif bmi < 25:
category = "Peso normal"
elif bmi < 30:
category = "Sobrepeso"
else:
category = "Obeso"
return {
"bmi": round(bmi, 1),
"category": category
}
def calculate_calorie_needs(weight_kg, height_cm, age, gender, activity_level):
"""Calcula las necesidades calóricas diarias basándose en la ecuación de Harris-Benedict."""
# Tasa metabólica basal (TMB)
if gender.lower() == "male":
bmr = 88.362 + (13.397 * weight_kg) + (4.799 * height_cm) - (5.677 * age)
else: # female
bmr = 447.593 + (9.247 * weight_kg) + (3.098 * height_cm) - (4.330 * age)
# Multiplicadores de actividad
activity_multipliers = {
"sedentary": 1.2, # Poco o ningún ejercicio
"light": 1.375, # Ejercicio ligero 1-3 días/semana
"moderate": 1.55, # Ejercicio moderado 3-5 días/semana
"active": 1.725, # Ejercicio intenso 6-7 días/semana
"very_active": 1.9 # Ejercicio muy intenso y trabajo físico o entrenamiento dos veces al día
}
# Calcular el gasto energético diario total (TDEE)
multiplier = activity_multipliers.get(activity_level.lower(), 1.2)
tdee = bmr * multiplier
return {
"bmr": round(bmr),
"daily_calories": round(tdee),
"weight_loss": round(tdee - 500), # Déficit de 500 calorías
"weight_gain": round(tdee + 500) # Superávit de 500 calorías
}
```
La función `calculate_bmi` implementa la fórmula del Índice de Masa Corporal, y la función `calculate_calorie_needs` utiliza la ecuación de Harris-Benedict.
“ Implementando Function Calling con Gemini
Define esquemas de funciones para que Gemini utilice estas funciones:
```python
nutrition_functions = [
{
"name": "calculate_bmi",
"description": "Calcular el IMC (Índice de Masa Corporal) y determinar la categoría de peso",
"parameters": {
"type": "object",
"properties": {
"weight_kg": {
"type": "number",
"description": "Peso en kilogramos"
},
"height_cm": {
"type": "number",
"description": "Altura en centímetros"
}
},
"required": ["weight_kg", "height_cm"]
}
},
{
"name": "calculate_calorie_needs",
"description": "Calcular las necesidades calóricas diarias basándose en estadísticas personales",
"parameters": {
"type": "object",
"properties": {
"weight_kg": {
"type": "number",
"description": "Peso en kilogramos"
},
"height_cm": {
"type": "number",
"description": "Altura en centímetros"
},
"age": {
"type": "integer",
"description": "Edad en años"
},
"gender": {
"type": "string",
"description": "Género (masculino o femenino)"
},
"activity_level": {
"type": "string",
"description": "Nivel de actividad (sedentario, ligero, moderado, activo, muy_activo)"
}
},
"required": ["weight_kg", "height_cm", "age", "gender", "activity_level"]
}
}
]
```
Estos esquemas definen el nombre, la descripción y los parámetros de cada función, permitiendo al LLM determinar cuándo y cómo utilizarlos.
“ Construyendo el Sistema RAG para Datos Nutricionales Precisos
El componente Retrieval-Augmented Generation (RAG) asegura que las respuestas sobre datos nutricionales se basen en la base de datos. Recupera entradas relevantes de la base de datos nutricional y proporciónalas como contexto al LLM:
```python
def nutrition_assistant(query):
"""Procesa una consulta relacionada con la nutrición utilizando RAG y function calling."""
# Paso 1: Recuperar información nutricional relevante utilizando RAG
results = nutrition_collection.query(
query_texts=[query],
n_results=5
)
# Formatear la información recuperada
context = "\n".join(results["documents"][0])
```
Este código utiliza la función de consulta de ChromaDB para encontrar las 5 entradas más relevantes para la consulta del usuario.
“ Juntándolo Todo: La Función del Asistente de Nutrición
Combina todos los componentes en la función principal del asistente:
```python
def nutrition_assistant(query):
"""Procesa una consulta relacionada con la nutrición utilizando RAG y function calling."""
# Paso 1: Recuperar información nutricional relevante utilizando RAG
results = nutrition_collection.query(
query_texts=[query],
n_results=5
)
# Formatear la información recuperada
context = "\n".join(results["documents"][0])
# Paso 2: Configurar el modelo con function calling
model = genai.GenerativeModel(
model_name="gemini-1.5-pro",
generation_config={"temperature": 0.2}
)
# Paso 3: Crear el prompt con contexto y consulta
prompt = f"""Eres un útil asistente de nutrición. Utiliza la siguiente información nutricional para ayudar a responder la consulta.
INFORMACIÓN NUTRICIONAL:
{context}
CONSULTA DEL USUARIO: {query}
Si el usuario pregunta sobre cálculos de IMC o calorías, utiliza la función apropiada.
Para otras preguntas de nutrición, proporciona consejos útiles basados en el contexto y tu conocimiento.
"""
# Paso 4: Generar respuesta con posibles llamadas a funciones
response = model.generate_content(
prompt,
tools=nutrition_functions
)
# Paso 5: Procesar llamadas a funciones si están presentes
if hasattr(response, 'candidates') and len(response.candidates) > 0:
candidate = response.candidates[0]
if hasattr(candidate, 'content') and hasattr(candidate.content, 'parts'):
for part in candidate.content.parts:
if hasattr(part, 'function_call'):
function_call = part.function_call
function_name = function_call.name
function_args = function_call.args
# Ejecutar la función apropiada
if function_name == "calculate_bmi":
result = calculate_bmi(
function_args["weight_kg"],
function_args["height_cm"]
)
elif function_name == "calculate_calorie_needs":
result = calculate_calorie_needs(
function_args["weight_kg"],
function_args["height_cm"],
function_args["age"],
function_args["gender"],
function_args["activity_level"]
)
# Generar una nueva respuesta con el resultado de la función
final_prompt = f"""Eres un útil asistente de nutrición. Un usuario preguntó: "{query}"
Llamaste a la función {function_name} que devolvió este resultado:
{result}
Por favor, proporciona una respuesta útil y conversacional que explique estos resultados y ofrezca consejos nutricionales apropiados.
Incluye recomendaciones de alimentos específicos basadas en la información nutricional si es relevante.
"""
final_response = model.generate_content(final_prompt)
return final_response.text
# Si no se realizó ninguna llamada a función, devuelve la respuesta original
return response.text
```
Esta función recupera información nutricional, configura el modelo Gemini, crea un prompt, genera una respuesta y procesa las llamadas a funciones si es necesario.
“ Probando con Consultas del Mundo Real
Prueba el Nutricionista Personal de IA con consultas del mundo real:
```python
test_queries = [
"¿Cuál es el valor nutricional de una manzana?",
"¿Puedes calcular mi IMC? Mido 70 kg y 175 cm de altura.",
"¿Cuántas calorías debería comer? Soy un hombre de 30 años, 80 kg, 180 cm, y moderadamente activo.",
"¿Cuáles son algunos alimentos ricos en proteínas para desarrollar músculo?",
"¿Puedes sugerir un plan de comidas para perder peso?"
]
for query in test_queries:
print(f"\nConsulta: {query}")
print("-" * 50)
response = nutrition_assistant(query)
print(response)
print("=" * 80)
```
Estos ejemplos demuestran la versatilidad del Nutricionista Personal de IA, manejando consultas fácticas, realizando cálculos y proporcionando recomendaciones personalizadas.
“ Mejoras Futuras y Conclusión
Las mejoras potenciales incluyen expandir la base de datos nutricional, mejorar la precisión de las estimaciones calóricas, agregar soporte para requisitos dietéticos más complejos e integrar con dispositivos portátiles. El Asistente Nutricionista Personal de IA combina LLM, function calling y RAG para proporcionar orientación nutricional personalizada. Este sistema puede responder preguntas de nutrición, calcular el IMC y las necesidades calóricas, y proporcionar recomendaciones personalizadas, mostrando el potencial de la IA en la salud personal.
Utilizamos cookies que son esenciales para el funcionamiento de nuestro sitio. Para mejorar nuestro sitio, nos gustaría usar cookies adicionales para ayudarnos a entender cómo los visitantes lo utilizan, medir el tráfico desde plataformas de redes sociales y personalizar tu experiencia. Algunas de las cookies que usamos son proporcionadas por terceros. Para aceptar todas las cookies, haz clic en 'Aceptar'. Para rechazar todas las cookies opcionales, haz clic en 'Rechazar'.
Comentario(0)