Chattractive — Telegram‑бот, который отвечает на вопросы об ИТМО и умеет озвучивать ответы. Он сочетает локальную базу знаний, обращение к Gemini и мультиязычную озвучку Chatterbox.
- 📚 Векторный поиск по базе знаний: документы из
data/разбиваются на фрагменты, для них строится TF‑IDF‑эмбеддинг, а ответы подбираются по косинусной близости. - 💬 Диалог с памятью: история сообщений хранится в SQLite и передаётся в Gemini.
- 👨👩👧 Ручной режим: сообщения можно пересылать операторам и получать ответы из группы.
- 🔊 Голосовые сообщения: по желанию бот проговаривает ответы через Chatterbox.
- 🧹 Управление с клавиатуры: перезапуск диалога, переключение режимов и голоса одной кнопкой.
-
Создайте виртуальное окружение и установите зависимости:
-3.11 -m venv venv venv/Scripts/Activate pip install -e . #Для использование cuda, нужно указать VOICE_DEVICE=cuda в окружении и дополнительно ввести команды: pip uninstall torch torchaudio pip install --index-url https://download.pytorch.org/whl/cu124 torch==2.6.0 torchaudio==2.6.0
-
Заполните переменные окружения. Скопируйте
env.exampleв.envи пропишите значения:cp env.example .env
Обязательные параметры:
TELEGRAM_BOT_TOKEN— токен вашего бота.GOOGLE_API_KEY— ключ доступа к Gemini.ADMIN_GROUP_ID— идентификатор Telegram‑группы операторов.
Необязательные параметры:
DATA_DIRECTORY— путь к папке с текстами (по умолчаниюdata).DATABASE_PATH— путь к SQLite‑файлу (по умолчаниюchattractive.db).GEMINI_MODEL— модель Gemini (по умолчаниюgemini-2.0-flash-exp).AUDIO_MODEL_DIR— каталог с весами Chatterbox (по умолчанию./models).VOICE_DEVICE— устройство для TTS (cpu,cuda,mps).VOICE_LANGUAGE— язык синтеза (ru,en, и т.д.).
-
Подготовьте данные. Поместите в
data/текстовые файлы (.txt,.md,.rst) с актуальной информацией. -
Скачайте веса TTS (опционально):
python load_model.py
Команда сохранит мультиязычную модель Chatterbox в каталог
models/. Можно задать собственный путь черезAUDIO_MODEL_DIR. -
Запустите бота:
python main.py
После запуска бот автоматически проиндексирует базу знаний, подключится к Gemini и начнёт принимать сообщения.
chattractive/
├── ai/ # работа с Gemini и локальной БЗ
├── audio/ # обёртка над Chatterbox и голосовым сервисом
├── bot/ # Telegram-логика и сценарии общения
├── db/ # слой хранения истории и служебных настроек
└── vendor/chatterbox/ # вендорные модели TTS (Resemble AI)
chattractive/ai/knowledge_base.py— загрузка документов и векторный поиск.chattractive/ai/chat_service.py— формирование промптов и диалог с Gemini.chattractive/db/storage.py— работа с SQLite и состоянием бота.chattractive/bot/bot.py— обработка сообщений Telegram и маршрутизация режимов.chattractive/audio/voice_service.py— озвучивание с нормализацией текста.main.py— точка входа и сборка всех компонентов.
VoiceSynthesizer динамически подгружает модель Chatterbox и использует Gemini только для нормализации текста.
В логах сохраняются лишь укороченные превью ответов, поэтому чувствительный текст не попадает в INFO‑логи.
Чтобы задать собственный голос, поместите эталон в файл и укажите путь в переменной VOICE_PATH.
При включении ручного режима сообщения пользователя пересылаются в группу ADMIN_GROUP_ID.
Ответ из группы, отправленный в режиме «ответить», автоматически доставляется пользователю
(поддерживаются текст, голос и вложения). История синхронизируется с базой для последующих обращений.