Skip to content

Latest commit

 

History

History
763 lines (654 loc) · 44.4 KB

File metadata and controls

763 lines (654 loc) · 44.4 KB

Без Шелухи - AI-дайджестер ROADMAP

Phase 1: MVP с форвардингом постов

Ключевое изменение Phase 1: Вместо сложных дайджестов с AI-саммари, MVP фокусируется на простом подходе: фильтрация + форвардинг важных постов.

Первый MVP сможет просто фильтровать и форвардить важные посты, а сложные дайджесты и персонализация добавятся в Phase 2.

Преимущества подхода:

  • Быстрый запуск - меньше зависимостей и сложности
  • Полный контекст - пользователь получает оригинальные посты без изменений
  • Простая реализация - используется стандартный forward_message API
  • Меньше AI затрат - базовая классификация без complex саммари

1.1. Инфраструктура и базовая настройка

1.1.1. Database Setup

  • Создать миграции для основных таблиц
    • telegram_users (id, username, delivery_frequency, content_format, filter_strictness, timezone)
    • channels (telegram_id, username, title, description, subscribers_count)
    • subscriptions (telegram_user_id, channel_id, priority, active)
    • posts (channel_id, telegram_message_id, text, media_urls, published_at, is_important, importance_score, is_ad, is_duplicate_of)
    • user_digests (telegram_user_id, status, scheduled_for, sent_at, posts_analyzed_count, posts_included_count)
    • user_digest_items (user_digest_id, post_id, position)
  • Добавить индексы
    • index_telegram_users_on_username (unique)
    • index_channels_on_telegram_id (unique)
    • index_posts_on_channel_id_and_published_at
    • index_posts_on_is_important
    • index_subscriptions_on_telegram_user_id_and_channel_id (unique)
  • Запустить миграции

1.1.2. Telegram Bot Setup

  • Настроить telegram-bot-ruby gem
  • Создать config/initializers/telegram.rb
  • Создать базовый TelegramWebhookController
  • Добавить routes для webhook
  • Протестировать подключение к Telegram

1.1.3. AI/LLM Setup

  • Настроить ruby_llm gem
  • Создать config/initializers/ruby_llm.rb
  • Настроить API ключи (OpenAI/Anthropic/другие)
  • Создать базовый wrapper lib/ai/classifier.rb
  • Протестировать подключение к AI API

1.1.4. Background Jobs Setup

  • Настроить Solid Queue
  • Создать конфигурацию для разных типов джобов
  • Настроить приоритеты очередей
  • Создать базовый ApplicationJob

1.2. Модели и базовая валидация

1.2.1. TelegramUser Model

  • Создать app/models/telegram_user.rb
  • Добавить enum для delivery_frequency
  • Добавить enum для content_format
  • Добавить enum для filter_strictness
  • Добавить associations (has_many :subscriptions, :user_digests)
  • Добавить validations
  • Добавить scopes (active_telegram_users, by_delivery_time)
  • Написать unit тесты

1.2.2. Channel Model

  • Создать app/models/channel.rb
  • Добавить associations (has_many :subscriptions, :posts)
  • Добавить validations (telegram_id uniqueness)
  • Добавить scopes (active_channels, by_subscribers)
  • Добавить методы для работы с Telegram API
  • Написать unit тесты

1.2.3. Subscription Model

  • Создать app/models/subscription.rb
  • Добавить associations (belongs_to :telegram_user, :channel)
  • Добавить validations (uniqueness, priority range)
  • Добавить scopes (active, by_priority)
  • Написать unit тесты

1.2.4. Post Model

  • Создать app/models/post.rb
  • Добавить associations (belongs_to :channel)
  • Добавить validations
  • Добавить scopes (important, not_ads, unique, recent)
  • Добавить методы для работы с метаданными
  • Написать unit тесты

1.2.5. UserDigest Model (renamed from Digest)

  • Создать app/models/user_digest.rb
  • Добавить enum для status
  • Добавить associations (belongs_to :telegram_user, has_many :user_digest_items, has_many :posts through: :user_digest_items)
  • Добавить validations
  • Добавить scopes (pending, sent, failed)
  • Написать unit тесты

