Создайте своего собственного AI-диетолога: LLM, RAG и персонализированное питание
Углубленное обсуждение
Технический, но доступный
0 0 1
Эта статья проведет читателей через процесс создания персонализированного AI-диетолога с использованием передовых AI-технологий, таких как LLM, вызов функций и RAG. В ней подробно описан технологический стек, настройка среды и реализация специализированных функций питания, что в итоге приводит к созданию функционального ассистента, способного отвечать на запросы о питании, рассчитывать ИМТ и предоставлять персонализированные диетические рекомендации.
основные моменты
уникальные идеи
практическое применение
ключевые темы
ключевые выводы
результаты обучения
• основные моменты
1
Комплексное руководство по созданию AI-ассистента по питанию
2
Интеграция передовых AI-технологий для персонализированных рекомендаций по питанию
3
Практическая реализация с реальными приложениями и примерами
• уникальные идеи
1
Объединяет LLM, вызов функций и RAG для повышения точности рекомендаций по питанию
2
Демонстрирует, как создать базу знаний о питании с возможностью поиска с использованием векторных представлений
• практическое применение
Статья предоставляет пошаговый подход к созданию функционального AI-диетолога, делая науку о питании доступной и персонализированной для пользователей.
• ключевые темы
1
Большие языковые модели (LLM)
2
Вызов функций в AI
3
Генерация с дополненным поиском (RAG)
• ключевые выводы
1
Практическое применение ИИ в управлении личным здоровьем
2
Детальная реализация функций питания для точных расчетов
3
Инновационное использование AI-технологий для улучшения взаимодействия пользователя с данными о питании
• результаты обучения
1
Понять, как интегрировать LLM с вызовом функций для практических приложений.
2
Научиться создавать базу знаний о питании с использованием векторных представлений.
3
Получить представление о создании персонализированных AI-ассистентов для здоровья и питания.
“ Введение: Необходимость персонального AI-диетолога
В сегодняшних напряженных условиях поддержание сбалансированной диеты становится все труднее. Противоречивые советы по питанию и модные диеты часто сбивают людей с толку. Персональный AI-диетолог, доступный 24/7, может отвечать на конкретные вопросы о питании, рассчитывать потребности в питательных веществах и предоставлять персонализированные рекомендации. Это стало возможным благодаря достижениям в области искусственного интеллекта, в частности, большим языковым моделям (LLM) и методам поиска. Эта статья проведет вас через процесс создания собственного AI-ассистента-диетолога, объединяющего LLM Gemini от Google со специализированными функциями питания и базой знаний о реальных данных о питании. Ассистент может отвечать на вопросы о питательной ценности продуктов, рассчитывать ИМТ, оценивать ежедневные потребности в калориях, рекомендовать продукты на основе критериев и предоставлять научно обоснованные советы по питанию.
“ Понимание технологического стека: LLM, вызов функций и RAG
Наш AI-ассистент-диетолог работает на трех ключевых технологиях: больших языковых моделях (LLM), таких как Gemini 1.5 Pro от Google, вызове функций (Function Calling) и генерации с дополненным поиском (Retrieval-Augmented Generation, RAG). LLM понимают и генерируют текст, похожий на человеческий, преуспевая в обработке запросов на естественном языке о питании. Вызов функций позволяет LLM использовать специализированные расчеты, такие как ИМТ или потребности в калориях. RAG основывает ответы ассистента на фактических данных о питании, извлекая релевантную информацию из базы данных о питании. Эти технологии работают вместе, чтобы понимать запросы пользователей, извлекать факты о питании и выполнять точные расчеты.
“ Настройка среды разработки
Для настройки среды разработки установите необходимые библиотеки и настройте доступ к API. Используйте следующие команды:
```bash
!pip install -U -q "google-genai==1.7.0"
!pip install chromadb
```
Эти команды устанавливают Python SDK для Google Generative AI и ChromaDB для векторной базы данных. Затем настройте доступ к Google Gemini API:
```python
import google.generativeai as genai
import os
# Настройка API-ключа
GOOGLE_API_KEY = "YOUR_API_KEY" # Замените на ваш фактический API-ключ
genai.configure(api_key=GOOGLE_API_KEY)
```
Замените `YOUR_API_KEY` на ваш фактический ключ Gemini API с веб-сайта Google AI Studio.
“ Создание базы знаний о питании
Создайте базу знаний о питании, загрузив полный набор данных о питательной ценности с помощью pandas:
```python
import pandas as pd
import numpy as np
# Загрузка данных о питании
nutrition_data = pd.read_csv('/kaggle/input/nutrition-facts-for-3636-foods/nutrition_facts.csv')
nutrition_data.head()
```
Этот набор данных содержит подробную информацию о питательной ценности более 3600 продуктов. Преобразуйте эти данные в векторные представления (embeddings) с помощью ChromaDB:
```python
# Создание векторных представлений для данных о питании
from chromadb.utils import embedding_functions
import chromadb
# Инициализация клиента ChromaDB
chroma_client = chromadb.Client()
# Создание коллекции для данных о питании
nutrition_collection = chroma_client.create_collection(
name="nutrition_facts",
embedding_function=embedding_functions.DefaultEmbeddingFunction()
)
# Подготовка данных для векторных представлений
for i, row in nutrition_data.iterrows():
# Создание документа с информацией о питании
document = f"Продукт: {row['name']}, Калории: {row['calories']}, Белки: {row['protein_g']}г, Жиры: {row['fat_g']}г, Углеводы: {row['carbohydrate_g']}г"
# Добавление в коллекцию с уникальным ID
nutrition_collection.add(
documents=[document],
ids=[f"food_{i}"]
)
```
Этот код создает коллекцию ChromaDB и заполняет ее данными о питании, что позволяет выполнять семантический поиск.
“ Создание специализированных функций питания: расчет ИМТ и калорий
Реализуйте две основные функции питания: расчет ИМТ и оценку ежедневных потребностей в калориях:
```python
def calculate_bmi(weight_kg, height_cm):
"""Рассчитать ИМТ, учитывая вес в кг и рост в см."""
height_m = height_cm / 100
bmi = weight_kg / (height_m * height_m)
# Определение категории ИМТ
if bmi < 18.5:
category = "Недостаточный вес"
elif bmi < 25:
category = "Нормальный вес"
elif bmi < 30:
category = "Избыточный вес"
else:
category = "Ожирение"
return {
"bmi": round(bmi, 1),
"category": category
}
def calculate_calorie_needs(weight_kg, height_cm, age, gender, activity_level):
"""Рассчитать ежедневные потребности в калориях на основе уравнения Харриса-Бенедикта."""
# Базовый метаболизм (BMR)
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)
# Множители активности
activity_multipliers = {
"sedentary": 1.2, # Малоподвижный образ жизни или отсутствие упражнений
"light": 1.375, # Легкие упражнения 1-3 раза в неделю
"moderate": 1.55, # Умеренные упражнения 3-5 раз в неделю
"active": 1.725, # Интенсивные упражнения 6-7 раз в неделю
"very_active": 1.9 # Очень интенсивные упражнения и физическая работа или тренировки дважды в день
}
# Расчет общего суточного расхода энергии (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), # Дефицит в 500 калорий
"weight_gain": round(tdee + 500) # Избыток в 500 калорий
}
```
Функция `calculate_bmi` реализует формулу индекса массы тела, а функция `calculate_calorie_needs` использует уравнение Харриса-Бенедикта.
“ Реализация вызова функций с Gemini
Определите схемы функций для Gemini, чтобы использовать эти функции:
```python
nutrition_functions = [
{
"name": "calculate_bmi",
"description": "Рассчитать ИМТ (индекс массы тела) и определить категорию веса",
"parameters": {
"type": "object",
"properties": {
"weight_kg": {
"type": "number",
"description": "Вес в килограммах"
},
"height_cm": {
"type": "number",
"description": "Рост в сантиметрах"
}
},
"required": ["weight_kg", "height_cm"]
}
},
{
"name": "calculate_calorie_needs",
"description": "Рассчитать ежедневные потребности в калориях на основе личных данных",
"parameters": {
"type": "object",
"properties": {
"weight_kg": {
"type": "number",
"description": "Вес в килограммах"
},
"height_cm": {
"type": "number",
"description": "Рост в сантиметрах"
},
"age": {
"type": "integer",
"description": "Возраст в годах"
},
"gender": {
"type": "string",
"description": "Пол (мужской или женский)"
},
"activity_level": {
"type": "string",
"description": "Уровень активности (sedentary, light, moderate, active, very_active)"
}
},
"required": ["weight_kg", "height_cm", "age", "gender", "activity_level"]
}
}
]
```
Эти схемы определяют имя, описание и параметры каждой функции, позволяя LLM определять, когда и как их использовать.
“ Создание системы RAG для точных данных о питании
Компонент Retrieval-Augmented Generation (RAG) гарантирует, что ответы о фактах питания основаны на базе данных. Извлекайте релевантные записи из базы данных о питании и предоставляйте их в качестве контекста для LLM:
```python
def nutrition_assistant(query):
"""Обработка запроса, связанного с питанием, с использованием RAG и вызова функций."""
# Шаг 1: Извлечение релевантной информации о питании с помощью RAG
results = nutrition_collection.query(
query_texts=[query],
n_results=5
)
# Форматирование извлеченной информации
context = "\n".join(results["documents"][0])
```
Этот код использует функцию запроса ChromaDB для поиска 5 наиболее релевантных записей для запроса пользователя.
“ Собираем все вместе: функция ассистента по питанию
Объедините все компоненты в основной функции ассистента:
```python
def nutrition_assistant(query):
"""Обработка запроса, связанного с питанием, с использованием RAG и вызова функций."""
# Шаг 1: Извлечение релевантной информации о питании с помощью RAG
results = nutrition_collection.query(
query_texts=[query],
n_results=5
)
# Форматирование извлеченной информации
context = "\n".join(results["documents"][0])
# Шаг 2: Настройка модели с вызовом функций
model = genai.GenerativeModel(
model_name="gemini-1.5-pro",
generation_config={"temperature": 0.2}
)
# Шаг 3: Создание запроса с контекстом и запросом пользователя
prompt = f"""Вы — полезный ассистент по питанию. Используйте следующую информацию о питании для ответа на запрос.
ИНФОРМАЦИЯ О ПИТАНИИ:
{context}
ЗАПРОС ПОЛЬЗОВАТЕЛЯ: {query}
Если пользователь спрашивает о расчете ИМТ или калорий, используйте соответствующую функцию.
Для других вопросов о питании предоставьте полезные советы, основанные на контексте и ваших знаниях.
"""
# Шаг 4: Генерация ответа с возможными вызовами функций
response = model.generate_content(
prompt,
tools=nutrition_functions
)
# Шаг 5: Обработка вызовов функций, если они есть
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
# Выполнение соответствующей функции
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"]
)
# Генерация нового ответа с результатом функции
final_prompt = f"""Вы — полезный ассистент по питанию. Пользователь спросил: "{query}"
Вы вызвали функцию {function_name}, которая вернула следующий результат:
{result}
Пожалуйста, предоставьте полезный, разговорный ответ, объясняющий эти результаты и дающий соответствующие советы по питанию.
Включите конкретные рекомендации по продуктам на основе информации о питании, если это уместно.
"""
final_response = model.generate_content(final_prompt)
return final_response.text
# Если вызов функции не был сделан, вернуть исходный ответ
return response.text
```
Эта функция извлекает информацию о питании, настраивает модель Gemini, создает запрос, генерирует ответ и обрабатывает вызовы функций при необходимости.
“ Тестирование на реальных запросах
Протестируйте персонального AI-диетолога на реальных запросах:
```python
test_queries = [
"Какова питательная ценность яблока?",
"Можете ли вы рассчитать мой ИМТ? Я вешу 70 кг, рост 175 см.",
"Сколько калорий мне следует потреблять? Я 30-летний мужчина, вешу 80 кг, рост 180 см, умеренно активен.",
"Какие продукты богаты белком для наращивания мышечной массы?",
"Можете ли вы предложить план питания для похудения?"
]
for query in test_queries:
print(f"\nЗапрос: {query}")
print("-" * 50)
response = nutrition_assistant(query)
print(response)
print("=" * 80)
```
Эти примеры демонстрируют универсальность персонального AI-диетолога, обрабатывая фактические запросы, выполняя расчеты и предоставляя персонализированные рекомендации.
“ Будущие улучшения и заключение
Потенциальные улучшения включают расширение базы данных о питании, повышение точности оценки калорий, добавление поддержки более сложных диетических требований и интеграцию с носимыми устройствами. AI-ассистент-диетолог объединяет LLM, вызов функций и RAG для предоставления персонализированных рекомендаций по питанию. Эта система может отвечать на вопросы о питании, рассчитывать ИМТ и потребности в калориях, а также предоставлять персонализированные рекомендации, демонстрируя потенциал ИИ в области личного здоровья.
Мы используем файлы cookie, необходимые для работы нашего сайта. Чтобы улучшить наш сайт, мы хотели бы использовать дополнительные файлы cookie, которые помогут нам понять, как посетители используют его, измерить трафик на наш сайт из социальных сетей и персонализировать ваш опыт. Некоторые из используемых нами файлов cookie предоставляются третьими сторонами. Чтобы принять все файлы cookie, нажмите 'Принять'. Чтобы отклонить все необязательные файлы cookie, нажмите 'Отклонить'.
Комментарий(0)