- BrainTools - https://www.braintools.ru -

Как я своего чат-бота создать попробовал. Мой опыт

Меня зовут Саша Деменев, я системный аналитик. Сегодня хочу поговорить о чат-ботах: покажу, как и зачем использую их в своей работе, а еще поделюсь кейсом, как попробовал создать своего чат-бота в качестве хобби. Если вы тоже хотите попробовать, забирайте текст в закладки. А если уже делали ботов, делитесь опытом [1] в комментариях, что получилось, а что не очень. С удовольствием почитаю!

Как я своего чат-бота создать попробовал. Мой опыт - 1

Зачем чат-боты миру

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

  • Быстро объяснить сложную вещь простыми словами. Например, подготовить описание функции для документации или для команды разработки. Я просто пишу это в бот, а он возвращает чистый и понятный текст. Конечно, потом я все просматриваю и редактирую, но бывает, что результат устраивает с первого раза.

  • Помочь сформулировать требования к задаче или проверить, насколько понятна формулировка для конечного пользователя. Это сильно экономит время, особенно когда работаешь над несколькими проектами параллельно.

  • Набросать идеи. Например, как можно улучшить пользовательский путь или упростить процесс в интерфейсе. Это своего рода «мозговой штурм в одно лицо».

В жизни я регулярно использую бот как личного помощника: прошу подсказать идеи для подарков, составить план поездки или помочь написать письмо. А еще генерирую картинки. Это удобно, если нужно быстро сделать визуал для поста в Telegram или презентации.

В чем профит для пользователей и создателей

Главная задача чат-ботов — упростить и ускорить процессы, сделать их доступными 24/7. Будь то поддержка клиентов, организация задач или образовательные личные проекты.

Преимущества для пользователей:

  • Круглосуточный доступ: к боту можно обратиться в любое время дня и ночи и получить мгновенные ответы.

  • Высокая скорость обработки запросов: боты отвечают быстрее, чем человек, а это может помочь в критических ситуациях.

  • Удобство и простота использования: бот работает в привычном и понятном формате диалога — без сложной навигации и обязательной регистрации. В отличие от сайтов с перегруженными интерфейсами, где нужно самому разбираться, в какую вкладку кликнуть, здесь все устроено иначе. Ты просто пишешь свой вопрос — и получаешь ответ. Это особенно полезно для тех, кто не хочет тратить время на «копание» в меню, а хочет сразу решить свою задачу. Например, на сайтах часто бывает: открыл, начал искать, отвлекся — закрыл. А в Telegram все работает как переписка: удобно, быстро и без ощущения, что ты «в техподдержке».

Понятно, что многие до сих пор предпочитают звонок оператору или сообщение живому человеку, и это нормально. Но в случаях, когда тебе просто нужно получить информацию или выполнить понятную операцию, бот справляется быстрее. И главное — он не скажет «вы на 14-й позиции в очереди».

А что насчет преимуществ для создателей чат-ботов? В первую очередь это:

  • Масштабируемость: бот может одновременно обслуживать тысячи пользователей без необходимости увеличивать ресурсы.

  • Сбор и анализ данных: чат-боты могут автоматически собирать информацию о взаимодействиях с пользователями — и это не просто метрика ради галочки. Например, в своем боте (о нем расскажу ниже) я заметил, что очень много пользователей используют DALL-E для генерации изображений. До этого я считал, что основное использование — это GPT-4o для текста. Но после анализа стало ясно: нужно усилить визуальные возможности. В результате я добавил быстрые кнопки для выбора формата изображения и поддержку описаний на русском языке. Это дало прирост по вовлеченности и позитивную обратную связь в комментариях.

  • Автоматизация рутинных задач: создатели могут сосредоточиться на более сложных и креативных задачах, передав рутинные процессы на автоматизированные системы.

  • Улучшение клиентского опыта: возможность быстро внедрять обновления и новые функции позволяет постоянно совершенствовать бота и удовлетворять потребности [2] пользователей.

  • Сокращение затрат: разработка и поддержка чат-ботов иногда дешевле, чем привлечение дополнительного персонала для обслуживания клиентов.

  • Монетизация: чат-боты могут служить источником дохода через подписки, рекламные интеграции или предоставление премиум-услуг.

