Construa Seu Próprio Nutricionista de IA: LLM, RAG e Nutrição Personalizada
Discussão aprofundada
Técnico, mas acessível
0 0 1
Este artigo guia os leitores na criação de um nutricionista pessoal de IA usando técnicas avançadas de IA como LLMs, function calling e RAG. Ele detalha a pilha de tecnologia, configuração do ambiente e implementação de funções nutricionais especializadas, culminando em um assistente funcional capaz de responder a consultas nutricionais, calcular IMC e fornecer conselhos dietéticos personalizados.
pontos principais
insights únicos
aplicações práticas
tópicos-chave
insights principais
resultados de aprendizagem
• pontos principais
1
Guia abrangente sobre a construção de um assistente nutricional de IA
2
Integração de técnicas avançadas de IA para conselhos nutricionais personalizados
3
Implementação prática com aplicações e exemplos do mundo real
• insights únicos
1
Combina LLMs, function calling e RAG para maior precisão em orientação nutricional
2
Demonstra como criar uma base de conhecimento nutricional pesquisável usando embeddings vetoriais
• aplicações práticas
O artigo fornece uma abordagem passo a passo para construir um nutricionista de IA funcional, tornando a ciência da nutrição acessível e personalizada para os usuários.
• tópicos-chave
1
Modelos de Linguagem Grandes (LLMs)
2
Function Calling em IA
3
Retrieval-Augmented Generation (RAG)
• insights principais
1
Aplicação prática de IA no gerenciamento de saúde pessoal
2
Implementação detalhada de funções nutricionais para cálculos precisos
3
Uso inovador de técnicas de IA para aprimorar a interação do usuário com dados nutricionais
• resultados de aprendizagem
1
Entender como integrar LLMs com function calling para aplicações práticas.
2
Aprender a construir uma base de conhecimento nutricional usando embeddings vetoriais.
3
Obter insights sobre a criação de assistentes de IA personalizados para saúde e nutrição.
“ Introdução: A Necessidade de um Nutricionista Pessoal de IA
No ambiente agitado de hoje, manter uma dieta equilibrada é cada vez mais difícil. Conselhos nutricionais conflitantes e dietas da moda muitas vezes deixam os indivíduos confusos. Um Nutricionista Pessoal de IA, disponível 24 horas por dia, 7 dias por semana, pode responder a perguntas específicas sobre nutrição, calcular necessidades nutricionais e fornecer recomendações personalizadas. Isso agora é possível com os avanços em inteligência artificial, particularmente modelos de linguagem grandes (LLMs) e técnicas de recuperação. Este artigo o guiará na criação de seu próprio Assistente Nutricionista Pessoal de IA, combinando o LLM Gemini do Google com funções nutricionais especializadas e uma base de conhecimento de dados nutricionais real. O assistente pode responder a perguntas sobre nutrição alimentar, calcular IMC, estimar necessidades calóricas diárias, recomendar alimentos com base em critérios e fornecer conselhos nutricionais baseados em evidências.
“ Compreendendo a Pilha de Tecnologia: LLMs, Function Calling e RAG
Nosso Assistente Nutricionista Pessoal de IA é alimentado por três tecnologias-chave: Modelos de Linguagem Grandes (LLMs) como o Gemini 1.5 Pro do Google, Function Calling e Retrieval-Augmented Generation (RAG). LLMs entendem e geram texto semelhante ao humano, destacando-se em consultas de linguagem natural sobre nutrição. Function Calling permite que o LLM use cálculos especializados como IMC ou necessidades calóricas. RAG fundamenta as respostas do assistente em dados nutricionais factuais, recuperando informações relevantes de um banco de dados de nutrição. Essas tecnologias trabalham juntas para entender as consultas do usuário, recuperar fatos nutricionais e lidar com cálculos precisos.
“ Configurando Seu Ambiente de Desenvolvimento
Para configurar o ambiente de desenvolvimento, instale as bibliotecas necessárias e configure o acesso à API. Use os seguintes comandos:
```bash
!pip install -U -q "google-genai==1.7.0"
!pip install chromadb
```
Esses comandos instalam o SDK Python do Google Generative AI e o ChromaDB para o banco de dados vetorial. Em seguida, configure o acesso à API do Google Gemini:
```python
import google.generativeai as genai
import os
# Configurar a chave da API
GOOGLE_API_KEY = "SUA_CHAVE_DE_API" # Substitua pela sua chave de API real
genai.configure(api_key=GOOGLE_API_KEY)
```
Substitua `SUA_CHAVE_DE_API` pela sua chave de API Gemini real do site do Google AI Studio.
“ Construindo a Base de Conhecimento Nutricional
Construa a base de conhecimento nutricional carregando um conjunto de dados abrangente de fatos nutricionais usando pandas:
```python
import pandas as pd
import numpy as np
# Carregar dados nutricionais
nutrition_data = pd.read_csv('/kaggle/input/nutrition-facts-for-3636-foods/nutrition_facts.csv')
nutrition_data.head()
```
Este conjunto de dados contém informações nutricionais detalhadas para mais de 3.600 alimentos. Converta esses dados em embeddings vetoriais usando ChromaDB:
```python
# Criar embeddings para os dados nutricionais
from chromadb.utils import embedding_functions
import chromadb
# Inicializar o cliente ChromaDB
chroma_client = chromadb.Client()
# Criar uma coleção para dados nutricionais
nutrition_collection = chroma_client.create_collection(
name="nutrition_facts",
embedding_function=embedding_functions.DefaultEmbeddingFunction()
)
# Preparar dados para embedding
for i, row in nutrition_data.iterrows():
# Criar um documento com informações nutricionais
document = f"Comida: {row['name']}, Calorias: {row['calories']}, Proteína: {row['protein_g']}g, Gordura: {row['fat_g']}g, Carboidratos: {row['carbohydrate_g']}g"
# Adicionar à coleção com ID único
nutrition_collection.add(
documents=[document],
ids=[f"food_{i}"]
)
```
Este código cria uma coleção ChromaDB e a popula com dados nutricionais, permitindo a busca semântica.
“ Criando Funções Nutricionais Especializadas: Cálculo de IMC e Calorias
Implemente duas funções nutricionais essenciais: cálculo de IMC e estimativa de necessidades calóricas diárias:
```python
def calculate_bmi(weight_kg, height_cm):
"""Calcular IMC dado peso em kg e altura em cm."""
height_m = height_cm / 100
bmi = weight_kg / (height_m * height_m)
# Determinar a categoria de IMC
if bmi < 18.5:
category = "Abaixo do peso"
elif bmi < 25:
category = "Peso normal"
elif bmi < 30:
category = "Sobrepeso"
else:
category = "Obesidade"
return {
"bmi": round(bmi, 1),
"category": category
}
def calculate_calorie_needs(weight_kg, height_cm, age, gender, activity_level):
"""Calcular necessidades calóricas diárias com base na equação de Harris-Benedict."""
# Taxa 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 atividade
activity_multipliers = {
"sedentary": 1.2, # Pouco ou nenhum exercício
"light": 1.375, # Exercício leve 1-3 dias/semana
"moderate": 1.55, # Exercício moderado 3-5 dias/semana
"active": 1.725, # Exercício intenso 6-7 dias/semana
"very_active": 1.9 # Exercício muito intenso e trabalho físico ou treinamento duas vezes ao dia
}
# Calcular o gasto energético total diário (GETD)
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 calorias
"weight_gain": round(tdee + 500) # Superávit de 500 calorias
}
```
A função `calculate_bmi` implementa a fórmula do Índice de Massa Corporal, e a função `calculate_calorie_needs` utiliza a equação de Harris-Benedict.
“ Implementando Function Calling com Gemini
Defina esquemas de função para o Gemini usar essas funções:
```python
nutrition_functions = [
{
"name": "calculate_bmi",
"description": "Calcular IMC (Índice de Massa Corporal) e determinar a categoria de peso",
"parameters": {
"type": "object",
"properties": {
"weight_kg": {
"type": "number",
"description": "Peso em quilogramas"
},
"height_cm": {
"type": "number",
"description": "Altura em centímetros"
}
},
"required": ["weight_kg", "height_cm"]
}
},
{
"name": "calculate_calorie_needs",
"description": "Calcular necessidades calóricas diárias com base em estatísticas pessoais",
"parameters": {
"type": "object",
"properties": {
"weight_kg": {
"type": "number",
"description": "Peso em quilogramas"
},
"height_cm": {
"type": "number",
"description": "Altura em centímetros"
},
"age": {
"type": "integer",
"description": "Idade em anos"
},
"gender": {
"type": "string",
"description": "Gênero (masculino ou feminino)"
},
"activity_level": {
"type": "string",
"description": "Nível de atividade (sedentário, leve, moderado, ativo, muito ativo)"
}
},
"required": ["weight_kg", "height_cm", "age", "gender", "activity_level"]
}
}
]
```
Esses esquemas definem o nome, a descrição e os parâmetros de cada função, permitindo que o LLM determine quando e como usá-los.
“ Construindo o Sistema RAG para Dados Nutricionais Precisos
O componente Retrieval-Augmented Generation (RAG) garante que as respostas sobre fatos nutricionais sejam fundamentadas no banco de dados. Recupere entradas relevantes do banco de dados de nutrição e forneça-as como contexto para o LLM:
```python
def nutrition_assistant(query):
"""Processar uma consulta relacionada à nutrição usando RAG e function calling."""
# Etapa 1: Recuperar informações nutricionais relevantes usando RAG
results = nutrition_collection.query(
query_texts=[query],
n_results=5
)
# Formatar as informações recuperadas
context = "\n".join(results["documents"][0])
```
Este código usa a função de consulta do ChromaDB para encontrar as 5 entradas mais relevantes para a consulta do usuário.
“ Juntando Tudo: A Função do Assistente Nutricional
Combine todos os componentes na função principal do assistente:
```python
def nutrition_assistant(query):
"""Processar uma consulta relacionada à nutrição usando RAG e function calling."""
# Etapa 1: Recuperar informações nutricionais relevantes usando RAG
results = nutrition_collection.query(
query_texts=[query],
n_results=5
)
# Formatar as informações recuperadas
context = "\n".join(results["documents"][0])
# Etapa 2: Configurar o modelo com function calling
model = genai.GenerativeModel(
model_name="gemini-1.5-pro",
generation_config={"temperature": 0.2}
)
# Etapa 3: Criar o prompt com contexto e consulta
prompt = f"""Você é um assistente nutricional prestativo. Use as seguintes informações nutricionais para ajudar a responder à consulta.
INFORMAÇÕES NUTRICIONAIS:
{context}
CONSULTA DO USUÁRIO: {query}
Se o usuário estiver perguntando sobre cálculos de IMC ou calorias, use a função apropriada.
Para outras perguntas nutricionais, forneça conselhos úteis com base no contexto e em seu conhecimento.
"""
# Etapa 4: Gerar resposta com chamadas de função potenciais
response = model.generate_content(
prompt,
tools=nutrition_functions
)
# Etapa 5: Processar chamadas de função, se 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
# Executar a função apropriada
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"]
)
# Gerar uma nova resposta com o resultado da função
final_prompt = f"""Você é um assistente nutricional prestativo. Um usuário perguntou: "{query}"
Você chamou a função {function_name} que retornou este resultado:
{result}
Por favor, forneça uma resposta útil e conversacional que explique esses resultados e dê conselhos nutricionais apropriados.
Inclua recomendações específicas de alimentos com base nas informações nutricionais, se relevante.
"""
final_response = model.generate_content(final_prompt)
return final_response.text
# Se nenhuma chamada de função foi feita, retorne a resposta original
return response.text
```
Esta função recupera informações nutricionais, configura o modelo Gemini, cria um prompt, gera uma resposta e processa chamadas de função, se necessário.
“ Testando com Consultas do Mundo Real
Teste o Nutricionista Pessoal de IA com consultas do mundo real:
```python
test_queries = [
"Qual o valor nutricional de uma maçã?",
"Você pode calcular meu IMC? Tenho 70kg e 175cm de altura.",
"Quantas calorias devo comer? Sou um homem de 30 anos, 80kg, 180cm e moderadamente ativo.",
"Quais são alguns alimentos ricos em proteínas para ganho muscular?",
"Você pode sugerir um plano alimentar para perda de peso?"
]
for query in test_queries:
print(f"\nConsulta: {query}")
print("-" * 50)
response = nutrition_assistant(query)
print(response)
print("=" * 80)
```
Esses exemplos demonstram a versatilidade do Nutricionista Pessoal de IA, lidando com consultas factuais, realizando cálculos e fornecendo recomendações personalizadas.
“ Melhorias Futuras e Conclusão
Melhorias potenciais incluem expandir o banco de dados nutricional, melhorar a precisão das estimativas de calorias, adicionar suporte para requisitos dietéticos mais complexos e integrar com dispositivos vestíveis. O Assistente Nutricionista Pessoal de IA combina LLMs, function calling e RAG para fornecer orientação nutricional personalizada. Este sistema pode responder a perguntas sobre nutrição, calcular IMC e necessidades calóricas, e fornecer recomendações personalizadas, demonstrando o potencial da IA na saúde pessoal.
Utilizamos cookies essenciais para o funcionamento do nosso site. Para melhorá-lo, gostaríamos de usar cookies adicionais para nos ajudar a entender como os visitantes o utilizam, medir o tráfego de plataformas de mídia social e personalizar sua experiência. Alguns dos cookies que usamos são fornecidos por terceiros. Para aceitar todos os cookies, clique em 'Aceitar'. Para rejeitar todos os cookies opcionais, clique em 'Rejeitar'.
Comentário(0)