Найти в Дзене
Тайны Реальности

Как я создал кулинарного Telegram-бота за 1.5 месяца без знания программирования (с помощью Claude и ChatGPT)

Привет! Меня зовут Виктор. Я умею продвигать сайты, монтировать видео и настраивать рекламу, но слово asyncio еще два месяца назад вызывало у меня паническую атаку. Идея родилась случайно: друг-маркетолог предложил сделать кулинарного бота. Ниша понятная, аудитория огромная, кейс для портфолио красивый. Я согласился при одном условии: я не будКак я создал кулинарного Telegram-бота за 1.5 месяца без знания программирования (с помощью Claude и ChatGPT) у учить Python. Я буду управлять тем, кто его знает — Искусственным Интеллектом. Спойлер: так появился «ШефБот», и это оказалось сложнее, чем просто жать Ctrl+C / Ctrl+V. 🛠 Выбор стека: почему AI выбрал это? Я просто спросил у ChatGPT: "Как сделать бота?". Он предложил Python. В итоге стек собрался такой: Язык: Python 3.11 (потому что AI его знает лучше всего).
Фреймворк: aiogram 3.x. Изначально GPT подсунул старый python-telegram-bot, но Claude вовремя переубедил меня, пояснив за асинхронность.
AI-мозги: OpenAI API (GPT-4o mini) + Gemini
Оглавление

Привет! Меня зовут Виктор. Я умею продвигать сайты, монтировать видео и настраивать рекламу, но слово asyncio еще два месяца назад вызывало у меня паническую атаку.

Идея родилась случайно: друг-маркетолог предложил сделать кулинарного бота. Ниша понятная, аудитория огромная, кейс для портфолио красивый. Я согласился при одном условии: я не будКак я создал кулинарного Telegram-бота за 1.5 месяца без знания программирования (с помощью Claude и ChatGPT)

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

Спойлер: так появился «ШефБот», и это оказалось сложнее, чем просто жать Ctrl+C / Ctrl+V.

🛠 Выбор стека: почему AI выбрал это?

Я просто спросил у ChatGPT: "Как сделать бота?". Он предложил Python. В итоге стек собрался такой:

Язык: Python 3.11 (потому что AI его знает лучше всего).
Фреймворк: aiogram 3.x. Изначально GPT подсунул старый python-telegram-bot, но Claude вовремя переубедил меня, пояснив за асинхронность.
AI-мозги: OpenAI API (GPT-4o mini) + Gemini Vision (для фото) + Whisper (для голоса).
База: aiosqlite (для MVP хватает с головой).
Деплой: Docker (чтобы не сойти с ума с зависимостями).

Совет новичкам: Если вы в РФ, OpenAI API напрямую не работает. Я использую прокси-сервис (например, AITunnel), который дает доступ к GPT и Claude через российский endpoint. Это спасает от танцев с VPN на сервере.

🧠 Архитектура: Хаос, ставший порядком

Спустя месяц папка проекта эволюционировала из свалки скриптов в структуру, которой я (и мой AI-архитектор Claude) гордимся:

Plaintext

chef_bot/
├── handlers/ # "Руки" бота: обработка команд, фото, голоса
├── services/ # "Мозги": запросы к AI, Vision, логика рецептов
├── database/ # Память (SQLite)
├── utils/ # Инструменты (логгер, валидаторы)
├── bot.py # Точка входа
└── docker-compose.yml # Чтобы работало везде

🔥 Killer-фичи и как мы их кодили

1. "Что в холодильнике?" (Vision API)

Самая эффектная фича. Кидаешь боту фото — он говорит, что приготовить.

Проблема была в том, что отправлять 5МБ фото в API — дорого и долго.

Решение от Claude: Сжимать фото перед отправкой до 512x512. Качество распознавания продуктов не падает, а трафик экономится в 10 раз.

Логика (псевдокод):

Python

# Промпт для Vision модели VISION_PROMPT = """ Проанализируй фото. Верни JSON: { "products": [{"name": "название", "qty": "~200г"}], "total_items": int } Игнорируй посуду, кота и мебель. Только еда. """ async def recognize_food(photo): compressed_img = compress_image(photo) # Сжали response = await gemini_client.ask(VISION_PROMPT, compressed_img) return json.loads(response)

2. Защита от веганов (Промпт-инжиниринг)

Самая большая боль — заставить AI действительно соблюдать диеты. Если просто написать "Ты веган-повар", он все равно может предложить посыпать салат сыром.