Например, интеграция чат-ботов в бизнес-процессы позволяет компаниям улучшить обслуживание клиентов и оптимизировать внутренние операции. Анализ взаимодействий с ботом может выявить самые частые вопросы и проблемы, и это поможет в разработке новых продуктов или улучшении существующих услуг. К тому же возможность быстрого масштабирования позволяет бизнесу эффективно реагировать [3] на рост клиентской базы без значительных дополнительных инвестиций.

Пожалуй, если бы у Эйнштейна был чат-бот, он бы назывался E=mc²-bot и объяснял теорию относительности доступным языком!

Почему я решил создать своего чат-бота

Мне всегда было интересно находить способы автоматизировать рутину — так, чтобы технологии реально помогали людям, а не усложняли жизнь. В какой-то момент я понял, что чат-боты идеально попадают в эту логику [4]: они позволяют упаковать довольно сложную механику в простой и понятный диалог. Без интерфейсов с десятками экранов, без долгих онбордингов — просто пишешь, получаешь ответ, и задача решена. Это создает ощущение живого помощника, и в этом, по-моему, настоящая магия.

Идея попробовать себя в разработке бота зрела давно, но мне долго не хватало понятной задачи. Я понимал, что сам по себе чат-бот — это не финальная цель, а скорее точка входа. Часто с него начинается что-то большее: интеграции с внешними сервисами, автоматизация бизнес-процессов, сбор и анализ данных. 

Идей у меня было много, одна из самых сложных — бот юридической помощи. Он мог бы стать инструментом для людей, которым нужен быстрый ответ на базовые вопросы. Но к этому проекту пришлось бы привлекать большую команду, поэтому начать я решил с чего-то более простого. Проблема напросилась сама: в России ограничен доступ к ChatGPT, а официальные подписки дороже в пять раз. И тут я подумал, почему бы не попытаться сделать технологии доступнее. И понеслась!

Первый опыт

Мой бот предоставляет пользователям доступ к моделям OpenAI без дорогих подписок: можно работать с несколькими моделями, включая GPT 4o, o1-preview и DALL-E. Для пользователей доступен бесплатный баланс токенов на GPT 4o mini. В качестве основного интерфейса я выбрал Telegram.

Как я своего чат-бота создать попробовал. Мой опыт - 2

Чтобы картина была полной, нужно отметить и ограничения. Например, когда OpenAI выпускает новую модель, ее интеграция в мой продукт не происходит мгновенно. Я добавляю новые модели только после того, как OpenAI предоставляет доступ к API, а на это уходит время: нужно провести тестирование и обеспечить стабильную работу бота с новой моделью. То есть хоть чат-боты и предлагают высокий уровень удобства и функциональности, обновление и расширение возможностей зависят от внешних факторов и доступности инструментов.

Какие возможности есть у моего бота

Круглосуточный доступ. Один из пользователей столкнулся с ошибкой [5] в коде во время подготовки к хакатону. Дело было ночью, когда нет доступа ни к сокомандникам, ни к разработчикам библиотеки. Он описал проблему боту, указал фрагмент кода и получил развернутое объяснение причины ошибки и подсказку, как ее исправить. Это позволило продолжить работу без задержек, а заодно глубже понять принцип работы используемой библиотеки.

Высокая масштабируемость. Благодаря архитектуре на основе Python и PostgreSQL бот умеет одновременно обслуживать тысячи пользователей без снижения производительности. В пиковые часы, когда количество запросов возрастает, бот продолжает отвечать без задержек.