1.2.6. UserDigestItem Model (renamed from DigestItem)

  • Создать app/models/user_digest_item.rb
  • Добавить associations (belongs_to :user_digest, :post)
  • Добавить validations
  • Написать unit тесты

1.3. Базовый онбординг (Bot Commands)

1.3.1. Start Command

  • Создать app/controllers/telegram_webhook_controller.rb (используем единый контроллер вместо отдельных)
  • Реализовать приветственное сообщение
  • Реализовать создание пользователя в БД
  • Добавить краткую инструкцию по использованию
  • Добавить inline кнопки для быстрого старта
  • Написать integration тесты

1.3.2. Add Channel Command

  • Создать app/controllers/telegram/commands/channel_controller.rb (реализовано в основном контроллере)
  • Реализовать /add @channelname команду
  • Добавить валидацию канала через Telegram API
  • Создать подписку в БД
  • Добавить feedback пользователю (успех/ошибка)
  • Написать integration тесты

1.3.3. List Channels Command

  • Реализовать /list команду в TelegramWebhookController через SubscriptionCommands concern
  • Показать список подписок с приоритетами
  • Добавить inline кнопки для управления (удалить, изменить приоритет)
  • Написать integration тесты

1.3.4. Remove Channel Command

  • Реализовать /remove @channelname команду
  • Удалить подписку из БД
  • Добавить подтверждение действия (реализовано через callback queries)
  • Написать integration тесты

1.3.5. Settings Command

  • Создать app/controllers/telegram/commands/settings_controller.rb
  • Реализовать /settings команду
  • Показать текущие настройки
  • Добавить inline меню для изменения:
    • Частоты доставки (delivery_frequency)
    • Формата контента (content_format)
    • Строгости фильтрации (filter_strictness)
  • Сохранять изменения в БД
  • Написать integration тесты
  • РЕАЛИЗОВАТЬ SettingsAgent по спецификации Spec 001:
    • Создать app/services/telegram/settings_agent.rb
    • Реализовать методы show_settings и update_setting
    • Добавить валидацию настроек и значений
    • Интегрировать с TelegramWebhookController
    • Написать полные unit тесты (TDD подход)
    • Добавить кеширование и логирование производительности

1.4. Базовая AI классификация

ПРИМЕЧАНИЕ: Упрощенная версия AI-функциональности для MVP. Полная AI-инфраструктура с персонализацией будет в Phase 2.

1.4.1. AI Classifier Service (базовая)

  • Создать app/services/content/ai_classifier.rb
  • Настроить базовое подключение к AI API (OpenAI/Anthropic)
  • Реализовать classify(post) с простым промптом
  • Базовая классификация: важно/не важно/реклама
  • Сохранять результаты в post.importance_score и post.is_ad
  • Добавить базовое кеширование результатов
  • Написать service тесты

1.4.2. Post Model Updates для базовой классификации

  • Добавить importance_score (integer, 0-100) в Post модель
  • Добавить is_ad (boolean) в Post модель
  • Добавить classification_reasoning (text) в Post модель
  • Добавить индексы на новые поля
  • Обновить scopes:
    • important - посты с importance_score > порога
    • not_ads - посты где is_ad = false
  • Написать unit тесты

1.4.3. Classify Job (базовый)

  • Создать app/jobs/content/classify_job.rb
  • Вызывать AIClassifier для новых постов
  • Сохранять результаты классификации
  • Обрабатывать ошибки AI API с retry логикой
  • Логировать базовые метрики (success rate, latency)
  • Написать job тесты

1.5. Мониторинг каналов

1.5.1. Channel Fetcher Library

  • Создать lib/telegram_client/api_wrapper.rb
  • Реализовать метод получения постов из канала
  • Добавить обработку ошибок (rate limits, недоступность канала)
  • Создать lib/telegram_client/channel_fetcher.rb
  • Реализовать парсинг постов (текст, медиа, метаданные)
  • Написать unit тесты

1.5.2. Monitor Job

  • Создать app/jobs/channels/monitor_job.rb
  • Реализовать логику получения активных каналов
  • Вызвать ChannelFetcher для каждого канала
  • Запланировать ProcessPostJob для новых постов
  • Добавить логирование
  • Написать job тесты

1.5.3. Schedule Monitor Job

  • Настроить периодический запуск MonitorJob (каждые 5-10 минут)
  • Использовать Solid Queue recurring jobs или cron
  • Протестировать выполнение

1.5.4. Process Post Job

  • Создать app/jobs/content/process_post_job.rb
  • Сохранить пост в БД
  • Нормализовать контент
  • Извлечь метаданные
  • Запланировать ClassifyJob
  • Написать job тесты

1.5.5. Channel Update Timestamp (Spec FETCHPOSTJOB_TIMESTAMP)

  • Создать спецификацию docs/Specs/051_FETCHPOSTJOB_TIMESTAMP_Specification.md
  • Создать план реализации docs/Implementation/Spec_FETCHPOSTJOB_TIMESTAMP_Implementation.md
  • Создать миграцию для добавления last_successful_update_at в Channel модель
  • Создать Concern ChannelUpdatable с методами:
    • mark_as_successfully_updated - обновление времени
    • stale? - проверка актуальности канала
    • last_update_formatted - форматированное время
    • freshness_status - статус актуальности
  • Подключить Concern к модели Channel
  • Модифицировать Channels::FetchPostsJob для сохранения времени после успешного выполнения
  • Добавить локализацию в config/locales/ru.yml
  • Провести тестирование функциональности
  • РЕАЛИЗАЦИЯ ЗАВЕРШЕНА - время успешного обновления сохраняется для всех каналов

1.6. Базовая фильтрация контента

ПРИМЕЧАНИЕ: Простая фильтрация на основе базовой AI-классификации. Расширенная персонализация будет в Phase 2.

1.6.1. Content Filter Service (базовая)

  • Создать app/services/content/filter.rb
  • Реализовать фильтрацию постов по importance_score
  • Учитывать filter_strictness пользователя
  • Фильтровать рекламу (is_ad = true)
  • Базовая фильтрация по ключевым словам
  • Написать service тесты

1.6.2. Filtered Posts Query Service

  • Создать app/services/content/filtered_posts_query.rb
  • Реализовать получение отфильтрованных постов для пользователя
  • Учитывать время последней отправки
  • Применять фильтры по важности и рекламе
  • Сортировать по важности и времени
  • Написать service тесты

1.7. Фильтрация и форвардинг постов

1.7.1. Content Filter Service

  • Создать app/services/content/filter.rb
  • Реализовать базовую фильтрацию постов:
    • Фильтрация рекламы (простые правила + базовый AI)
    • Фильтрация по ключевым словам
    • Учет строгости фильтрации пользователя
  • Написать service тесты

1.7.2. Post Forwarder Service

  • Создать app/services/content/forwarder.rb
  • Реализовать форвардинг отфильтрованных постов
  • Использовать bot.forward_message для отправки постов
  • Добавить валидацию прав доступа к каналу
  • Обрабатывать ошибки (нет прав, пост удален)
  • Написать service тесты

1.7.3. Deliver Filtered Posts Job

  • Создать app/jobs/content/deliver_posts_job.rb
  • Получить отфильтрованные посты для пользователя
  • Отправить посты через forwardMessage в формате списка
  • Обработать ошибки (нет прав, пост удален, канал недоступен)
  • Добавить retry логику для временных ошибок
  • Написать job тесты

1.7.4. Content Scheduler Service

  • Создать app/services/content/scheduler.rb
  • Реализовать логику определения времени отправки
  • Учитывать delivery_frequency пользователя
  • Учитывать timezone пользователя
  • Планировать DeliverFilteredPostsJob для пользователей
  • Написать service тесты

1.7.5. Schedule Content Delivery

  • Настроить периодический запуск ContentScheduler (каждый час)
  • Протестировать автоматическую отправку отфильтрованных постов

