Всем доброго времени суток!
Сегодня я бы хотел рассказать Вам про один пет-проект, которым надеюсь заинтересовать и Вас. Было бы здорово найти еще пару-тройку человек, с которыми можно было бы довести идею до ума.
Последние пару лет я работаю над задачами, которые требуют от меня постоянного мониторинга научной литературы по заданной тематике. И думаю, все присутствующие здесь согласятся со мной, что эта задача очень нетривиальная и требует много усилий. И дело даже не в том, что мне тяжело находить только что вышедшие статьи; скорее, проблема в том, что этот процесс мне кажется жутко неудобным, и потому повторять его день за днем ужасно лениво. Часто я срываюсь и пропускаю несколько дней, а потом - раз! - и оказывается, кто-то выложил работу, которая в корне меняет всю картинку происходящего, а я об этом ни сном, ни духом. Ну и сам факт того, что каждый день выходит такая гора новых статей, сильно угнетает и день за днем подтачивает волю.
Поэтому я вознамерился написать тулзу, которая бы автоматизировала процесс поиска статей по заданной тематике, а также суммаризировала бы найденные статьи и оповещала бы меня о них удобным мне образом. За пару выходных я на скорую руку накидал MVP, и результат мне очень понравился. Сейчас опишу, что у меня получилось на выходе.
Допустим, мы хотим мониторить статьи по топику Image Editing. У Arxiv-а есть API, которое позволяет по ключевым словам и заданному диапазону дат извлекать статьи. Составим список ключевых слов, которые часто попадаются в нужных нам статьях, и извлечем статейки. Проблема заключается в том, что ключевые слова - это не самый лучший способ извлекать статьи, которые тебе нужны. Вместе с полезными статьями, как правило, извлекается еще куча мусора. Пришлось составить еще список отрицательных ключевых слов. Кроме того, все статьи, которые прошли фильтр отрицательных ключевых слов, я пропускал через Gemini-классификатор с заданным промптом.
Окей, с горем пополам, мы получили некий список релевантных нашему запросу статей. Далее, пишем промпт для суммаризации, и все статьи еще раз пропускаем через мультимодальный Gemini. Работает великолепно, саммари получаются действительно полезными и емкими. Далее, вырезаем из PDF-документа все картинки, которые в нем есть, вставляем их в саммари Gemini, и, вуаля, красивый отчет по статье готов!
Следующим шагом нужно было решить, где публиковать эти отчеты. Подумав некоторое время, я решил, что будет удобно воспользоваться API Notion. Под каждое саммари статьи создается страничка в базе данных, заполняется метаинформация, вставляется текст и ссылки на картинки, сохраненные на S3. На выходе наслаждаемся красотой и удобством Notion. Далее, пишем телеграм-бот, который каждое утро будет мониторить, есть ли новые поступления в базе Notion, и если находит их, то отправляет нотификейшн, который содержит краткое саммари статьи, а также ссылку на страничку в Notion.
Жить стало намного проще. Почти пропал страх пропустить что-то важное, ведь теперь каждое утро ты получаешь полный отчет о том, что происходит в области твоих интересов.
Однако, у текущего прототипа есть ряд существенных недостатков. Во-первых, нет возможности сходу добавлять новые топики, которые хочется мониторить. Во многом из-за того, что поиск завязан на ключевые слова, что дико неудобно. Для того, чтобы избавиться от них, я начал строить решение на базе Qdrant, чтобы осуществлять векторный поиск по всей базе данных архива. Во-вторых, хочется добавить эндпоинт для суммаризации статьи по названию или ссылке. В-третьих, сейчас все завязано на Gemini, так как мы в команде пользуемся именно ей. Однако очевидно, что для многих - это не самый удобный вариант, нужно добавить возможность динамически менять модель, которая используется для суммаризации и классификации статей. Ну и так далее и тому подобное. Фичей можно придумать вагон и маленькую тележку. Поэтому, если кого-то заинтересовал этот проект, то пишите в комментариях, и будем развивать его вместе.
P.S. В комментариях можно найти примеры работы MVP.
Александр Гордеев