Автоматизация рутинных задач. Мой бот для доступа к моделям OpenAI автоматически обновляет баланс токенов пользователей и уведомляет их о достижении лимита. Это освобождает пользователей от необходимости вручную отслеживать свои ресурсы и позволяет сосредоточиться на более важных задачах.

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

Улучшение клиентского опыта. И сразу к примеру: один из пользователей написал, что использует бот для учебы. Когда преподаватель дает задание «на подумать», он сразу формулирует вопрос боту, получает структурированный ответ и дальше уже дорабатывает его под себя. Его слова: «Я сэкономил кучу времени и при этом лучше понял тему, чем когда часами читал форумы». Для многих людей это и есть «идеальный пользовательский опыт» — когда ты получаешь понятный и полезный результат сразу, без регистрации, ожидания и переключений между сервисами.

Монетизация: сейчас мой бот предлагает бесплатный доступ к базовым моделям и премиум-подписку для расширенных возможностей. Это позволяет генерировать стабильный доход, который используется для дальнейшего развития и улучшения бота. На данный момент подписка приносит достаточно денег, что покрывает основные затраты на серверы и разработку.

Как бот устроен

Архитектура бота строится на модульной основе с использованием распределенных компонентов, которые обеспечивают масштабируемость и устойчивость. В основе лежит PostgreSQL, которая выступает в роли системы управления данными. Она хранит сведения о пользователях, их статусах подписки и токенах. Это реляционная база данных, обеспечивающая строгую согласованность и возможность работы с большим объемом транзакций.

Серверную часть я реализовал с использованием Python и асинхронного фреймворка, что позволяет обрабатывать тысячи запросов в секунду. API OpenAI используется для генерации ответов на запросы пользователей. Telegram выступает в качестве основного интерфейса благодаря популярности платформы и ее гибким возможностям для создания пользовательских интерфейсов. Одна из ключевых особенностей Telegram — поддержка инлайн-кнопок, которые позволяют создавать интерактивные меню прямо в чате, облегчая навигацию и взаимодействие пользователей с ботом. К тому же Telegram поддерживает богатые медиаформаты, такие как изображения, видео, документы, аудиосообщения, а главное, Markdown. Это позволяет отправлять пользователям грамотно оформленный ответ бота, особенно кода, и улучшать их опыт взаимодействия.

Все модули соединяются через REST или gRPC-интерфейсы, что позволяет разделить логику приложения на независимые части. В результате каждый компонент может масштабироваться отдельно. Получается, архитектура обеспечивает устойчивость системы к нагрузкам и упрощает добавление новых функций.

Архитектурные решения тоже включают использование кэширования для ускорения обработки часто повторяющихся запросов и системы мониторинга, чтобы обеспечить стабильность работы бота даже при высоких нагрузках. Например, бот часто получает запросы на одни и те же темы, объяснение определенных понятий или предоставление стандартных инструкций. Среди популярных запросов — «в чем разница между UX и UI», «что такое SQL JOIN, и когда использовать LEFT JOIN», «как правильно оформить пользовательскую историю», а из инструкций — «напиши техническое задание по шаблону» или «сделай промпт для генерации картинки в стиле пиксель-арт». Благодаря внедренному кэшированию ответы на такие повторяющиеся запросы сохраняются и используются повторно. Это значительно ускоряет время ответа для пользователей, уменьшает количество используемых токенов и снижает нагрузку на серверы.

А еще система мониторинга, интегрированная с ботом, постоянно отслеживает его работоспособность и производительность. Был случай, когда бот начал выдавать некорректные ответы из-за сбоя в подключении к API OpenAI. Особенно актуально, когда прокси часто сбоят и подлагивают.

Как написать бота с доступом к ChatGPT

Дальше покажу, как создать Telegram-бота с базовыми командами и интеграцией с OpenAI API. Он не симулирует ассистента и не запоминает контекст, а просто пересылает запрос пользователя в OpenAI и возвращает ответ. Это удобно, если нужен быстрый ответ прямо в Telegram, без браузера, VPN и логина на сайте OpenAI.

