Как я создал Telegram-бота, который помогает готовить из любых продуктов

в 7:10, , рубрики: AI, aiogram 3, mistral, python

Предыстория создания бота «CyberChiefCooker»

Идея создания «CyberChiefCooker» возникла у меня в студенческие годы, когда я часто оказывался в ситуации, когда нужно было готовить, а под рукой был лишь набор случайных продуктов. Жизнь студента была насыщенной и ограниченной в плане финансов, поэтому зачастую приходилось выкручиваться из того, что есть в холодильнике. Однажды я поймал себя на мысли, что совсем не знаю, что можно приготовить из этих оставшихся продуктов, и эта мысль стала началом пути к созданию бота.

Я обсуждал подобные проблемы со своими друзьями и однокурсниками, и мы часто шутили, что неплохо было бы иметь «умного помощника», который мог бы сразу сказать, что можно приготовить. Эти разговоры и личные ситуации вдохновили меня на создание «CyberChiefCooker» — бота, который может помочь людям с идеями для блюд из имеющихся продуктов.

Создание умного бота «CyberChiefCooker» для генерации рецептов: как локализация улучшает пользовательский опыт

Эта идея, зародившаяся в студенческие годы, трансформировалась в желание предоставить пользователям удобный способ использования имеющихся продуктов для приготовления различных блюд. С увеличением интереса к технологиям искусственного интеллекта стало очевидно, что многие задачи, связанные с приготовлением пищи, можно значительно упростить и автоматизировать. Мы хотели создать инструмент, который был бы доступен и полезен каждому, независимо от его кулинарных навыков, и таким образом появился «CyberChiefCooker» — бот, способный адаптироваться под каждого пользователя и его предпочтения.

С каждым днем технологии искусственного интеллекта проникают в разные аспекты нашей жизни, и Telegram‑боты не стали исключением. Сегодня я расскажу о процессе создания бота «CyberChiefCooker» — уникального ассистента, который помогает пользователям на основе имеющихся у них продуктов приготовить блюдо, предложив подходящий рецепт. Особенное внимание я уделю тому, как была реализована поддержка локализации, чтобы улучшить пользовательский опыт и сделать интерфейс бота более удобным и доступным для пользователей из разных стран.

Введение в функционал бота "CyberChiefCooker"

«CyberChiefCooker» — это мощный Telegram‑бот, который генерирует рецепты, используя продукты, которые есть у пользователя. Вы можете отправить список продуктов текстом, голосовым сообщением или даже фотографией. Бот распознает продукты и предложит рецепт разной степени сложности. Для работы с ботом используется как текстовый ввод, так и голосовой, что позволяет значительно расширить аудиторию пользователей, делая взаимодействие с ботом максимально интуитивным и простым.

Особенностью этого бота является возможность выбрать уровень сложности рецепта в зависимости от количества доступных ингредиентов и умений пользователя. Благодаря технологии искусственного интеллекта и локализации на разные языки, «CyberChiefCooker» предоставляет удобный и интуитивно понятный интерфейс как для русскоязычных, так и для англоязычных пользователей. Поддержка локализации делает бота более универсальным, что позволяет ему завоевывать популярность в разных странах и культурах.

Локализация как основа удобного интерфейса

Один из ключевых аспектов, который был внедрен в «CyberChiefCooker», — это поддержка локализации. Я понимаю, что для многих пользователей важно, чтобы интерфейс был доступен на их родном языке, чтобы чувствовать себя комфортно и уверенно при взаимодействии с ботом. Поэтому была разработана система перевода сообщений и кнопок, которая позволяет адаптировать бота к предпочтениям пользователей и создать ощущение персонализированного опыта.

В основе реализации лежит файл `translate.py`, который содержит функцию `localize()`. Эта функция принимает два аргумента: текст сообщения и язык. В зависимости от языка она возвращает либо переведенную строку, либо оригинальный текст, если перевода нет. Это упрощает добавление новых языков и делает систему переводов гибкой и легко настраиваемой.

