ai_chat_helper_bot
Описание
Telegram-бот для анализа и поиска в рабочих чатах.
Языки
- Python100%
AI Chat Helper Bot
🤖 Telegram-бот для анализа и поиска в рабочих чатах.
Находится в активной разработке.
📁 Структура проекта
├── allowed_users.csv # Список ID пользователей с правом добавлять бота
├── config.py # Настройки: токен, пути, глобальные параметры
├── main.py # Точка входа. Запуск бота и подключение компонентов
├── requirements.txt # Зависимости (aiogram, python-dotenv и др.)
├── bot_logic/ # Бизнес-логика бота (обработка сообщений, поиск)
├── databases/ # Работа с хранилищем (пока CSV, потом — БД)
├── handlers/ # Обработчики событий: команды, сообщения, callback
├── keyboards/ # Генерация inline и reply-клавиатур
├── middlewares/ # Промежуточная логика (проверка чатов, доступа)
├── services/ # Внешние сервисы: GPT, распознавание речи и др.
└── utilits/ # Вспомогательные утилиты (работа с файлами, датами)
⚙️ Текущий статус проработки
- Бот может добавляться в чаты только авторизованными пользователями (список в
).allowed_users.csv - Реагирует на события добавления (
).my_chat_member - Активирует чат, если он добавлен доверённым пользователем.
- В чате помечает сообщения заданного типа эмодзи - для демонстрации того что обработка происходит.
- Переадресация сообщений заданного типа в указанный топик.
⚙ Конфигурация (из config.py)
| Параметр | Значение / Назначение |
|---|---|
| Список Telegram ID пользователей, которым разрешён доступ к боту |
| Папка — хранение постоянных данных (например, ) |
| Папка — временные файлы (голосовые сообщения) |
| — список активных чатов, где бот работает |
| Допустимые типы событий: , , , , |
| Реакции на события в Telegram (эмодзи) |
| События, которые пересылаются в закреплённый топик (тему чата) |
| Смещение часового пояса (по умолчанию +3 — MSK) |
🔐 Переменные окружения (.env)
Бот использует переменные окружения :
- токен бота
- временный пароль для тестовой регистрации
- API ключи LLM провайдеров
🔧 Основные функции
- Обработка текстовых и голосовых сообщений
- Распознавание речи (из голосовых сообщений в текст, ограничение по умолчанию 2 МБ)
- Формирование контекста со временем, пользователем и вложениями
- История сообщений (поддерживается до N последних)
- Извлечение структурированных данных из ответа LLM
- Сохранение событий в базу данных
- Просмотр событий в базе
📥 Поддерживаемые типы сообщений
- ✅ Текст — обычные текстовые сообщения
- ✅ Голосовые сообщения — автоматически распознаются в текст
- ✅ Фото — добавляются в контекст как вложения (
)photo_<id>.jpg - ✅ Документы — имена файлов сохраняются (
или оригинальное имя)document_<id>.doc
🔄 Как работает обработка
-
Пришло сообщение → проверяется тип
- Если голосовое → скачивается и распознаётся в текст
- Если текстовое → обрабатывается напрямую
-
Формируется контекст:
-
Контекст и история отправляются в LLM с системным промптом и схемой
-
LLM возвращает JSON вида: { "type": "event_type", ... "key": "value" }
-
Проверка типа операции:
- Если
в списке разрешённых (type) → сохраняется в БДVALID_OPERATION_TYPES - Если
→ сообщение игнорируетсяtype == "pass" - Иначе → ошибка
- Если
-
Сообщение добавляется в историю (макс.
сообщений)history_len
🗃️ Сохранение в базу данных
Каждое валидное событие сохраняется в таком виде:
| Поле | Описание |
|---|---|
| ID чата в Telegram |
| ID сообщения |
| ID отправителя |
| Время в локальном часовом поясе (ISO 8601) |
| ID сообщения, на которое был ответ (если есть) |
| Тип события (, , и т.д.) |
| Дополнительные данные в JSON-формате |
🤖 Системный промпт и LLM
- Можно использовать любые LLM через LLMConstructorLangChain
- Системный промпт задаётся в services/gpt/gpt_promts.py
- Ожидается, что LLM возвращает валидный JSON
- Ответ парсится, проверяется и используется для классификации
🔧 Для тестирования
- создать новую группу и добавить туда @ai_chats_manager_bot
- написать в созданной группе с ботом любое сообщение. Реакции на него не должно быть
- перейти в личку с ботом, выбрать команду /start . Бот должен ответить что у вас нет прав и рекомендовать регистрацию
- для регистрации ввести /register <пароль> . Если пароль верный - будет сообщение об успешной регистрации
- создать новую группу с ботом (либо удалить из группы, созданной на шаге 1 и добавить заново)
- если всё сделано правильно - теперь бот будет отвечать на любое сообщение в чате. Не только от создателя