Пользователь взаимодействует с ботом через привычный Telegram-интерфейс: он пишет вопрос, а бот присылает ответ от GPT. Чтобы работать с ним было еще удобнее, добавим стандартные команды start, help и clear.

1. Подготовка виртуального окружения

python -m venv venv
source venv/bin/activate      
pip install -U pip
pip install openai aiogram python-dotenv tenacity

2. Файл .env (ключи и настройки)

TELEGRAM_TOKEN=123456:ABC-DEF
OPENAI_API_KEY=sk-********************************
OPENAI_MODEL=gpt-4o      
⚠️  Добавьте .env в .gitignore, если пользуетесь Git.

3. Код бота (bot.py [6])

import os
import logging
from collections import deque
from typing import Deque, List, Dict

from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
from dotenv import load_dotenv
import openai
from tenacity import (
    retry, stop_after_attempt, wait_exponential, retry_if_exception_type
)

# Конфиги
load_dotenv()  # читаем .env

TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
OPENAI_MODEL   = os.getenv("OPENAI_MODEL", "gpt-3.5-turbo")

openai.api_key = OPENAI_API_KEY

# Логирование
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
)

# Инициализация
bot = Bot(token=TELEGRAM_TOKEN)
dp  = Dispatcher(bot)

# Контекст диалогов
MAX_CONTEXT_MESSAGES = 8
user_context: Dict[int, Deque[Dict[str, str]]] = {}

def add_to_context(user_id: int, role: str, content: str) -> None:
    ctx = user_context.setdefault(user_id, deque(maxlen=MAX_CONTEXT_MESSAGES))
    ctx.append({"role": role, "content": content})

def build_prompt(user_id: int, user_input: str) -> List[Dict[str, str]]:
    ctx = list(user_context.get(user_id, []))
    ctx.append({"role": "user", "content": user_input})
    return ctx

# OpenAI вызов
class TransientOpenAIError(Exception):
    pass

@retry(
    reraise=True,
    stop=stop_after_attempt(4),
    wait=wait_exponential(multiplier=1, min=1, max=20),
    retry=retry_if_exception_type(TransientOpenAIError),
)
def ask_openai(messages: List[Dict[str, str]]) -> str:
    try:
        resp = openai.ChatCompletion.create(
            model=OPENAI_MODEL,
            messages=messages,
            temperature=0.7,
        )
        return resp.choices[0].message.content.strip()
    except (openai.error.RateLimitError, openai.error.APIConnectionError):
        raise TransientOpenAIError()

# Команды
@dp.message_handler(commands=["start"])
async def cmd_start(msg: types.Message):
    await msg.answer(
        "Привет!n"
        "Я даю тебе круглосуточный доступ к ChatGPT прямо в Telegram.nn"
        "Доступные команды:n"
        "/help  — справкаn"
        "/clear — сбросить диалогn"
        "/model — текущая модель / сменить модель"
    )

@dp.message_handler(commands=["help"])
async def cmd_help(msg: types.Message):
    await msg.answer(
        "Что я умею:n"
        "• Отвечаю на вопросы, перевожу, генерирую идеи.n"
        "• Помню контекст последних сообщений (до 8).n"
        "• Доступен 24/7.nn"
        "Служебные команды:n"
        "/clear  — очистить историюn"
        "/model  — сменить модель (gpt-3.5-turbo / gpt-4o)"
    )

@dp.message_handler(commands=["clear"])
async def cmd_clear(msg: types.Message):
    user_context.pop(msg.from_user.id, None)
    await msg.answer("Контекст очищен ✅")

@dp.message_handler(commands=["model"])
async def cmd_model(msg: types.Message):
    args = msg.get_args().strip()
    global OPENAI_MODEL
    if args:
        OPENAI_MODEL = args
        await msg.answer(f"Модель изменена на: {OPENAI_MODEL}")
    else:
        await msg.answer(
            f"Текущая модель: {OPENAI_MODEL}n"
            "Чтобы сменить: /model gpt-3.5-turbo"
        )