Пример использования функции локализации:

from translate import localize

message = localize("Choose your language:", "ru")
print(message)  # Вывод: "Выберите ваш язык:"

Как видно из примера, используя функцию `localize()`, бот адаптирует свои сообщения под выбранный пользователем язык. Это особенно важно для создания удобного и понятного интерфейса для пользователей разных стран, что позволяет каждому пользователю чувствовать себя как дома при работе с ботом.

Основное меню на двух языках

Основное меню бота на английском языке

Основное меню бота на английском языке
Основное меню бота на русском язык

Основное меню бота на русском язык

Примеры интерфейса и удобство использования

Для улучшения пользовательского взаимодействия, бот также поддерживает инлайн‑клавиатуры, которые локализованы в зависимости от выбранного языка. Например, после активации команды пользователь видит кнопки «Главное меню» или «Buy recipe units» в зависимости от выбранного языка. Это позволяет максимально эффективно ориентироваться в возможностях бота, не испытывая трудностей с переводом.

Клавиатуры генерируются функцией `generate_inline_keyboard()`, которая создает кнопки с нужным текстом в зависимости от выбранного пользователем языка. Пример кнопок для основного меню:

from utils import generate_inline_keyboard

buttons = generate_inline_keyboard([
    [(localize("Main menu", language), "Main_menu")],
    [(localize("Buy recipe units", language), "Pay_recipe_units")]
])
Клавиатура выводиться в случает нулевого баланса

Клавиатура выводиться в случает нулевого баланса

Эта система позволяет гибко адаптировать интерфейс бота, предоставляя пользователям ощущение заботы и индивидуального подхода, что в свою очередь повышает их доверие и удовлетворенность. Благодаря такому подходу пользователи могут легко и быстро найти нужные функции, не отвлекаясь на языковые барьеры.

Генерация рецептов: от распознавания продуктов до выбора уровня сложности

Процесс использования бота «CyberChiefCooker» выглядит следующим образом:

  1. Пользователь отправляет список продуктов (текстом, голосовым сообщением или фото).

  2. Бот распознает продукты и предлагает пользователю выбрать уровень сложности рецепта.

  3. Пользователь выбирает уровень сложности, и бот предоставляет детализированный рецепт.

Для распознавания продуктов используется модуль `utils.py`, который отвечает за анализ изображений и голосовых сообщений. Например, функция `recognize_products_in_image_ru()` позволяет распознавать продукты на изображении с помощью модели нейросети Pixtral. Эта модель нейросети обучена специально для того, чтобы эффективно распознавать продукты питания на изображениях, предоставленных пользователем. Pixtral — это мощная нейросеть, разработанная для работы с визуальными данными, что позволяет ей с высокой точностью определять различные виды продуктов и ингредиентов.

Пример функции для распознавания продуктов на изображении на русском языке:

async def recognize_products_in_image_ru(image_path, api_key):
    base64_image = encode_image(image_path)
    if not base64_image:
        return None

    client = Mistral(api_key=api_key)
    messages = [
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "Перечисли только продукты питания на этом изображении на русском языке через запятую. Не перечисляй объекты не являющиеся продуктами питания."
                },
                {
                    "type": "image_url",
                    "image_url": f"data:image/jpeg;base64,{base64_image}"
                }
            ]
        }
    ]
    chat_response = await client.chat.complete_async(model="pixtral-12b-2409", messages=messages)
    response_text = chat_response.choices[0].message.content
    return response_text.strip()
Как я создал Telegram-бота, который помогает готовить из любых продуктов - 4

Для голосовых сообщений применяется транскрипция, выполняемая с помощью модели «whisper‑large‑v3-turbo», которая используется для точного распознавания речи. Эта модель нейросети позволяет с высокой точностью преобразовать голосовой ввод в текст, что значительно упрощает взаимодействие с ботом для тех пользователей, которые предпочитают голосовые команды. После успешной транскрипции бот анализирует список продуктов и переходит к следующему шагу — выбору уровня сложности рецепта.

def transcribe_audio(filename, api_key):
    with open(filename, "rb") as file:
        response = requests.post(
            "https://api.groq.com/openai/v1/audio/transcriptions",
            headers={"Authorization": f"Bearer {api_key}"},
            files={"file": file},
            data={"model": "whisper-large-v3-turbo", "language": "ru"}
        )

    if response.status_code == 200:
        return response.json().get("text", "")
    else:
        print(f"Ошибка транскрипции: {response.status_code}")
        return None
Как я создал Telegram-бота, который помогает готовить из любых продуктов - 5

Пример результата работы бота

После того как пользователь выбрал уровень сложности, бот генерирует рецепт. Например, при выборе уровня сложности «Средне» и отправки такого списка продуктов как: Куриное филе, картофель, чеснок, бот может предложить следующий рецепт:

Вывод рецепта скрин 1

Вывод рецепта скрин 1
Как я создал Telegram-бота, который помогает готовить из любых продуктов - 7

Для реализации локализации в боте использовалась структура словаря, в котором ключами являются оригинальные сообщения на английском языке, а значениями — переводы на русский.

В `translate.py` реализована структура следующего типа:

translations = {
    "ru": {
        "Choose your language:": "Выберите ваш язык:",
        "Main menu": "Главное меню",
        "Buy recipe units": "Купить рецепт-юниты",
        # ... и другие переводы
    },
    "en": {
        "Choose your language:": "Choose your language:",
        "Main menu": "Main menu",
        "Buy recipe units": "Buy recipe units",
        # ... и другие переводы
    }
}

Система достаточно проста, но позволяет легко добавлять новые языки и сообщения. При необходимости добавления нового языка достаточно создать новый словарь внутри `translations`, добавив туда соответствующие переводы. Благодаря такой гибкой системе, бот может легко масштабироваться и адаптироваться к нуждам пользователей в разных странах, предлагая им привычный и понятный интерфейс.

Используемый технологический стек

При разработке «CyberChiefCooker» использовался современный технологический стек, который включает в себя различные технологии и инструменты для обработки данных, машинного обучения и создания удобного интерфейса. Основные технологии, используемые в проекте:

  • Python — основной язык программирования, используемый для написания кода бота и его логики.

  • Aiogram — библиотека для разработки Telegram‑ботов на Python, которая обеспечивает легкую интеграцию с Telegram API и управление сообщениями.

  • Groq API и Mistral — для генерации текстов и взаимодействия с моделями искусственного интеллекта, такими как Pixtral для анализа изображений и Whisper для распознавания речи.

  • Pixtral — модель нейросети, обученная для распознавания объектов на изображениях. Используется для идентификации продуктов на фотографиях, отправленных пользователями.

  • Whisper — модель распознавания речи, применяемая для преобразования голосовых сообщений в текст.

  • Redis — используется в качестве хранилища состояний бота, что обеспечивает удобное управление сессиями пользователей.

  • Docker — для контейнеризации и развертывания бота, что позволяет поддерживать его работоспособность на разных платформах и окружениях.

Такой подход позволяет создать надежное и масштабируемое решение, которое легко развивать и поддерживать, обеспечивая высокую производительность и удобство

Заключение

Локализация — это один из ключевых аспектов, который помогает сделать бота «CyberChiefCooker» более удобным и привлекательным для пользователей. Благодаря возможности выбора языка и адаптации интерфейса, бот предлагает пользователям интуитивно понятный способ взаимодействия, независимо от их места жительства. Эта адаптивность делает бота уникальным и выделяет его на фоне других, предоставляя действительно персонифицированный опыт.

Если вам интересно узнать больше о технических подробностях или о том, как можно интегрировать локализацию в ваш проект, оставляйте свои вопросы в комментариях. Мы с радостью поделимся своим опытом и решениями!

Попробуйте бот прямо сейчас по ссылке: Telegram: Contact @CyberChiefCooker_bot

Автор: CyberChiefCooker

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js