1.8. Manual Content Command

1.8.1. Content Command

  • Создать app/controllers/telegram/commands/content_controller.rb
  • Реализовать /content команду (получить новые посты сейчас)
  • Запустить DeliverFilteredPostsJob немедленно
  • Отправить отфильтрованные посты пользователю
  • Добавить feedback (успех/пусто/нет новых постов)
  • Написать integration тесты

1.9. Help Command

1.9.1. Help Command

  • Создать app/controllers/telegram/commands/help_controller.rb
  • Реализовать /help команду
  • Показать список всех доступных команд
  • Добавить краткое описание функционала
  • Написать integration тесты

1.10. Telegram Bot Commands Management

1.10.1. Commands Scanner Service

  • Создать app/services/telegram/commands_scanner.rb
  • Реализовать автоматическое сканирование контроллеров и concerns
  • Извлекать методы команд (заканчивающиеся на !)
  • Определять пользовательские и административные команды
  • Получать описания из локализации
  • Написать unit тесты

1.10.2. Commands Manager Service

  • Создать app/services/telegram/commands_manager.rb
  • Реализовать установку команд через Telegram Bot API
  • Добавить валидацию формата команд
  • Обработку ошибок API и логирование
  • Синхронизацию команд при необходимости
  • Написать unit тесты

1.10.3. Admin Commands Integration

  • Добавить команду /set_commands в TelegramWebhookController
  • Добавить callback show_commands для просмотра команд
  • Реализовать защиту прав доступа (только для администраторов)
  • Добавить клавиатуру для управления командами
  • Написать integration тесты

1.10.4. Rake Tasks

  • Создать lib/tasks/telegram.rake
  • Реализовать задачи telegram:set_commands, telegram:show_commands
  • Добавить валидацию telegram:validate_commands
  • Добавить синхронизацию telegram:sync_commands
  • Добавить комплексную настройку telegram:setup
  • Поддержка DRY_RUN模式和 переменных окружения

1.10.5. Localization

  • Добавить описания команд в config/locales/ru.yml
  • Создать ключи для всех команд (start, help, settings, add, remove, list, debug, channels, set_commands)
  • Добавить локализацию для сообщений об успехе/ошибках
  • Обновить help команду с новыми административными командами

1.10.6. Documentation

  • Создать спецификацию docs/Specs/045_Telegram_Bot_Commands_Specification.md
  • Создать документацию реализации docs/Implementation/Spec_045_Telegram_Bot_Commands_Implementation.md
  • Обновить ROADMAP с выполненными задачами
  • Создать comprehensive тесты для всех компонентов

1.10.7. Special Commands for Follower User Management (Spec 010)

  • Создать спецификацию docs/Specs/010_Special_Commands_for_Follower_User_Management_Specification.md
  • Создать план реализации docs/Implementation/Spec_010_Special_Commands_for_Follower_User_Management_Implementation.md
  • Добавить gem phonelib для валидации номеров телефонов
  • Создать app/controllers/concerns/telegram/follower_user_commands.rb
  • Реализовать 4 команды: /fadd, /fremove, /flist, /fconfirm
  • Настроить валидацию и нормализацию телефонных номеров через Phonelib
  • Реализовать проверку прав доступа (только для администраторов)
  • Создать unit и integration тесты для всех команд
  • Обновить локализацию сообщений в config/locales/ru.yml
  • РЕАЛИЗАЦИЯ ЗАВЕРШЕНА - все команды работают корректно, тесты проходят

1.11. Error Handling & Logging

1.11.1. Error Handling

  • Настроить глобальный rescue для контроллеров
  • Добавить логирование ошибок
  • Настроить уведомления об ошибках (опционально: Bugsnag)
  • Добавить user-friendly сообщения об ошибках

1.10.2. Logging

  • Настроить structured logging (JSON)
  • Добавить correlation IDs
  • Логировать все API запросы (Telegram, AI)
  • Логировать выполнение jobs

1.11. Testing & Documentation

1.11.1. Integration Tests

  • Написать end-to-end тест: онбординг → добавление канала → получение дайджеста
  • Написать тесты для всех bot команд
  • Протестировать error scenarios

1.11.2. Documentation

  • Обновить README с инструкциями по настройке
  • Документировать все environment variables
  • Создать примеры использования команд

1.12. Deployment Preparation

1.12.1. Environment Setup

  • Настроить production environment
  • Настроить credentials для API ключей
  • Настроить database для production
  • Настроить Solid Queue workers

1.12.2. Deploy

  • Задеплоить на production (Kamal/Heroku/VPS)
  • Протестировать бота в production
  • Настроить мониторинг (uptime, logs)

1.13. ✅ MTProto Migration (Telegram User Clients) - ЗАВЕРШЕНО

✅ УСПЕШНО ВЫПОЛНЕНО: Полная миграция с tdlib-ruby на telegram-mtproto-ruby. Все проблемы с зависимостями решены.

🎯 Результат: telegram-mtproto-ruby работает в production, обеспечивая доступ к Telegram через pure MTProto 2.0.

🚀 Преимущества: Нет конфликтов зависимостей, совместимость с Rails 8, production-ready решение.

1.13.1. TelegramCredentials Module Update

  • Обновить app/models/concerns/telegram_credentials.rb для MTProto сессий
  • Создать create_mtproto_session метод с реальными данными сессии
    • Сохранять api_id, api_hash, phone_number, created_at в JSON
    • Использовать зашифрованные поля для безопасности
  • Создать restore_mtproto_session метод для восстановления сессий
    • Парсинг JSON и обработка ошибок
    • Graceful degradation при поврежденных данных
  • Создать save_mtproto_session метод с поддержкой форматов (Hash/String)
  • Создать clear_mtproto_session метод для очистки сессий

1.13.2. Session Validation & Management

  • Добавить валидацию MTProto сессий
  • Создать has_valid_mtproto_session? метод проверки обязательных полей
  • Создать session_created_at метод для отслеживания времени создания
  • Создать session_expired? метод (сессии истекают через 24 часа)
  • Создать refresh_session_if_needed метод для автоматического обновления

1.13.3. Backward Compatibility

  • Сохранить TDLib методы с депрекационными предупреждениями
  • create_tdlib_session → вызывает create_mtproto_session с warning
  • restore_tdlib_session → вызывает restore_mtproto_session с warning
  • save_tdlib_session → вызывает save_mtproto_session с warning
  • clear_tdlib_session → вызывает clear_mtproto_session с warning

1.13.4. Testing & Documentation

  • Создать комплексные тесты для MTProto функциональности
  • Создать test/models/concerns/telegram_credentials_mtproto_test.rb
    • Тесты создания/восстановления/валидации сессий
    • Тесты управления сроком жизни сессий
    • Тесты backward compatibility
    • Тесты обработки ошибок
  • Создать test/integration/telegram_credentials_integration_test.rb
    • Полный цикл работы с сессиями
    • Интеграция с ApplicationConfig
  • Создать документацию реализации
  • Создать docs/Implementation/MTProto_Session_Management_Implementation.md
    • Описание всех методов и форматов
    • Инструкции по интеграции с telegram-mtproto-ruby
    • Результаты тестирования и рекомендации

1.13.5. Integration with MTProto Services

  • Проверить интеграцию с существующими MTProto сервисами
  • Проверить совместимость с Telegram::UserClientMtproto
  • Проверить совместимость с Telegram::AuthorizationServiceMtproto
  • Валидировать формат сессий для telegram-mtproto-ruby gem

1.13.6. ✅ Production Deployment & Documentation

  • Полная замена tdlib-ruby на telegram-mtproto-ruby в production
  • Обновлена архитектурная документация (C4 модель)
  • Обновлена MTProto документация с актуальными данными
  • Создана итоговая документация по миграции
  • Все тесты проходят, система работает в production 24/7

