Логотип AiToolGo

Создайте своего собственного 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 для предоставления персонализированных рекомендаций по питанию. Эта система может отвечать на вопросы о питании, рассчитывать ИМТ и потребности в калориях, а также предоставлять персонализированные рекомендации, демонстрируя потенциал ИИ в области личного здоровья.

 Оригинальная ссылка: https://www.linkedin.com/pulse/building-your-personal-ai-nutritionist-smart-meal-planner-ahmed-ali-qudjf

Комментарий(0)

user's avatar

      Похожие учебные материалы

      Связанные инструменты