Skip to content

JGSnapp/Chattractive

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chattractive

Chattractive — Telegram‑бот, который отвечает на вопросы об ИТМО и умеет озвучивать ответы. Он сочетает локальную базу знаний, обращение к Gemini и мультиязычную озвучку Chatterbox.

Возможности

  • 📚 Векторный поиск по базе знаний: документы из data/ разбиваются на фрагменты, для них строится TF‑IDF‑эмбеддинг, а ответы подбираются по косинусной близости.
  • 💬 Диалог с памятью: история сообщений хранится в SQLite и передаётся в Gemini.
  • 👨‍👩‍👧 Ручной режим: сообщения можно пересылать операторам и получать ответы из группы.
  • 🔊 Голосовые сообщения: по желанию бот проговаривает ответы через Chatterbox.
  • 🧹 Управление с клавиатуры: перезапуск диалога, переключение режимов и голоса одной кнопкой.

Установка и запуск

  1. Создайте виртуальное окружение и установите зависимости:

    -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
  2. Заполните переменные окружения. Скопируйте 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, и т.д.).
  3. Подготовьте данные. Поместите в data/ текстовые файлы (.txt, .md, .rst) с актуальной информацией.

  4. Скачайте веса TTS (опционально):

    python load_model.py

    Команда сохранит мультиязычную модель Chatterbox в каталог models/. Можно задать собственный путь через AUDIO_MODEL_DIR.

  5. Запустите бота:

    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. Ответ из группы, отправленный в режиме «ответить», автоматически доставляется пользователю (поддерживаются текст, голос и вложения). История синхронизируется с базой для последующих обращений.

About

Чат-бот поддержки с AI-ответов, синтеза речи, RAG

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 100.0%