Skip to content

darkmeleee/memeBot

Repository files navigation

MemeBot

Telegram бот для хранения мемов с интеллектуальным семантическим поиском на основе AI. Проект нуждается в доработке.

Старт

  1. Создать .env из .env.example и заполнить значения:
cp .env.example .env
# Отредактируйте .env с вашими ключами
  1. Запустите сервисы:
docker compose up --build

Команды

  • /start - Приветствие и основная информация
  • /help - Список доступных команд
  • /search <текст> - Поиск мемов по описанию
  • /random - Случайный мем
  • @botname <текст> - Inline поиск в любом чате

Как работает поиск мемов

📥 Обработка загрузки мема

  1. Получение файла - Бот получает мем от пользователя
  2. Сохранение в S3 - Файл загружается в облачное хранилище
  3. AI-анализ в фоне - Celery worker выполняет:
    • Модель в OpenRouter - Генерирует текстовое описание изображения
    • CLIP embedding - Создает векторное представление
    • Сохранение в БД - Описание и вектор сохраняются

🔍 Двухэтапный поиск

Этап 1: Векторная фильтрация

  • Query embedding - Запрос пользователя превращается в вектор через CLIP
  • Параллельная обработка - Описания мемов обрабатываются одновременно в Celery
  • Косинусная сходность - Рассчитывается сходство между вектором запроса и описаниями
  • Фильтрация - Отбираются топ-20 кандидатов с наибольшей сходностью

Этап 2: LLM ранжирование

  • Подготовка данных - Топ-20 кандидатов отправляются в LLM
  • Анализ контекста - Модель оценивает релевантность каждому мему
  • Финальный скоринг - Комбинация LLM оценки (70%) + векторной сходности (20%) + свежести (10%)
  • Результат - Возвращаются 2-3 наиболее релевантных мема

🎯 Формула релевантности

Final Score = 0.7 × LLM Score + 0.2 × Vector Similarity + 0.1 × Freshness
  • LLM Score - Оценка релевантности от языковой модели
  • Vector Similarity - Косинусная сходность CLIP векторов
  • Freshness - Бонус для свежих мемов (экспоненциальное затухание)

Переменные окружения

Основные переменные в .env:

# Telegram
TELEGRAM_BOT_TOKEN=your_bot_token

# OpenRouter для AI
OPENROUTER_API_KEY=your_openrouter_key
OPENROUTER_MODEL=google/gemini-flash-1.5

# S3 хранилище
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
S3_ENDPOINT_URL=https://your-s3-provider.com
S3_BUCKET_NAME=memes
AWS_REGION=us-east-1

# База данных
DATABASE_URL=sqlite:///memes.db

# Celery
CELERY_BROKER_URL=redis://redis:6379/0
CELERY_RESULT_BACKEND=redis://redis:6379/0
PROCESSING_WAIT_SECONDS=0

Архитектура

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│   Telegram  │    │   Bot App   │    │   Celery    │
│    Client   │◄──►│   (async)   │◄──►│   Workers   │
└─────────────┘    └─────────────┘    └─────────────┘
                           │                   │
                           ▼                   ▼
                    ┌─────────────┐    ┌─────────────┐
                    │             │    │    Redis    │
                    │  Database   │    │   Queue     │
                    └─────────────┘    └─────────────┘
                           │
                           ▼
                    ┌─────────────┐
                    │  S3 Storage │
                    │   (Files)   │
                    └─────────────┘

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages