Skip to content

1azar/radar2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Этот репозиторий содержит код и описание сервиса для mvp хакатона

Юзерфлоу:

Интерфейс представляет собой ленту новостей, агрегированных из разных источников. Наверху всегда более "горячие" новости, рейтинг постоянно пересчитывается из-за обновления социальных маркеров (реакции, репосты, просмотры и тд). Пока новость обсуждают (меняется количествво просмотров, появляются реакции, репосты) hotness остается высоким. Чем старше новость, тем меньше влияния социальные маркеры имеют на hottnes_score и "горячесть" падает.

Интерфейс

Нераскрытая новость (еще не кликнули на него):

image

Раскрытая новость (нажали на нее):

image

Нажали на кнопку генереции черновика для поста/заметки:

image

Архитектура:

image

Схема БД:

image

Чуть подробнее о реализации и архитектуре:

Архитектура построена на базе event-driven + fun-out, обработка новостей ассинхронная, что позволяет легко расширят решение при росте пользователей. Постарался все обмазать кешами чтобы не тратить токены лишний раз.

Первый узел fetchers - сборщики статей/постов

Свой пулл фетчеров на один источник новостей (телеграм, RSS лента, новостные сайты, X и другие социальные сети ps: реализован только telegram). Они парсят новости и собирают социальные метрики (лайки, репеосты, просмотры и тд) какие можно получить из источника. Каждый источник имеет свои метрики кредабилити (например в тг это общее количество подписчиков и степень доверия каналу. ps: еще можно посчитать среднюю скорость изменения совокупности социальных метрик чотб точнее выявлять всплески активности для более точно оценки hottnes_score). Далее эти новости (после небольшой фильтрации от спама или рекламы) с метаданными идут в очередь (кафка или что-то еще, тут используется редис стрим) и их вычитывает следующий узел - пулл embedding воркеров. Если очередь новости могут отправляться повторно если его социальные метрики изменились (нужно для актуальной оценки hottnes_score)

Embedding воркеры

Принимают текст новостей и с помощью модели расчитывается вектор в 1024 мерный, который описывает тему новости (инфоповод), на основе котрого будет производится кластеризация (дедубликация) - объединение одинаковых новостей в группу. после этого обогощенные данные идут в следущую очередь, из которой ее читает воркер занимающийся кластеризацией.

Clustering ворке

Берет новости и группирурует, одна группа - один инфоповод. После чего сохраняются в БД (используется постгрес +pgvector). Далее эту базу анализируют различные агенты и обогащают базу (описания агентов ниже будет).

Агенты анализаторы

  • translator: переводит новости если они не на русском (текущая реализация только переводит английский)
  • ranking: расчитывает hottness_score на основе формул (подробнее ниже будет)
  • title generator: на основе новостей в кластере формирует заголовок обощенный
  • entity extractor: на основе текстов новостей в рамках инфоповода выявляет теги компании/тикеры/страны/сектора
  • why_now: на основе текстов говорит почему новсть важная (на что влияет и тп)
  • draft generator: не совсем воркер, но выдает черновик поста/заметки об инфоповоде по запросу юзера.

расчет hottnes_score

Так как операция очень частая тк требуется актуальную информацию о "горячести" иметь, поэтому используется формула для оценки: image

Еще скриншоты:

image image image

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors