Приложение Food Analyser — это персонализированное веб-приложение GenAI о питании для ваших покупок и кулинарных рецептов, созданное с использованием бессерверной архитектуры и возможностей генеративного искусственного интеллекта. Впервые он был создан как победитель хакатона AWS во Франции 2024 года, а затем представлен в качестве стенда на саммите AWS в Париже 2024 года.
Серверная часть приложения создана с использованием сервисов AWS, таких как:
Приложение спроектировано так, чтобы иметь минимальное количество кода, быть расширяемым, масштабируемым и экономичным. Он использует отложенную загрузку для снижения затрат и обеспечения наилучшего взаимодействия с пользователем.
Мы разработали этот экспонат для создания интерактивного бессерверного приложения с использованием генеративных сервисов искусственного интеллекта.
Персонализированная информация о продукте . Хотите знать, что содержится в продукте и полезен ли он для вас? Просто отсканируйте штрих-код с помощью приложения, чтобы получить поясняющий список ингредиентов/аллергенов и персонализированную сводку с учетом ваших предпочтений.
Генератор персонализированных рецептов : сфотографируйте ингредиенты в своем холодильнике, и приложение с их использованием создаст рецепты на основе ваших предпочтений.
Архитектуру приложения можно разделить на 4 блока:
Реализация : использование AWS Lambda для серверной логики, Amazon Bedrock в качестве платформы для создания генеративного искусственного интеллекта (GenAI), Anthropic Claude в качестве модели большого языка (LLM) и Stable Diffusion XL от StabilityAI в качестве модели диффузии для генерации изображений.
Разработка модели искусственного интеллекта . Выбор модели LLM повлиял на качество ответа и задержку. В конечном итоге мы выбрали Anthropic Claude 3 Haiku как хорошее соотношение задержки и качества.
Изображения, созданные с помощью искусственного интеллекта . Запрос на изображение очень чувствителен, и было непросто создать изображение, которое действительно подчеркивает питательные свойства продуктов. Для создания подсказки мы использовали первый LLM, который создавал подсказку на основе питательных свойств продукта. Этот метод аналогичен самозапросу векторных баз данных. Использование многокадровой подсказки также помогло значительно улучшить качество подсказки.
Стратегия : «Не изобретать велосипед».
Реализация : Сканеры штрих-кода существуют уже давно, мы выбрали библиотеку с открытым исходным кодом, совместимую с нашим стеком. Из-за нехватки времени мы не тратили много времени на сравнение библиотек, сосредоточившись на наличии работающего прототипа, а не на поиске идеального. «Идеальное – враг хорошего».
Стратегия : Принимая во внимание разнообразие предпочтений пользователей и диетических потребностей, наше приложение включает в себя надежную функцию персонализации. Помимо предоставления необработанных данных, приложение призвано информировать пользователей о последствиях их выбора для питания.
Реализация : пользователи чувствуют причастность и связь, поскольку приложение адаптирует свои идеи в соответствии с их индивидуальными целями в отношении здоровья и диетическими ограничениями. Включение краткого и информативного контента в приложение гарантирует, что пользователи понимают значение различных пищевых компонентов. Этот образовательный аспект превращает приложение в инструмент обучения, способствующий более глубокой связи с пользователями, стремящимися повысить свою грамотность в области питания.
Стратегия . Чтобы привлечь внимание пользователей и эффективно передать ключевую информацию о питании, наше приложение использует изображения, созданные искусственным интеллектом.
Реализация : Amazon Bedrock предлагает готовые возможности для разработчиков по созданию визуально ярких представлений отсканированных продуктов. Например, если продукт содержит чрезмерное количество сахара, изображение искусственного интеллекта окружает его визуальным изображением сахара, служащим привлекательным и запоминающимся визуальным сигналом.
Стратегия : Извлечение ингредиентов из изображения, хорошо работает с фруктами и овощами.
Реализация : мы используем Anthropic Claude 3 Sonnet на Amazon Bedrock с его возможностями видения, позволяющими извлекать из изображения только элементы пищи. Это позволяет нам сосредоточиться на элементах еды и игнорировать фон или другие элементы изображения. Claude 3 — мультимодальная модель, которая может обрабатывать как текст, так и изображения. Результатом является список ингредиентов, присутствующих на изображении.
Оперативное проектирование : чтобы раскрыть весь потенциал модели, мы используем системную подсказку. Системная подсказка — это способ предоставить Клоду контекст, инструкции и рекомендации перед тем, как задать ему вопрос или задачу. Используя системную подсказку, вы можете подготовить почву для разговора, указав роль, личность, тон Клода или любую другую соответствующую информацию, которая поможет ему лучше понять действия пользователя и отреагировать на него.
system_prompt = "You have perfect vision and pay great attention to ingredients in each picture, you are very good at detecting food ingredients on images"
Стратегия : создать 3 рецепта из ингредиентов, совпадающих на картинках:
Реализация : мы используем Claude 3 Sonnet для создания 3 рецептов. Каждый рецепт содержит следующую информацию в формате JSON:
{
"recipe_title" : " Succulent Grilled Cheese Sandwich " ,
"description" : " A classic comforting and flavorful dish, perfect for a quick meal " ,
"difficulty" : " easy " ,
"ingredients" : [ " bread " , " cheese " , " butter " ],
"additional_ingredients" : [ " ham " , " tomato " ],
"preparation_time" : 5 ,
"cooking_time" : 6
}
Стратегия : Создайте пошаговый рецепт, которому пользователь сможет следовать.
Реализация : мы используем Anthropic Claude 3 Haiku на Amazon Bedrock для создания пошагового рецепта. Шаги передаются пользователю, чтобы уменьшить задержку ответа. Мы используем потоковую передачу URL-адресов лямбда-выражений. Этот метод обеспечивает более плавный доступ к текстовому контенту, улучшая взаимодействие с пользователем.
Выходной формат — файл Markdown для облегчения отображения рецепта на веб-сайте. Это также значительно упрощает анализ рецепта во внешнем интерфейсе при использовании потокового режима.
Выбор правильной модели ИИ
Задача : выбор языковой модели (LM) существенно повлиял как на задержку ответа, так и на качество, что стало решающим моментом для принятия решения.
Решение . После всесторонней оценки различных моделей мы выбрали следующие модели Anthropic Claude для различных компонентов приложения:
Используйте отложенную загрузку для снижения затрат и пропускной способности.
Задача : Генеративный искусственный интеллект требует больших затрат по цене и пропускной способности. Мы хотели быть экономными и эффективными при проведении насыщенных соревнований.
Решение . Использование отложенной загрузки с ключом, являющимся хешем приглашения, позволяет нам снизить затраты и быстрее доставить ответ.
Оперативное проектирование для создания изображений с помощью искусственного интеллекта
Задача : Создание подсказки для создания изображений ИИ, которые эффективно подчеркивали бы особенности питания, представляло собой сложную задачу.
Решение : Используя двухэтапный подход, мы использовали первый LLM для создания подсказки, основанной на питательных свойствах продукта. Этот метод самозапроса (сродни процессу самозапроса для векторной базы данных) был дополнен многократными подсказками. Этот метод значительно улучшил качество и релевантность создаваемых изображений, гарантируя, что пользователи получат визуально убедительное представление функций продукта.
Сложность персонализации пользователя
Задача : Интеграция персонализированных диетических предпочтений и ограничений в модель представляла собой сложную задачу.
Решение : Чтобы улучшить понимание LLM, мы динамически включили в нашу подсказку заголовок, содержащий персонализированные данные об аллергии и диете. Такой подход значительно повысил точность и актуальность ответов LLM, обеспечив индивидуальный подход для пользователей. Персонализированные подсказки стали краеугольным камнем в предоставлении точной и актуальной информации с учетом индивидуальных предпочтений.
Многоязычная поддержка
Задача : представить приложение на нескольких языках.
Решение : используется тот же запрос, но LLM дает указание генерировать выходные данные на определенном языке в соответствии с языковыми предпочтениями пользователя (английский/французский).
URL-адрес AWS Lambda и Amazon CloudFront
Проблема : вызов LLM для выполнения некоторых задач в режиме ответа на запрос может быть медленным.
Решение . Чтобы устранить 30-секундный тайм-аут конечной точки API-шлюза, выбранный подход предполагает использование URL-адреса AWS Lambda через Amazon CloudFront. В Amazon CloudFront для каждого запроса запускается функция Lambda@Edge, отвечающая за проверку аутентификации пользователя в Amazon Cognito. Если аутентификация прошла успешно, функция Lambda@Edge подписывает запрос на URL-адрес Lambda (который использует AWS_IAM
в качестве метода аутентификации). Хотя использование URL-адреса Lambda предлагает осуществимое решение, важно признать, что выбор AWS AppSync представляет собой альтернативу, предлагающую дополнительные преимущества. AWS AppSync предлагает альтернативное решение со встроенными механизмами аутентификации и авторизации, которые полностью удовлетворяют эти потребности. Однако для этого демонстрационного приложения мы решили вместо этого использовать URL-адрес Lambda.
Синхронный/асинхронный ответ Amazon Bedrock
Задача : получение ответа от Amazon Bedrock может происходить либо в режиме запроса/ответа, либо в потоковом режиме, в котором Lambda инициирует потоковую передачу ответа вместо ожидания формирования всего ответа.
Решение : Некоторые разделы приложения работают в режиме запроса/ответа (например, Product ingredients description
или получение трех предложений рецептов), в то время как другая часть ( Product summary
, Getting the Step-by-Step Recipe
) использует потоковый режим для демонстрации обеих реализаций. методы.
Иллюстрированные примеры использования приложения GenAi
npm install
us-east-1
. cdk deploy
Прежде чем получить доступ к приложению, убедитесь, что вы создали учетную запись пользователя в Amazon Cognito. Для этого перейдите в консоль AWS, затем в Amazon Cognito и найдите пул пользователей с именем, похожим на AuthenticationFoodAnalyzerUserPoolXXX
.
Проверьте выходные данные стека на наличие URL-адреса, напоминающего Food analyzer app.domainName
. Вставьте этот URL-адрес в свой браузер, войдите в систему под ранее созданным пользователем и начните пользоваться приложением.
Вы можете запустить это приложение Vite React локально, выполнив следующие действия.
Следуйте инструкциям выше, чтобы развернуть приложение cdk.
Возьмите файл aws-exports.json
из конечной точки распространения Amazon CloudFront, полученный из выходных данных CDK, и сохраните его в папке ./resources/ui/public/
.
URL-адрес выглядит примерно так:
https://dxxxxxxxxxxxx.cloudfront.net/aws-exports.json
cd resources/ui
npm run dev
Node JS 18+ должен быть установлен на машине развертывания. (Инструкции)
AWS CLI 2+ должен быть установлен на машине развертывания. (Инструкции)
Запросите доступ к моделям Anthropic Claude и Stable Diffusion XL на Amazon Bedrock.
Этот проект распространяется по лицензии MIT-0. См. файл ЛИЦЕНЗИИ.