Предыстория создания бота «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()

Для голосовых сообщений применяется транскрипция, выполняемая с помощью модели «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

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

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

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

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

В `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

Комментарии (26)


  1. Danplot
    26.10.2024 07:34

    Вы реально используете нейросеть для генерации рецептов? Она же может бредить. Гораздо лучше было бы искать рецепты по интернету и просить нейросеть сделать их краткую выжимку с описанием требуемых ингредиентов и шагами приготовления, потом добавить всё это в базу данных и уже по ней искать


    1. CrazyOpossum
      26.10.2024 07:34

      Мне ещё понравился скриншот, где студенческий набор "курица, картоха, чеснок" даёт рецепт с участием пармезана и оливкового масла. А вообще, статья нанейронена, бот скорее всего тоже, автор вероятно тоже нейронка.


      1. CyberChiefCooker Автор
        26.10.2024 07:34

        Это сложный уровень рецепта.


        1. kinall
          26.10.2024 07:34

          А что такое "сложность" для рецепта?


          1. CyberChiefCooker Автор
            26.10.2024 07:34

            Разделение для разных навыков юзеров. Самые сложные рецепты (блюда)требуют наибольшее количество ингредиентов, намного более серьезные навыки для готовки, чем умение закинуть пельмени в кипящую воду.


            1. LAVBoy
              26.10.2024 07:34

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


      1. IvanBodhidharma
        26.10.2024 07:34

        ..естественно, нам ещё понадобится копченая вода и авокадовая бумага (с)


      1. danissimoff
        26.10.2024 07:34

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


    1. kinall
      26.10.2024 07:34

      Вспоминается недавняя история про рецепт чесночного масла, да


    1. CyberChiefCooker Автор
      26.10.2024 07:34

      Из набора съедобных продуктов яд не приготовить.


      1. kinall
        26.10.2024 07:34

        Погуглите "чесночное масло ИИ ботулизм"


        1. CyberChiefCooker Автор
          26.10.2024 07:34

          В чем угодно заведутся бактерии, грибки (плесень) на открытом воздухе, если оставить на несколько дней. По этой же причине ультрапастеризованное молоко, неоткрытое имеет такой длительный срок годности, причем пишут его с запасом.


          1. kinall
            26.10.2024 07:34

            Дело не в этом, а в том, что всё-таки можно из съедобного сделать яд. Вы бы побереглись, а то можно и под суд попасть ненароком.


          1. IvanBodhidharma
            26.10.2024 07:34

            В чем угодно заведутся бактерии, грибки (плесень) на открытом воздухе

            Вы не погуглили.


      1. MAXH0
        26.10.2024 07:34

        Из набора съедобных продуктов яд не приготовитьо

        Огурцы и молоко ) самое безвредное сочетание.

        Более опасные не привожу. Но есть масса опасных сочетаний и передоз простых ингредиентов...


    1. CyberChiefCooker Автор
      26.10.2024 07:34

      Подробнее опиши.


  1. Vladimir_III
    26.10.2024 07:34

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


    1. CyberChiefCooker Автор
      26.10.2024 07:34

      Что?


    1. voldemar_d
      26.10.2024 07:34

      И в конце ссылка на ТГ-канал?


      1. CyberChiefCooker Автор
        26.10.2024 07:34

        бот


  1. myswordishatred
    26.10.2024 07:34

    Какой-то явной шизофрении не предлагает готовить, заботливо положенные в список ингридиентов гвозди и толчёное стекло не использует.

    С другой стороны почему-то упорно генерирует вторые блюда, борщи варить, видимо, не хочет.


    1. CyberChiefCooker Автор
      26.10.2024 07:34

      Буду исправлять.


  1. d-sh
    26.10.2024 07:34

    Тема не раскрыта. Что делает этот бот из того что не делает обыкновенный чатгпт?


    1. CyberChiefCooker Автор
      26.10.2024 07:34

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


  1. voldemar_d
    26.10.2024 07:34

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

    Это на каком языке?


  1. MainEditor0
    26.10.2024 07:34

    Без обид, но скорее уж как-то так:

    Как я сделал враппер (обёртку) для LLM в виде бота в тг