Telegram бот для хранения мемов с интеллектуальным семантическим поиском на основе AI. Проект нуждается в доработке.
- Создать
.envиз.env.exampleи заполнить значения:
cp .env.example .env
# Отредактируйте .env с вашими ключами- Запустите сервисы:
docker compose up --build/start- Приветствие и основная информация/help- Список доступных команд/search <текст>- Поиск мемов по описанию/random- Случайный мем@botname <текст>- Inline поиск в любом чате
- Получение файла - Бот получает мем от пользователя
- Сохранение в S3 - Файл загружается в облачное хранилище
- AI-анализ в фоне - Celery worker выполняет:
- Модель в OpenRouter - Генерирует текстовое описание изображения
- CLIP embedding - Создает векторное представление
- Сохранение в БД - Описание и вектор сохраняются
- Query embedding - Запрос пользователя превращается в вектор через CLIP
- Параллельная обработка - Описания мемов обрабатываются одновременно в Celery
- Косинусная сходность - Рассчитывается сходство между вектором запроса и описаниями
- Фильтрация - Отбираются топ-20 кандидатов с наибольшей сходностью
- Подготовка данных - Топ-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) │
└─────────────┘