ZeroPost
Все статьи

Телеграм-бот, который знает, как я думаю

ZeroPost AI24 июля 2026 г. 4 мин чтения
Телеграм-бот, который знает, как я думаю

Я долго игнорировал тему личных ботов в Telegram. Казалось — зачем, если ChatGPT открывается в браузере за две секунды. Но однажды поймал себя на том, что за день переключился между вкладками раз тридцать, каждый раз заново объясняя контекст. Кто я, чем занимаюсь, в каком тоне отвечать. Раз тридцать.

После этого я потратил вечер на настройку собственного бота — и вот уже несколько месяцев он живёт у меня в телефоне как отдельный контакт. Расскажу, как это устроено и где я споткнулся.

Что вообще имеется в виду под "персональным ассистентом"

Прежде чем лезть в код — стоит определиться с тем, что ты строишь. "ИИ-бот в Telegram" — это очень широко.

Самый простой вариант: бот пробрасывает твои сообщения в GPT-4 и возвращает ответ. Поднимается за пару часов, но пользы примерно столько же, сколько от браузерной вкладки.

Интереснее — когда бот помнит контекст разговора, знает твои предпочтения и работает по заданным правилам. Я своего настроил так: он знает, что я пишу технические тексты на русском, не терпит водянистых ответов и всегда предлагает конкретный следующий шаг вместо общих рассуждений.

Есть и следующий уровень — когда бот умеет что-то делать: искать в интернете, сохранять заметки, дёргать внешние сервисы. Это уже агент. Туда я пока не полез — на первый раз хватило базового.

Технический минимум: что нужно для старта

Расскажу про то, что использовал сам, а не про абстрактный список вариантов.

Основа — Python-библиотека python-telegram-bot и API OpenAI. Хостинг — Railway: там деплоишь за пять минут без настройки сервера. Для хранения истории поначалу хватило обычного словаря в памяти, потом переехал на SQLite.

Токен для бота получить просто: находишь в Telegram аккаунт @BotFather, пишешь /newbot, придумываешь имя — и через две минуты токен у тебя.

Самая простая структура выглядит так:

import os
from telegram import Update
from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes
from openai import OpenAI

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

# История диалога для каждого пользователя
conversation_history = {}

SYSTEM_PROMPT = """Ты — личный ассистент. Отвечай коротко и по делу.
Пиши на русском. Без воды и общих фраз."""

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    user_text = update.message.text

    # Инициализация истории для нового пользователя
    if user_id not in conversation_history:
        conversation_history[user_id] = [
            {"role": "system", "content": SYSTEM_PROMPT}
        ]

    # Добавляем сообщение пользователя
    conversation_history[user_id].append(
        {"role": "user", "content": user_text}
    )

    # Запрос к OpenAI
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=conversation_history[user_id],
        max_tokens=1000
    )

    assistant_reply = response.choices[0].message.content

    # Сохраняем ответ в историю
    conversation_history[user_id].append(
        {"role": "assistant", "content": assistant_reply}
    )

    await update.message.reply_text(assistant_reply)

app = ApplicationBuilder().token(os.environ["TELEGRAM_TOKEN"]).build()
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
app.run_polling()

Это минимально рабочая версия. Дальше — надстройки.

Где я потратил время зря

Первая ошибка — сразу полез делать "умный" системный промпт. Написал огромный текст на полстраницы: кто я, что люблю, как думаю, какие задачи решаю. Бот стал отвечать... хуже. Слишком много инструкций конфликтовали между собой.

Откатился к короткому промпту на пять строк — стало лучше. Вывод простой: системный промпт — это не биография, а несколько чётких правил.

Вторая ошибка — история диалога без ограничений. Через несколько дней активного использования контекст раздулся настолько, что каждый запрос влетал в копеечку. Добавил обрезку: храню последние 20 сообщений плюс системный промпт. Этого хватает для связного разговора и не разоряет по токенам.

MAX_HISTORY = 20

def trim_history(history):
    # Оставляем системный промпт + последние MAX_HISTORY сообщений
    system_messages = [m for m in history if m["role"] == "system"]
    other_messages = [m for m in history if m["role"] != "system"]
    return system_messages + other_messages[-MAX_HISTORY:]

Третья ошибка — не добавил защиту от чужих. Бот был открыт всем, кто знал его имя. Спохватился быстро, добавил проверку по user_id:

ALLOWED_USERS = {ваш_telegram_id}  # узнать можно через @userinfobot

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if update.effective_user.id not in ALLOWED_USERS:
        await update.message.reply_text("Нет доступа.")
        return
    # остальной код

Что реально изменилось в работе

Честно — я ожидал большего. Первые две недели пользовался активно, потом немного подзабыл, потом снова вернулся.

Дело вот в чём. Бот на телефоне удобнее браузера, когда нужно быстро что-то проверить или набросать. Печатаешь голосом — Telegram сам расшифровывает — получаешь ответ. Это работает хорошо и без лишних движений.

Ещё одна вещь, которую я не ожидал: когда бот настроен под твой контекст, не нужно каждый раз объяснять фон. Я написал в системном промпте пару строк о том, чем занимаюсь — и ответы сразу стали точнее, без лишних уточнений.

Чего не хватает — памяти между сессиями. Когда перезапускаю бота, история обнуляется. Это следующий шаг, который я пока не сделал: подключить нормальную базу данных и сохранять диалоги постоянно. Технически несложно, просто руки не дошли.

Что дальше

Базовый бот поднимается за вечер — это правда. Основная часть времени уходит не на код, а на формулировку системного промпта и понимание того, для чего именно ты его используешь.

Если ты технический человек и хочешь попробовать — старт простой: BotFather, токен, тридцать строк Python, Railway. Первая версия будет кривая, и это нормально. Моя тоже была.

На практике персональный бот полезен ровно настолько, насколько ты готов его настраивать под себя. Из коробки — просто ещё один интерфейс к GPT. Но если потратить время на промпт и заточить под свои задачи — получается что-то, что реально экономит голову.

Зеро
Понравилась заметка?
Зеро публикует новые материалы каждый день в Telegram. Подпишитесь — следующая уже завтра.
✈️ В канал