Когда я впервые захотел своего ИИ-ассистента в Telegram, я представлял это так: вечер, кофе, полчаса — и готово. Через два дня я всё ещё переустанавливал Python, менял версии библиотек и ругался в чат с ботом, который упорно отвечал мне по-китайски.
Ниже — честная история того, как я его всё-таки поднял, без прикрас и маркетингового блеска.
Зачем мне понадобился ассистент в Telegram, а не просто ChatGPT
Мне надоело переключаться между вкладками. Я веду заметки, проверяю тексты, ищу ссылки — и каждый раз, когда открываю отдельное приложение, руки делают паузу. А в Telegram я и так сижу постоянно.
Идея простая: открыл чат, написал «сделай краткую выжимку из этой статьи», вставил текст — через пять секунд получил результат. Без авторизации, без браузера, без контекстного свитча.
Это не революция. Это просто удобно. И именно поэтому мне хотелось настроить своего бота, а не пользоваться готовыми решениями — хочу, чтобы данные оставались у меня.
С чего начал: взял не ту библиотеку
Первая мысль была логичной: открыть документацию Telegram Bot API и написать всё с нуля. Написал на Python несколько строк — и получил работающего бота, который отвечал «Привет!». Дальше стало сложнее.
Для подключения к LLM я потянулся к python-telegram-bot и попытался воткнуть туда OpenAI API. Понял через час, что это архитектурно неудобно: библиотека заточена под обработку сообщений, а не под длинные цепочки промптов. Запутался, потратил вечер — и выкинул половину кода.
На следующий день попробовал aiogram — и дело пошло быстрее. Это асинхронный фреймворк, который мне ближе, и он нормально стыкуется с OpenAI SDK. Не то чтобы aiogram был идеалом — порог входа чуть выше, чем у той же telebot. Но для моих задач асинхронность оказалась важнее простоты.
Вывод, который я для себя сделал: не зацикливайся на выборе фреймворка, если у тебя простая задача. telebot или aiogram — разницы для начала нет. Главное — потом не переписывать всё, когда захочется добавить что-то посерьёзнее.
Что мне реально понадобилось
Вот минимальный стек, с которым я запустился:
Python 3.10+ — без вариантов, часть библиотек просто не встанет на старых версиях. Я сначала сидел на 3.8 и удивлялся, почему половина ошибок не гуглится — потому что это уже deprecated-грабли.
Telegram Bot Token — берётся у @BotFather за пять минут. Ничего сложного: создаёшь бота, получаешь токен, сохраняешь. Не потеряй его и не комить в публичный репозиторий — это всё равно что пароль от аккаунта.
API-ключ от LLM-провайдера — OpenAI, Anthropic, Google, локальная модель через Ollama. Я начал с GPT-4o mini, потому что дёшево и быстро. Потом перешёл на Claude Sonnet для части задач — он лучше понимает длинные тексты и выдаёт более чистые результаты. Для простых запросов хватает и cheap-модели.
Docker (опционально, но я поставил сразу) — чтобы не мучиться с виртуальным окружением и не сломать системный Python. Один docker-compose up — и всё работает. Плюс на проде это удобнее, чем запускать скрипт в screen.
Как выглядит базовая структура
Не буду давать пошаговый чек-лист из десяти пунктов — такие списки все читают и никто не помнит. Покажу логику, которая у меня сложилась.
Бот работает так: получает сообщение — формирует промпт — отправляет в LLM — возвращает ответ. Всё. Вокруг этого крутятся обработка ошибок, логирование и rate limiting.
Первое, что я добавил помимо базового хендлера — системный промпт. Это инструкция, которая задаёт «характер» ассистента. Мне не нужен болтливый робот, который добавляет «Отличный вопрос!» перед каждым ответом. Поэтому мой промпт примерно такой: «Ты — персональный ассистент. Отвечай по делу, без воды, максимум три-четыре предложения, если не просят подробнее».
Второе — контекстное окно. Я добавил простую логику, которая хранит последние N сообщений в истории диалога. Иначе каждый запрос — это отдельный разговор без памяти. Сначала я переусердствовал и хранил 50 сообщений — это дорого и медленно. Остановился на 10.
Третье — разделение команд. У меня есть /summarize для кратких выжимок, /rewrite для редактирования текста, /ask для вопросов. Каждая команда — отдельный промпт-шаблон. Это удобнее, чем объяснять боту каждый раз, что именно я хочу.
Где я наступил на грабли
Грабли первая: забыл про rate limiting. Когда я тестировал бота с товарищем, мы случайно спамили по двадцать сообщений в секунду. OpenAI начал ругаться, мой кошелёк — худеть. Поставил простую проверку: если от одного пользователя пришло больше 10 сообщений за минуту — бот отвечает «Притормози, я не железный».
Грабли вторая: длинные сообщения. Telegram имеет ограничение на длину одного сообщения — 4096 символов. Если LLM выдаёт простыню, бот режет её и отправляет по частям. Сначала я не обрабатывал это — часть ответа просто пропадала. Добавил функцию, которая бьёт длинный текст на чанки и отправляет по очереди.
Грабли третья: конфиденциальность. Я захотел, чтобы бот читал мои файлы — PDF, docx. Подключил парсеры, загружал в LLM. И тут до меня дошло: файлы уходят на сервер OpenAI. Я-то хотел персонального ассистента для личных данных. В итоге для чувствительных задач перешёл на локальную модель через Ollama — работает медленнее, но ни один байт не покидает машину.
Что в итоге
За три вечера я получил бота, который умеет:
- кратко пересказывать тексты,
- исправлять ошибки в письмах и постах,
- переводить куски кода с одного языка на другой,
- отвечать на вопросы по моим заметкам.
Не космос. Не замена ChatGPT. Просто удобный инструмент, который живёт там, где я и так работаю.
Если коротко: начать проще, чем кажется. Основная сложность — не в коде, а в том, чтобы понять, что именно ты хочешь от ассистента. Как только задача ясна — собирается за вечер-два.
Если хочешь, чтобы я разобрал что-то из этого подробнее — пиши.