@dp.message_handler()
async def handle_message(msg: types.Message):
    user_id    = msg.from_user.id
    user_input = msg.text

    add_to_context(user_id, "user", user_input)

    try:
        prompt = build_prompt(user_id, user_input)
        reply  = await bot.loop.run_in_executor(None, ask_openai, prompt)
    except Exception:
        logging.exception("OpenAI request failed")
        await msg.reply("Ошибка общения с OpenAI. Попробуйте позже.")
        return

    add_to_context(user_id, "assistant", reply)
    await msg.reply(reply)

if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)

4. Запуск бота

python bot.py

Такой бот позволяет пользователю задавать вопросы и поддерживать контекст диалога. Очистка контекста осуществляется через команду /clear.

Что почитать по теме

Если вы тоже хотите разобраться в разработке чат-ботов, вот источники, которые лично мне сильно помогли. Ниже — ссылки с моими комментариями о том, что именно я вынес из источника и как это применил на практике.

Документация OpenAI [7]. Первая вещь, с которой стоит начать. Текст максимально понятный, особенно если вы раньше работали с REST API. Из него я узнал, как устроена работа с ChatCompletion, как можно задавать системные промпты, работать с температурой и ограничивать количество токенов. Эти настройки реально влияют на поведение [8] модели, и с ними стоит поэкспериментировать.

Документация Aiogram [9]. Aiogram — это основной фреймворк, с которым я работаю в Telegram. Документация немного суховата, но отлично структурирована. Я понял, как правильно обрабатывать команды, использовать Dispatcher и запускать бота через executor, а главное — как удобно разносить логику по модулям.

Курсы по разработке чат-ботов. Они полезны, если вы в самом начале пути и хотите быстро собрать что-то рабочее. Мне помогли сформировать общее понимание архитектуры: как соединять Telegram + Python + внешние API. Визуализация кода и демонстрации в реальном времени — хороший бонус.

Публикации по ИИ и ML. Например, один материал на Хабре помог мне разобраться, как кэшировать ответы, чтобы сократить количество вызовов к OpenAI и ускорить отклик. Другой объяснил, почему стоит использовать gRPC вместо REST при масштабировании. Без таких подробностей в официальной документации не разобраться.

Форумы и сообщества. Если что-то перестает работать, первым делом иду туда. Например, именно в обсуждении GitHub-issues я нашел рабочее решение, когда OpenAI стал возвращать ошибки при смене моделей. А еще удобно подсматривать, как другие решают типовые задачи вроде ограничения количества запросов или переключения языков.

Напоследок немного банальности, но чат-боты действительно становятся важными инструментами и для бизнеса, и для пользователей. Так что если вам тоже интересно разобрать эту тему «изнутри» и попробовать разработать своего бота, советую начать с простого проекта, а потом экспериментировать и улучшать его. Надеюсь, мой опыт показывает, что это не так сложно, как может казаться со стороны. Если у вас есть вопросы или вы можете подсказать, что изучить по теме, буду рад вашим комментариям!

Автор: newpeel

Источник [10]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/15499

URLs in this post:

[1] опытом: http://www.braintools.ru/article/6952

[2] потребности: http://www.braintools.ru/article/9534

[3] реагировать: http://www.braintools.ru/article/1549

[4] логику: http://www.braintools.ru/article/7640

[5] ошибкой: http://www.braintools.ru/article/4192

[6] bot.py: http://bot.py

[7] Документация OpenAI: https://platform.openai.com/docs

[8] поведение: http://www.braintools.ru/article/9372

[9] Документация Aiogram: https://docs.aiogram.dev

[10] Источник: https://habr.com/ru/companies/ru_mts/articles/912084/?utm_source=habrahabr&utm_medium=rss&utm_campaign=912084

www.BrainTools.ru

Rambler's Top100