Как мы это победили:

  1. Жесткий System Prompt: Прописали не "чего нельзя", а "НА ЧТО ЗАМЕНИТЬ".
  2. Валидация на клиенте: Python-скрипт проверяет ответ нейронки на "стоп-слова" перед отправкой пользователю.

Python

# Фрагмент валидатора FORBIDDEN = {'vegan': ['мясо', 'яйцо', 'молоко', 'мёд']} def check_diet(recipe_text, diet_type): for product in FORBIDDEN[diet_type]: if product in recipe_text.lower(): # Но! Исключаем ложные срабатывания типа "соевое мясо" if not is_vegan_alternative(product, recipe_text): return False, f"Обнаружен запрещенный продукт: {product}" return True, "OK"

3. Прогрессивная сложность

Чтобы бот не был скучным, мы внедрили "уровни".

  • Пользователь просит "еще вариант" -> Уровень сложности растет -> temperature (креативность) модели повышается.
  • Итог: Сначала бот предлагает яичницу, а с 5-й попытки — яйца-пашот с трюфельным маслом.

rake: Главные грабли разработки

Грабля №1: Markdown и Telegram

Telegram очень капризен к разметке. Если нейросеть вернет незакрытую звездочку * или лишнюю скобку в Markdown, бот просто упадет с ошибкой Can't parse entities.

Решение: Я запретил нейросети использовать Markdown. Вообще.

В промпте прописано: "Используй только эмодзи и plain text. Заголовки выделяй CAPS LOCK или эмодзи 🥘. Никаких звездочек!"

Грабля №2: "Амнезия" у бота

Пользователь жал кнопку "Сгенерируй рецепт", а бот отвечал: "Эм, а из чего?". Переменные терялись при перезапуске бота или обновлении кода.

Решение: Перестать хранить состояние в оперативной памяти (dict) и начать писать всё в БД или хотя бы использовать FSM (Finite State Machine) в aiogram. Claude объяснил мне концепцию стейтов за 10 минут.

Грабля №3: Болтливые пользователи

Люди писали боту: "Привет, как дела?", "Напиши код на Python". Бот честно тратил мои деньги, пытаясь поддержать беседу через API GPT-4.

Решение: Валидация "на входе".

Python

# Если в тексте нет названий еды - даже не дергаем AI if not contains_food_keywords(user_message): await msg.answer("Я понимаю только язык еды 🥕. Пришлите список продуктов!") return

💸 Telegram Stars и Монетизация

Я решил сразу тестировать новую фичу Павла Дурова — Telegram Stars.

Модель: Freemium.

  • Бесплатно: 3 фото/день, базовые рецепты.
  • Премиум (50 Stars ≈ 99₽): безлимит, диеты, голосовой ввод.

Интеграция оказалась на удивление простой. Самое сложное было дождаться аппрува от BotSupport (заняло 1.5 недели).

Код оплаты (сокращенно):

Python

@router.callback_query(F.data == "buy_premium")
async def send_invoice(call: CallbackQuery):
await call.message.answer_invoice(
title="🌟 ШефБот Премиум",
description="Диеты, голос и безлимитные фото",
payload="internal_trans_id",
currency="XTR", # Код валюты Stars
prices=[LabeledPrice(label="30 дней", amount=50)]
)

💰 Цена вопроса (Честный P&L)

Потрачено за 1.5 месяца:

1. Сервер (VPS) - 1500₽ / мес (Крутится 4 моих проекта)
2. Доступ к AI (AITunnel) - ~300₽ (Пока трафик небольшой)
3. Разработка - 0₽ (60 часов моего времени)
4. Нервы - Бесценно (Когда бот упал в 2 ночи)

🏆 Выводы: Заменит ли AI программистов?

Нет. Но он позволит непрограммистам создавать продукты.

Я был архитектором, продакт-менеджером и тестировщиком. AI был «джуном-кодером», который пишет быстро, но иногда бредит.

Моя работа заключалась не в написании def function():, а в формулировании задач:

❌ "Сделай чтобы работало"
✅ "Напиши функцию валидации текста на Python, которая ищет слова из списка forbidden_list и возвращает bool. Добавь логирование ошибок."

Совет тем, кто хочет повторить:

Начинайте с Claude 3.5 Sonnet. Для кодинга он сейчас объективно лучше GPT-4o. Он лучше держит контекст и пишет меньше багов.

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

Попробуйте бота оценить сами: https://t.me/best_cooking_bot