🎉 Миграция на MTProto-ruby успешно завершена!

  • ✅ Все проблемы с зависимостями решены
  • ✅ Система работает в production через pure Ruby MTProto 2.0
  • ✅ Полная совместимость с Rails 8
  • ✅ Комплексная документация обновлена
  • ✅ Тестовый coverage 100% для MTProto компонентов

Phase 2: Улучшенная фильтрация и персонализация

2.1. AI Sessions Infrastructure (персонализация)

ВАЖНО: Расширенная AI-инфраструктура для персонализации на основе истории пользователя.

2.1.1. Chat Model Extension

  • Установить ruby_llm Rails integration: rails generate ruby_llm:install
  • Расширить существующую таблицу chats
    • Добавить telegram_user_id (foreign key)
    • Добавить session_type (enum: classification, summarization, personalization, digest_generation)
    • Добавить status (enum: active, archived)
    • Добавить context (jsonb для хранения контекста сессии)
  • Обновить модель Chat (уже использует acts_as_chat)
    • Добавить связь belongs_to :telegram_user
    • Добавить enum для session_type и status
    • Добавить store_accessor для context
  • Добавить индексы:
    • index_chats_on_telegram_user_id_and_session_type
    • index_chats_on_status
    • index_chats_on_context (GIN)
  • Написать unit тесты для расширенной модели Chat

2.1.2. TelegramUser Model Updates для Chat

  • Добавить has_many :chats в TelegramUser модель
  • Реализовать chat_for(type) - получить или создать чат
  • Реализовать build_initial_context - построить начальный контекст
  • Реализовать recent_feedback_summary - сводка последнего фидбека
  • Написать unit тесты для новых методов

2.1.3. Chat Management Service

  • Создать app/services/ai/chat_manager.rb
  • Реализовать with_context блок для работы с чатом
  • Реализовать управление контекстным окном (sliding window)
  • Реализовать выбор важных сообщений из истории
  • Реализовать архивацию старых сообщений (> 90 дней)
  • Реализовать compacting истории для больших чатов (> 100 сообщений)
  • Написать service тесты

2.1.4. Structured Output Schemas

  • Создать базовый app/schemas/base_schema.rb
  • Создать app/schemas/post_classification_schema.rb
    • importance_score (number, 0-100)
    • is_ad (boolean)
    • is_fluff (boolean)
    • reasoning (string)
    • topics (array of strings)
    • duplicate_check (object: is_likely_duplicate, similarity_score)
  • Создать app/schemas/summary_schema.rb
  • Создать app/schemas/duplicate_detection_schema.rb
  • Написать тесты для всех схем

2.1.5. AI Tools (Function Calling)

  • Создать базовый app/tools/base_tool.rb
  • Создать app/tools/classify_post_tool.rb
    • Определить параметры (importance_score, is_ad, is_fluff, topics, reasoning)
    • Реализовать метод execute
  • Создать app/tools/detect_duplicate_tool.rb
  • Создать app/tools/extract_topics_tool.rb
  • Написать тесты для всех инструментов

2.1.6. Context Builder Service

  • Создать app/services/ai/context_builder.rb
  • Реализовать system_prompt для разных типов сессий
  • Реализовать relevant_history - выбор релевантных сообщений
  • Реализовать стратегии:
    • Sliding window (последние N сообщений)
    • Importance-based (важные сообщения)
    • Few-shot examples (примеры из фидбека)
  • Реализовать feedback_context - контекст из фидбека пользователя
  • Реализовать analyze_feedback_patterns - анализ паттернов
  • Добавить кеширование построенного контекста
  • Написать service тесты

2.1.7. Post Model Updates для Structured Data

  • Обновить Post модель для использования JSONB поля classification_data
  • Добавить массив topics (jsonb array)
  • Добавить classification_reasoning (text)
  • Добавить classified_by_session_id (foreign key к Chat)
  • Добавить GIN индексы на JSONB и array поля
  • Обновить scopes для работы с JSONB:
    • important - использовать classification_data->>'importance_score'
    • not_ads - использовать classification_data->>'is_ad'
    • by_topic - использовать topics && ARRAY[?]
  • Написать unit тесты

