Предыстория создания бота «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» выглядит следующим образом:
Пользователь отправляет список продуктов (текстом, голосовым сообщением или фото).
Бот распознает продукты и предлагает пользователю выбрать уровень сложности рецепта.
Пользователь выбирает уровень сложности, и бот предоставляет детализированный рецепт.
Для распознавания продуктов используется модуль `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
Пример результата работы бота
После того как пользователь выбрал уровень сложности, бот генерирует рецепт. Например, при выборе уровня сложности «Средне» и отправки такого списка продуктов как: Куриное филе, картофель, чеснок, бот может предложить следующий рецепт:
Для реализации локализации в боте использовалась структура словаря, в котором ключами являются оригинальные сообщения на английском языке, а значениями — переводы на русский.
В `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