AI-бот для QA-инженеров: как я сделал Telegram-ассистента для ежедневной прокачки. ai.. ai. code generation.. ai. code generation. deepseek.. ai. code generation. deepseek. education.. ai. code generation. deepseek. education. education projects.. ai. code generation. deepseek. education. education projects. python.. ai. code generation. deepseek. education. education projects. python. testing.. ai. code generation. deepseek. education. education projects. python. testing. Будущее здесь.. ai. code generation. deepseek. education. education projects. python. testing. Будущее здесь. искусственный интеллект.. ai. code generation. deepseek. education. education projects. python. testing. Будущее здесь. искусственный интеллект. Проектирование и рефакторинг.

Что, если бы кто-то 4 раза в день напоминал тебе важное из мира QA — с примерами, объяснениями и без воды? Я сделал такого помощника.

Привет! Меня зовут Евгений. Я — Full-Stack QA Engineer в Devscribed и сегодня хочу поделиться своим экспериментом QA Mentor Bot — Telegram‑бот, который четыре раза в день отправляет случайный вопрос по тестированию из базы данных и сразу же публикует развёрнутый ответ на него с помощью AI в Telegram‑канале.


Зачем мне понадобился QA Mentor Bot

У этого проекта было две цели:

  1. 🎯 Прокачать свои QA‑навыки.

    Регулярная самоподготовка: в нашей сфере без постоянного развития сложно оставаться эффективным. За день тестировщик может работать в разных направлениях: с мобильным приложением, веб-интерфейсом, API, базой данных и параллельно еще автоматизировать пару тестов. Чтобы не “сбрасывать кэш”, мне нужно регулярно подпитывать память свежей информацией.

    Борьба с прокрастинацией: у каждого из нас есть вопросы, которые возникают в ходе работы, не критичные, но расширяющие кругозор, и мы откладываем их “на потом” — и это “потом” часто превращается в “никогда”. Бот решает эту проблему: он ежедневно напоминает о теории и практике.

  2. 🧠 Прокачаться в проектировании системы и работе с AI

    Пусть Telegram-бот — это не огромная система, но он помогает понять, как устроены реальные проекты: от конфигурации и базы данных до интеграции с API AI. Эти знания можно масштабировать и применять при тестировании сложных систем.

Так и пришло в голову сделать бота на основе искусственного интеллекта, который будет помогать разгребать копящиеся вопросы и поддерживать в целом знания на должном уровне. В итоге получился живой проект — и для себя, и для сообщества.


Архитектура и ключевые компоненты проекта

├── bot.py                     # Основная логика бота
├── sheduler.py                # Настройки расписания публикаций
├── requirements.txt           # Зависимости Python
├── Dockerfile                 # Сборка образа для деплоя в Railway
├── schema.sql                 # Схема базы данных PostgreSQL
├── import_questions.py        # Скрипт импорта вопросов в БД из Excel
├── bot.log                    # Логи работы бота 
├── questions.xlsx             # Исходные файлы с вопросами
├── config/                    # Конфигурации для разных окружений
│   ├── base.py
│   ├── prod.py
│   └── test.py
└── utils/                     # Утилиты: Markdown-фиксер и логгер
    ├── tg_markdown.py
    └── logger.py

Как всё устроено под капотом: архитектура QA Mentor Bot

  1. Инициализация
    При запуске bot.py бот:
    — загружает нужную конфигурацию (prod или test окружение)
    — настраивает логгер
    — создаёт подключения к БД, Telegram API и AI-сервису

  2. База данных

    Структура базы данных в PostgreSQL проста и включает таблицы categories, questions, category_usage_cycle.

    AI-бот для QA-инженеров: как я сделал Telegram-ассистента для ежедневной прокачки - 1

    Таблица categoriesсодержит категории вопросов

    AI-бот для QA-инженеров: как я сделал Telegram-ассистента для ежедневной прокачки - 2

    Таблица category_usage_cycle — это механизм, который гарантирует равномерное и последовательное использование всех категорий вопросов, чтобы публикации были разнообразными и не повторялись подряд из одной и той же категории.

    AI-бот для QA-инженеров: как я сделал Telegram-ассистента для ежедневной прокачки - 3

    Таблица хранит идентификаторы категорий (category_id) и временные метки (cycle_timestamp), когда категория была выбрана для публикации вопроса.

    Это позволяет боту выбирать вопросы из всех категорий, пока не будут использованы все доступные категории. Когда все категории использованы, таблица очищается, и цикл начинается заново.

    Таблица с вопросами questions

    AI-бот для QA-инженеров: как я сделал Telegram-ассистента для ежедневной прокачки - 4

    Атрибут is_used получает значение true как только вопрос был обработан и ответ опубликован в Telegram канале, что позволяет добиваться уникальности контента, не повторяясь, пока весь цикл вопросов не будет закончен.

    В import_questions.py с помощью openpyxl или pandas подтягиваем вопросы из Excel‑файла и распределяем их по категориям. Это удобный способ пополнить базу новыми вопросами.

  3. AI Service
    Самое интересное… В роли «ментора» я использовал DeepSeek API (deepseek-chat). Боту отправляется вопрос и сгенерированный промпт, а модель возвращает развёрнутый ответ. Для модели я задаю «персонажа» — опытного QA-инженера, который умеет объяснять понятно и по делу 😁

    Написание промпта — это пространство для экспериментов: даже небольшие изменения могут существенно повлиять на результат. Неудивительно, что на этом фоне появилась отдельная специализация — промпт-инженерия, пусть и временно переоценённая из-за ажиотажа вокруг AI.

    AI-бот для QA-инженеров: как я сделал Telegram-ассистента для ежедневной прокачки - 5

    Какие бывают роли в промпте?

    messages — список сообщений, которые задают контекст для модели:

    • role — роль отправителя сообщения:

      • system — позволяет задать контекст запроса и определить поведение модели.

      • user — предназначена для отправки пользовательских сообщений к модели.

      • assistant — используется для ответов, которые генерирует модель. При работе в режиме чата ответы модели, помеченные ролью assistant, включаются в состав сообщения для сохранения контекста беседы.

    • content — текстовое содержание сообщения

    Подготовка к постингу

    Эта пожалуй, самая сложная часть бота, а именно вывод правильной разметки в Telegram сообщении.

    Для решения этой задачи у меня используется tg_markdown.py — это скрипт для автоматической подготовки и экранирования текстов под строгие требования Telegram MarkdownV2, чтобы ваши сообщения всегда выглядели аккуратно и не вызывали ошибок при публикации.

    В процессе отладки я постоянно сталкивался с ошибкой:

    Can't parse entities: can't find end of the entity starting at character
    Причина этому — особенности работы с Markdown в Telegram.

    🔍 Что такое Markdown и как он работает в Telegram

    Markdown — это простой язык разметки, который позволяет форматировать текст с помощью специальных символов:

    • **жирный** жирный

    • *курсив*курсив

    Когда вы отправляете в Telegram текст с *, _, [, ] и другими спецсимволами, Telegram воспринимает их не как символы, а как команды форматирования.

    Один и тот же символ может быть и текстом, и командой. Это ломает парсер. И Telegram не пытается “догадаться”, что ты имел в виду. Он строго смотрит на каждую строку: если где-то есть *, [, _ и т.д. — он предполагает, что ты хочешь отформатировать, даже если это было просто текстом.

    ✅ Мой подход к решению:

    1. Сначала экранируем всё,
    2. Потом “восстанавливаем” нужную разметку вручную (по заранее заданным правилам) 🤪

    AI может:

    • Поставить * в неожиданных местах

    • Генерировать разметку с ошибками

    Если ты сначала экранируешь всё, ты получаешь безопасную “сырую” версию текста, а потом вставляешь нужные разметки в контролируемых местах.

    Преимущества

    Плюс

    Объяснение

    Защищён от ошибок AI

    Никакие случайные * или _ не сломают сообщение

    Полный контроль над форматированием

    Вставляешь только то, что хочешь

    Нет ошибок Telegram (Can't parse entities)

    Всё экранировано и безопасно по умолчанию

    Можно накинуть post-processing шаблон

    Например, выделить “Ответ”, “Пример”, “Шаги” и т.п.

    Недостатки

    Минус

    Объяснение

    Потеря “нативной” разметки от AI

    Если AI что-то отформатировал — это будет экранировано

    Нужно парсить и собирать разметку вручную

    Например, для жирных заголовков, списков и ссылок

    Требует шаблонизации

    Нужен шаблон: где вставлять *, где [](), где code и т.п.


  4. ⏰ Планировщик: автопостинг по расписанию

    Для регулярных публикаций я использовал библиотеку APScheduler — мощный инструмент на Python для запуска задач по расписанию.

    В scheduler.py настраивается:

    • Время публикаций (4 раза в день)

    • Количество повторных попыток при ошибках

    • Интервалы между задачами

    Таким образом, бот полностью автономен: подтягивает новый вопрос и публикует AI-ответ без участия человека.


  5. Что по токенам?

    Вот собственно пример поста, сгенерированный AI.

AI-бот для QA-инженеров: как я сделал Telegram-ассистента для ежедневной прокачки - 6

Использование токенов

В ответе от API AI содержится информация вида:

"usage": {
  "prompt_tokens": 546,
  "completion_tokens": 485,
  "total_tokens": 1031
}
  • 546 токенов — занял вопрос и системная инструкция.

  • 485 токенов — ответ модели.

  • 1031 токен — в сумме.

Думаю, если поэкспериментировать с количеством токенов, то можно добиться оптимального соотношения потребления токенов, качества контента с учетом ограничения по символам в посте Telegram.

Запуск и деплой

  1. Бот запускается в Docker-контейнере при деплое на хостинг. Я использую Railway. Представители Railway — свяжитесь, пожалуйста, со мной. Уже второй раз бесплатно пиарю ваш сервис 🙂

  2. Параметры окружения прописаны в config/prod.py.

    Конечно, хранить параметры окружения, такие как ключи API или настройки подключения к базе данных, прямо в коде — не самый безопасный подход. Это может привести к утечке конфиденциальной информации. Вместо этого, рекомендуется хранить такие параметры в переменных окружения, которые можно настроить на хостинге (например, с помощью .env файла). Однако, для ранних этапов прототипирования, когда проект ещё не требует жесткой безопасности и масштабируемости, такой способ хранения конфигов в коде может подойти для быстрого старта.


Что дальше?

  • Расширить базу вопросов. Приглашаю коллег присылать свои любимые кейсы — будет здорово собрать общую копилку.

  • Добавить реакцию на обратную связь. Чтобы можно было оценивать полезность каждого поста.

  • Улучшить AI‑подсказки. Попробовать разные промпты и модели, чтобы ответы были ещё более подробными и релевантными.

  • Улучшить распознавание разметки. Есть некоторые кейсы в заметки на которые я не прописал правила обработки после получения сырого текста.

Как вам идея?
Становимся лучше каждый день — по чуть-чуть, но стабильно. Заходите на канал AI Mentor for QA и делитесь фидбеком — вместе сделаем этот инструмент ещё лучше для сообщества, если в этом будет польза!

Спасибо за внимание 🙌 и до встречи в канале AI Mentor for QA

Автор: epavlovich29

Источник

Rambler's Top100