2.1.8. Cleanup Job для Chats

  • Создать app/jobs/ai/cleanup_chats_job.rb
  • Реализовать архивацию неактивных чатов (> 90 дней)
  • Реализовать удаление старых архивных чатов (> 180 дней)
  • Реализовать compacting больших активных чатов
  • Настроить периодический запуск (раз в день)
  • Написать job тесты

2.2. Дедупликация контента

  • Создать Deduplication Service
  • Использовать AI embeddings для поиска похожих постов
  • Реализовать кластеризацию дубликатов
  • Выбирать лучший вариант из дубликатов
  • Обновить Post модель (is_duplicate_of)

2.3. Персонализация через фидбек

ВАЖНО: Эта фаза использует AI Sessions для персонализации Использует накопленную историю для улучшения классификации

2.3.1. Feedback Model

  • Создать app/models/feedback.rb
  • Добавить belongs_to :telegram_user, :post
  • Добавить enum sentiment: { dislike: -1, neutral: 0, like: 1 }
  • Добавить after_create callback для обновления AI Session
  • Реализовать метод update_personalization_session
  • Добавить индексы на telegram_user_id, post_id, created_at
  • Написать unit тесты

2.3.2. Feedback Controller (Telegram Bot)

  • Создать app/controllers/telegram/commands/feedback_controller.rb
  • Добавить inline кнопки 👍/👎 к форварднутым постам
  • Реализовать обработку callback queries
  • Сохранить feedback в БД
  • Запланировать PersonalizationUpdateJob
  • Отправить подтверждение пользователю
  • Написать integration тесты

2.3.3. Chat Updates для фидбека

  • Добавить метод add_feedback_example(post, feedback) в Chat
  • Хранить последние 20 примеров фидбека в metadata['feedback_examples']
  • Обновлять updated_at при добавлении фидбека
  • Написать unit тесты

2.3.4. Few-Shot Builder Service

  • Создать app/services/personalization/few_shot_builder.rb
  • Реализовать build_examples - построение few-shot примеров
  • Сбалансировать liked и disliked примеры (по 5 каждого)
  • Форматировать примеры в user/assistant пары
  • Написать service тесты

2.3.5. Personalization Update Job

  • Создать app/jobs/personalization_update_job.rb
  • Получить Chat персонализации для пользователя
  • Проанализировать новый фидбек через AI
  • Обновить понимание предпочтений в истории чата
  • Обновить UserPreference если нужно
  • Написать job тесты

2.3.6. UserPreference Model

  • Создать app/models/user_preference.rb
  • Добавить belongs_to :telegram_user
  • Добавить JSONB поля для хранения:
    • topic_weights - персональные веса тем
    • channel_weights - веса каналов
    • adjusted_importance_threshold - динамический порог важности
    • personalization_data - дополнительные данные персонализации
  • Реализовать initialize_topic_weights
  • Реализовать adjust_topic_weight(topic, feedback)
  • Реализовать weighted_importance_score(post) - пересчет оценки
  • Добавить индексы на topic_weights, channel_weights (GIN)
  • Написать unit тесты

2.3.7. Threshold Adjuster Service

  • Создать app/services/personalization/threshold_adjuster.rb
  • Реализовать adjusted_threshold - динамическая корректировка
  • Реализовать base_threshold_for_strictness - базовые пороги
  • Реализовать calculate_personal_adjustment - анализ фидбека
  • Учитывать паттерны лайков/дизлайков за последние 7 дней
  • Корректировка порога на основе несоответствий
  • Написать service тесты

2.3.8. Context-Aware Classification Updates

  • Обновить AIClassifier для использования Few-Shot Builder
  • Добавлять few-shot примеры в контекст перед классификацией
  • Использовать ThresholdAdjuster для динамических порогов
  • Использовать UserPreference.weighted_importance_score
  • Логировать влияние персонализации на оценки
  • Написать integration тесты

2.3.9. Feedback Analytics

  • Создать app/services/personalization/feedback_analyzer.rb
  • Реализовать анализ паттернов фидбека:
    • Топ понравившихся тем
    • Топ отклоненных тем
    • Средняя оценка понравившихся постов
    • Correlation между AI-оценкой и фидбеком
  • Использовать результаты в ContextBuilder
  • Написать service тесты

2.3.10. Integration Tests

  • Протестировать полный flow персонализации:
    • Пользователь дает фидбек (лайк/дизлайк)
    • Feedback сохраняется и обновляет Chat
    • PersonalizationUpdateJob обрабатывает фидбек
    • Следующая классификация учитывает фидбек
    • Оценки постов изменяются на основе истории
  • Протестировать улучшение точности:
    • Measure correlation до персонализации
    • Measure correlation после 10+ фидбеков
    • Verify improvement > 15%

2.4. Статистика

  • Создать StatsController (/stats команда)
  • Показывать статистику пользователя:
    • Количество подписок
    • Всего постов проанализировано
    • Отфильтровано постов
    • Постов получено
  • Создать Analytics Service для сбора метрик

2.5. Форматы дайджестов (дополнительно к форвардингу)

  • Создать DigestBuilder Service для генерации дайджестов
  • Создать UnifiedDigestFormatter (единый саммари всех постов)
  • Создать ComboFormatter (топ-3 + саммари остальных)
  • Добавить группировку по темам в дайджесте
  • Реализовать опцию в настройках: форвардинг ИЛИ дайджесты

Phase 3: Социальные функции и рекомендации

3.1. Рекомендации каналов

  • Создать ChannelRecommendation Model
  • Создать Recommendation Service
  • Построить социальный граф каналов (collaborative filtering)
  • Создать DiscoverController (/discover команда)
  • Показывать рекомендованные каналы

3.2. Тематическая фильтрация

  • Добавить классификацию постов по темам (AI)
  • Создать TopicPreference Model
  • Позволить пользователям выбирать интересные темы
  • Фильтровать дайджесты по темам

3.3. Продвинутая аналитика

  • Dashboard для администратора
  • Метрики:
    • DAU/MAU
    • Retention rate
    • Top channels
    • AI classification accuracy
  • Visualizations

Phase 4: Масштабирование и ML

4.1. A/B тестирование

  • Создать A/B тестирование framework
  • Тестировать разные форматы дайджестов
  • Тестировать разные стратегии ранжирования

4.2. ML модели

  • Обучить собственную модель предсказания предпочтений
  • Использовать для ранжирования вместо простых правил

4.3. Multi-language support

  • Определение языка постов
  • Перевод дайджестов (опционально)
  • Локализация bot интерфейса

4.4. Web интерфейс

  • Web dashboard для пользователей
  • Управление настройками через web
  • Просмотр истории дайджестов

Phase 5: Расширение на группы и чаты

5.1. Поддержка Telegram групп и чатов

  • Расширить модели для поддержки разных типов источников:
    • Обновить Channel модель в Source с source_type (enum: channel, group, chat)
    • Добавить специфичные поля для групп и чатов
    • Обновить систему подписок на универсальные источники
  • Адаптировать мониторинг для групп и чатов
  • Настроить разные стратегии фильтрации для разных типов источников

5.2. Умная фильтрация групповых дискуссий

  • Создать GroupMessageAnalyzer Service
  • AI-анализ сообщений в группах:
    • Определение важных обсуждений
    • Фильтрация оффтопных сообщений и флуда
    • Выделение ключевых участников дискуссии
    • Суммаризация длинных тредов
  • Адаптировать классификацию под групповую динамику
  • Обучить модель распознавать структурную информацию в группах

5.3. Контекстная фильтрация для чатов

  • Создать ChatContextAnalyzer Service
  • Анализ контекста чата для определения релевантности
  • Умное отслеживание упоминаний пользователя
  • Фильтрация личных сообщений и общих обсуждений
  • Адаптация под приватные и публичные чаты

5.4. Универсальная система управления источниками

  • Обновить UI для управления разными типами источников
  • Разные настройки фильтрации для каналов, групп и чатов
  • Единая статистика по всем типам источников
  • Рекомендации на основе анализа всех источников