Создание ИИ-дайджеста биологических новостей: мой опыт
Краткая ремарка: Проект функционирует в режиме реального времени, автоматизированная лента обновляется дважды в сутки. Ознакомиться с готовым контентом можно в моём Telegram-канале Bio_news (ссылка ждёт в конце), а оставить отзывы и конструктивную критику — прямо здесь. Теперь перейдём к технической изнанке этого механизма.
-
Введение (Что послужило импульсом?)
Как известно, биология — ключевая дисциплина XXI столетия. Ею занимаются все причастные, а те немногие, кто далек от науки профессионально, как минимум проявляют к ней живой интерес. При этом объемы генерируемых «мокрых» данных колоссальны, не говоря уже об исследованиях in silico, эпохе Big Data и смежных направлениях. Разумеется, далеко не всё доходит до печати, но тем не менее ежедневно свет видят тонны профильных материалов в тысячах (!) рецензируемых изданий. Тем удивительнее, что лаконичной, выверенной и увлекательной новостной ленты, регулярно транслирующей свежие биологические открытия, до сих пор не существовало. По крайней мере, мне не удалось обнаружить ничего подобного ни на русском, ни на английском языках. Как правило, попадаются либо фундаментальные лонгриды от академических экспертов, требующие профильного образования и нескольких часов свободного времени (причем далеко не всегда посвященные прорывным релизам), либо научпоп, где биология безвкусно смешана с астрономией и IT-трендами (кому это вообще интересно?). Либо же годный контент щедро сдобрен гомеопатическими дозами кликбейта в духе «ученые в очередной раз победили рак». А вот чтобы за утренним кофе за три минуты пробежать глазами короткие заметки про ископаемых ящеров, особенности строения тычинок, фермент EC1.1.1.1 или метаболические пути гипертермофильных архей — такого формата попросту не было. Что ж, раз подобного продукта нет, пришлось спроектировать его самостоятельно.
Разумеется, все люди разные, и угодить абсолютно каждому невозможно. Моя амбиция — сделать так, чтобы пользователь с любым бэкграундом и уровнем подготовки нашел для себя что-то увлекательное. К тому же под каждой заметкой всегда указан первоисточник, так что углубиться в детали можно в любой момент.
-
Принцип работы:
Весь алгоритмический контур разделен на четыре последовательных этапа (два отданы под скрипты, предпоследний реализован на базе LLM, а финальный завязан на интерфейс мессенджера):
-
Этап 1. Сбор информации. Каждые два часа фоновые скрипты сканируют источники, аккумулируют свежие публикации биологической тематики и пополняют общий пул. В качестве доноров выступают преимущественно англоязычные агрегаторы (поскольку крупные издательские дома предпочитают игнорировать запросы скромного парсера), однако география шире — например, задействован RSS Американского общества микробиологов; в общей сложности подключено 13 источников. Кроме того, я могу вручную закинуть через Telegram-бота ссылку на приглянувшуюся статью или готовый текст (в дальнейшем языковая модель корректирует орфографию и пунктуацию, приводя материал к единому стандарту выпуска, но принципиально не вмешивается в авторский стиль и логику). Подобные «крафтовые» материалы автоматически получают наивысший приоритет (подробнее о весах — ниже).
Этап 2. Фильтрация и взвешивание.
Скрипты отсеивают дубликаты и информационный мусор, после чего присваивают каждой новости определенный «вес». Значение формируется на основе авторитетности источника (параметр задан вручную волевым решением) и времени нахождения в пуле (чем дольше материал ждет своего часа, тем ниже вес — никаких поблажек за выдержку). Новости, пролежавшие в базе дольше недели, безжалостно удаляются (разумеется, с замиранием сердца). Правда, перед самым списанием, ровно за сутки до дедлайна, у каждой истории есть шанс на искупление: она гарантированно отправляется на рассмотрение нейросети в обход стандартных тематических и ресурсных лимитов, просто чтобы не кануть в Лету, ни разу не побывав в шорт-листе (вот бы и в реальной жизни так).
Вся эта кухня регулируется жестким сводом правил. Одно из них защищает ленту от монополии: если какой-то источник начинает слишком агрессивно забраковывать ленту однотипными инфоповодами, его временный вес понижается специальным штрафным коэффициентом, который постепенно тает по мере «остывания» ресурса. Без этого предохранителя мы рисковали бы регулярно читать выпуски, целиком посвященные integrative agrobiology and carbon sequestration либо очередным фантазиям ИИ на тему «нейросеть смоделировала вообще всё на свете».
Этап 3. Нейросетевая обработка (LLM).
Каждые 12 часов бандл из 21 материала передается языковым моделям: Gemini 3.6 Flash или Claude Sonnet 5. Их задача — отобрать 7 наиболее емких сюжетов и скомпоновать финальный дайджест. Каждая находка пересказывается на русском языке в едином корпоративном стиле выпуска, дополняется «панчлайном» (сочной, порой сомнительной шуткой на грани черного юмора) и специальными рубриками (о них ниже). Отвергнутые варианты либо возвращаются в ротацию, либо (если модель признает их откровенным браком) ликвидируются навсегда.
Создание панчлайна — пожалуй, самый филигранный процесс: сначала модель пытается сгенерировать шутку с нуля, отталкиваясь от контекста исследования. Если органичного озарения не происходит, задействуется внутренняя база крылатых фраз, идиом, киноцитат и мемов. При этом нейросеть строго следит, чтобы устойчивое выражение не выглядело притянутым за уши и сохраняло первоначальный смысл. Если подходящего контекста нет вообще, шутки не будет: плохой юмор хуже его полного отсутствия (истина, которую люди часто игнорируют, в отличие от обученных мною LLM).
Еще одна важнейшая задача — четкое разграничение медицины и фундаментальной биологии. Этим занимаются и скрипты (на этапе грубой очистки), и LLM (смещая фокус в сторону чистой науки в пограничных ситуациях). Например, клиническая драма конкретного пациента нейросеть не интересует, а вот изящество молекулярного механизма патогенеза — безусловно, да. Я заложил этот принцип намеренно, чтобы не перегружать ленту и в силу собственного слабого интереса к медицинским дебрям.
Изначально я предоставлял моделям гораздо большую творческую свободу, но они регулярно демонстрировали профнепригодность. Отчасти сказывается не топовый сегмент моделей, но главная беда биологии в том, что она не прощает любимой нейросетевой импровизации в стиле «сейчас я проверю код, а не буду слепо гадать» — после чего делается ровно наоборот. Пришлось закрутить гайки: львиная доля фильтрации происходит на втором этапе, а сама LLM зажата в рамки жестких регламентов. В частности, действует категорический запрет на обесценивание науки ироничными фразами вроде «ученые в очередной раз открыли Америку». Единственное разрешенное исключение сделано для британских исследователей: если публикация фиксирует нечто предельно самоочевидное («ученые доказали, что голодный человек хочет есть»), позволительно сострить про «британских ученых». Распространять эту вольность на другие научные школы строго запрещено.
Помимо топ-7 новостей, нейросети обогащают выпуск постоянными рубриками: «Статья недели», «День в истории» и «Персона дня»:
-
Статья недели. Концепция заключается в мониторинге того, что именно научное сообщество изучает прямо здесь и сейчас. Источником служит bioRxiv — репозиторий препринтов по биологии и биомедицине. Система фильтрует теги BIO и MED, беспощадно отсекая медицину (
туда ей и дорога). Алгоритм вычленяет самую просматриваемую работу за семидневный отрезок. Если публикация уже фигурировала в прошлых выпусках, скрипт берет следующую по популярности. Важно учитывать, что в фокус попадают не обязательно самые свежие, а именно наиболее резонансные за неделю тексты, хотя обычно эти показатели совпадают. -
День в истории. Индекс формируется на основе открытого API Википедии «В этот день», возвращающего хронологическую выжимку для конкретной даты. Фильтрация по ключевым словам оставляет исключительно биологические вехи полувековой и большей давности. Из-за жесткого сито таких событий набирается немного, поэтому рубрика появляется нечасто (на текущий момент — ровно один раз).
-
Персона дня. Здесь в случайном порядке демонстрируются портреты биологов, внесших весомый вклад в дисциплину. Пришлось изобретать велосипед: Google Scholar не жалует ботов, а Semantic Scholar привязывает метки областей не к авторам, а к конкретным статьям. Чтобы обойти это ограничение, скрипт рандомно ищет публикации с тегом «Biology», агрегирует их авторов и отбирает тех, чей индекс Хирша превышает или равен 30 (цифра подогнана под вполне конкретные стандарты научной зрелости). Однако одного индекса недостаточно: ученый мог случайно отметиться в чужой работе. Поэтому среди самых цитируемых трудов исследователя отыскивается тот, где он указан последним автором — в академической среде это традиционно маркирует руководителя проекта, а значит, отражает его профильные интересы. Эта рубрика добавлена ради человеческого измерения: возможно, кто-то из читателей неожиданно обнаружит в одном из выпусков своего научного руководителя?
Этап 4. Дистрибуция. В результате слаженной автоматизации дважды в сутки формируется готовый дайджест: семь флагманских новостей, статья недели, хроникальный эпизод (периодически отсутствующий) и портрет ученого. Сборка поступает в мой приватный Telegram-чат, где одним нажатием кнопки я активирую публикацию в публичном канале. Предварительно у меня есть возможность исключить любую новость, показавшуюся сомнительной. Изначально бот пытался вещать напрямую в канал, но ввиду юного возраста и наивности алгоритмов пришлось внедрить предохранитель по принципу human-in-the-loop. В планах — интеграция с другими платформами (VK, Дзен), причем для Дзена уже настроен специальный зеркальный бот. На случай, если Telegram вдруг вздумает ввести какие-то ограничения — хотя о подобных безумных идеях я, конечно, не слышал.
-
-
-
Архитектура решения. Ниже приведена принципиальная схема контура — от первичного сканирования источников до генерации и релиза готового выпуска:

-
Результат лицом! Проект продолжает активно дорабатываться: в фокусе внимания — совершенствование фильтрации на базе квартилей Q1 по версии Scimago. Тем не менее читать итоговую ленту уже искренне увлекательно, а объем ручных правок и экстренных удалений неудачных заметок стремительно приближается к нулю.
Прошу любить и жаловать. Лайки, шэры и репосты приветствуются. Буду искренне рад обратной связи, критике и свежим идеям. Книга жалоб и предложений открыта в комментариях под этой статьей.
-
Читать Bio_news в Telegram
-
-
P.S. Техническая спецификация. Вся логика реализована на Python с активным привлечением моделей Claude (различных итераций Sonnet и Opus). Задействован следующий стек внешних библиотек:
-
python-telegram-bot(включая модулиtelegram,telegram.ext,telegram.request) — ядро взаимодействия с мессенджером: обработка команд, диспетчеризация фоновых задач черезJobQueueдля RSS-лент и мониторинга таймлайнов. Под капотомJobQueueопирается наAPScheduler, что отражено в логах (apscheduler.scheduler,apscheduler.executors), хотя в прямых зависимостях проекта он не прописан. -
anthropic— официальный SDK для интеграции с Claude (from anthropic import Anthropic). -
requests— базовый транспорт для REST-запросов: интеграция с DOI/CrossRef (url_resolver.py), Semantic Scholar (person_of_the_day.py), Википедией (history_today.py), а также с Gemini через нативный REST в обход официального SDKgoogle-generativeai. -
feedparser— синтаксический анализ RSS-потоков посредством вызоваfeedparser.parse(url)в модулеrss_puller.py. -
beautifulsoup4(bs4) — парсинг HTML-структур агрегаторов для извлечения первоисточников DOI (BeautifulSoup(html, "html.parser")вurl_resolver.py). -
python-dotenv— менеджер переменных окружения черезload_dotenv(override=True)в скриптахbot.pyиdigest_builder.py. В коде зафиксировано строгое правило: вызов должен происходить ДО импорта модуляconfig.py, иначе конфигурационные константы не инициализируются. -
httpx— применяется как штатный сетевой слой внутриpython-telegram-bot, так и для кастомных запросов. В частности, вbot.pyчерез него принудительно задействован IPv4 (httpx.AsyncHTTPTransport(local_address="0.0.0.0")) для обхода инфраструктурных проблем с IPv6-соединениями до серверов Telegram. -
googlenewsdecoder— утилита для резолва редиректов Google News в прямые URL научных публикаций (from googlenewsdecoder import new_decoderv1вurl_resolver.py).
Логирование. Реализовано через стандартный
logging.basicConfigбез ротации логов. Файлbot_stderr.logпухнет бесконечно, пока не будет очищен вручную. На текущий момент объем таков, что открывать его без использования параметра-Tailв PowerShell уже откровенно боязно. -
Как и зачем разрушить монополию научных журналов
От кухонной воронки до бронебоя: как работают кумулятивные струи
Почему сотрудники задают вопросы коллегам вместо того, чтобы искать ответ в базе знаний
Искусственный интеллект решил математическую «задачу тысячелетия» с призом в миллион долларов
IBM Simon: взлет и падение первого прото-смартфона
Память ИИ-агентов стала их главным недостатком
Характер — это не приговор: откуда берутся наши привычки и можно ли их переписать