Три месяца назад я отправил боту сообщение: "напомни завтра купить кофе". Бот напомнил. Я подумал — ладно, удобно. Потом начал скидывать ему ссылки с пометкой "разобрать потом". Потом черновики постов. А потом заметил, что открываю его чаще, чем рабочий Slack.
Это не история про магию. Это история про то, как я собирал персонального ассистента по кускам — и где именно всё начало работать.
Почему именно Telegram, а не отдельное приложение
Я пробовал Notion AI, встроенный ассистент в VS Code, несколько специализированных приложений. Проблема у всех одна: нужно переключаться. Открыть другое окно, залогиниться, вспомнить где что лежит.
Telegram у меня открыт всегда. На телефоне, на ноутбуке, иногда на планшете. Когда ассистент живёт там же — трение исчезает. Мысль появилась — написал. Вопрос возник — спросил. Никуда идти не надо.
Дело в том, что Telegram Bot API бесплатный, документация нормальная, и порог входа для простого бота — буквально вечер.
Что понадобится и где я споткнулся в первый раз
Схема простая: бот принимает сообщения, отправляет их в языковую модель, возвращает ответ. Технически это несколько сотен строк кода — или меньше, если использовать готовые библиотеки.
Мой стек в итоге:
- Python + библиотека
python-telegram-bot - OpenAI API (можно заменить на любую другую модель)
- Простая база — сначала SQLite, потом переехал на PostgreSQL
- Хостинг на Railway — дешевле чем VPS, деплоится через GitHub
Первый раз я споткнулся на webhook versus polling. Polling — бот сам каждые несколько секунд спрашивает у Telegram "есть новые сообщения?". Webhook — Telegram сам стучится к боту при новом сообщении. Я начал с polling: проще поднять локально. Потом перешёл на webhook, потому что polling на бесплатном хостинге ведёт себя нестабильно.
Час потратил на то, чтобы понять почему webhook не работает. Оказалось, нужен HTTPS, а я пытался поднять на голом HTTP.
Как сделать бота не тупым
Голый GPT-wrapper — это скучно. Отправляешь сообщение, получаешь ответ, история не сохраняется. Каждый раз начинаешь с нуля.
Первое что я добавил — память контекста. Бот хранит последние N сообщений и отправляет их вместе с каждым новым запросом. Можно написать "а теперь сделай это короче" — и бот понимает про что речь.
Следующим шагом стал системный промпт. Это инструкция, которую модель получает перед каждым разговором. Я написал туда: как меня зовут, чем занимаюсь, в каком формате мне удобно получать ответы, что бот не должен делать — например, не начинать каждый ответ с "Конечно!". Разница заметна сразу.
И вот что неочевидно: разные режимы работы меняют всё. У меня есть команда /focus, после которой бот переходит в режим работы с текстом — редактирует, сокращает, ищет логические дыры. И /brainstorm — там он генерирует варианты без критики. Технически несложно, но это меняет то, как я вообще с ним взаимодействую.
Персонализация — это не про настройки, а про данные
Вот где я потратил больше всего времени — и где получил больше всего пользы.
Языковая модель сама по себе не знает про меня ничего. Но если давать ей контекст, она начинает отвечать точнее. Я добавил в бота несколько вещей.
Дневник решений. Раз в несколько дней пишу боту что я решил и почему. Бот это сохраняет. Когда потом возникает похожая задача — пишу "посмотри что я раньше решал про X" и получаю выжимку.
Список текущих проектов. Простой текстовый файл, который бот читает при запросе. Можно написать "что у меня сейчас в работе?" — он напомнит.
Стиль письма. Я скормил боту несколько своих постов как примеры. Теперь когда прошу написать черновик — он не пишет в стиле корпоративного пресс-релиза.
На практике всё это реализуется через векторную базу данных — я использую Chroma, она поднимается локально. Но если не хочется возиться — можно начать с текстового файла, который подставляется в системный промпт. Работает хуже, но работает.
Что не сработало
Я добавил интеграцию с календарём. Технически поднял, но пользуюсь раз в месяц — оказалось, проще самому смотреть в календарь.
Сделал автоматические напоминания по расписанию. Тоже поднял. Тоже почти не использую — они начали раздражать.
Подключил поиск в интернете через внешние API. Работает нестабильно, результаты часто мусорные.
Вывод простой: ассистент полезен там, где я сам инициирую запрос. Автоматика, которую я не просил, — почти всегда лишняя.
С чего начать, если хочется попробовать
Самый быстрый путь — BotFather в Telegram, создать бота, получить токен. Потом ключ OpenAI API. Потом взять любой шаблон на GitHub — ищите "telegram gpt bot python" — и запустить локально.
Первые два часа уйдут на то, чтобы понять как это работает. Следующие два — на нормальный системный промпт. Это, как ни странно, самая важная часть. Не код.
Я до сих пор дописываю своего бота. Последнее что добавил — команда /week: собирает всё что я скидывал за неделю и делает короткую выжимку. Мелочь, но каждое воскресенье пользуюсь.
Персональный ассистент становится персональным не из-за настроек, а из-за того что ты в него вкладываешь. Чем больше контекста даёшь — тем меньше объясняешь каждый раз заново.
