Запускаем личный АИ-инфоконвейер: как я строю систему смыслового мониторинга с YAML и GPT

от автора

Отслеживаем новости, документы и тендеры

Rostral.io размышляет над ответом вместо вас

Rostral.io размышляет над ответом вместо вас

Привет! Каждый день приходится столько всего отслеживать— лучше делать это в кратком пересказе и без лишних движений.

Может быть, Вы хотите читать новости и статьи без лишней «воды». А может, вам приходится следить по работе за длинными и скучными, но важными документами: новыми законопроектами, решениями арбитражных судов, государственными торгами и закупками?

Вот было бы здорово, чтобы сайты сами проверялись на наличие новых событий (даже если там нет RSS), выложенные на этих сайтах PDF и DOCX файлы сами выгружались, а мы видели краткую выжимку по каждому событию! И так — для каждого сайта. И все — в единой ленте.

Чтобы любой источник для наблюдения можно было бы добавить по YAML-конфигу, указав CSS-селекторы, правила нормализации и GPT-промт.

Как это работает

Вот, например, реальный пример из сферы урбанистики:

meta:   name: Мониторинг ГИКЭ КГИОП   description: Отслеживает появление новых историко-культурных экспертиз на сайте КГИОП СПб  source:   type: html   url: |     {% set current_year = now().year %}     https://kgiop.gov.spb.ru/deyatelnost/zaklyucheniya-gosudarstvennyh-istoriko-kulturnyh-ekspertiz/gosudarstvennye-istoriko-kulturnye-ekspertizy-za-{{ current_year }}-g/   frequency: daily   gpt:   prompt: |          Проанализируй текст экспертизы ниже и выдели:      1. Объект культурного наследия     2. Адрес     3. Заказчик или собственник     4. Виды работ: реконструкция, реставрация и др.     5. Кадастровые номера     6. Краткое заключение или вывод      Вот текст: {{ text }}  # Часть конфига для краткости пропущена, но все есть в репозитории 

И при появлении на сайте очередного 300-страничного документа получить в своей ленте новостей те самые несколько пунктов, которые позволяют оценить будущую судьбу здания. Так как речь идет о GPT-пересказе, что-то может быть отражено неточно, но выжимки достаточно, чтобы понять, представляет ли информация интерес и надо ли изучать документ дальше:

---------------------------------------- 1. **Объект культурного наследия**: «Особняк Дурново П.П.» 2. **Адрес**: Санкт-Петербург, Галерная д. 15, лит. А. 3. **Заказчик или собственник**: *Здесь название компании* 4. **Виды работ**: Ремонт фасадов и другие работы по сохранению объекта культурного наследия. 5. **Кадастровые номера**: Не указаны в тексте. 6. **Краткое заключение или вывод**: Экспертиза подтвердила соответствие проектной документации требованиям сохранения объекта культурного наследия регионального значения. 

Это уже работает, хоть пока и требует полировки напильником: дорабатываю MVP в виде CLI на «Питоне». Поддерживается выбор шаблона при запуске. Вывод идет в терминал и в лог-файл, а база данных и фласк-интерфейс (в котором и будет та самая единая лента наблюдения) — в ближайших планах.

Философия проекта

Разумеется, можно и нужно делать шаблоны под свои задачи. Сам проект с открытым исходным кодом. Я надеюсь, что такой проект будет полезен как для исследователей данных, которым нужно следить за сложными источниками (аналог Huginn, но со встроенным фидом и более простой логикой), так и для более широкой аудитории, кто хочет не пропустить что-то важное для себя (аналог changedetection.io, но вместо простого diff у нас лента событий, которые формируются путем более глубокого парсинга). Особенность — AI-пересказ новостей.

Сравнение с аналогами

Сравним наш проект с хорошо известными замечательными аналогами с открытым исходным кодом (присмотритесь к ним тоже, возможно, для ваших целей они подойдут больше!), которые так же могут работать как self hosted решения.

Характеристика

Rostral.io

Huginn

Changedetection.io

🔧 Тип проекта

CLI + YAML + AI

Web-интерфейс + сценарии-агенты

Web-интерфейс + мониторинг изменений

🧠 Глубина обработки

Семантический парсинг + GPT-интерпретация

Простые действия и фильтры

Text diff или визуальные различия

📄 Работа с документами

Поддержка PDF/DOCX и анализ содержимого

Ограничено — нужно писать парсеры или настраивать логику вручную

Нет обработки документов

🧩 Шаблоны

YAML-конфиги с CSS, нормализацией, GPT

JS/JSON-сценарии и блоки (agents)

Только URL и настройки diff

🔎 Сценарии наблюдения

Арбитраж, тендеры, экспертизы, новости

Почта, RSS, API, Twitter и др.

Простой мониторинг сайтов и страниц

🌐 Поддержка AI

GPT4All / Deepseek / локальные модели

Нет встроенной поддержки AI

Нет

🧭 Интерфейс

CLI (терминал), Flask UI — в разработке

Web UI

Web UI

📡 Вывод

Событийная лента + лог-файл

Множественные действия (email, webhook)

HTML или email

🧠 Фокус проекта

Семантический мониторинг и интерпретация

Автоматизация задач

Отслеживание изменений

⚙️ Локальный запуск

Да (без интернета, с локальной моделью)

Да

Да

🔓 Open source

✅ Да

✅ Да

✅ Да


Юридические аспекты

Так как с автоматизацией сбора данных связаны не столько технические, сколько сложные юридические и этические вопросы доступа к информации, я считаю себя обязанным об этом предупредить.

Конкретный пример: хотя чисто теоретически мы могли бы настроить сбор данных о судебных решениях, например, из той же картотеки арбитражных дел, мы должны иметь в виду, что за доступ к её API просят большие деньги (от 660 тыс. рублей на 2022 год, см. статью на VC.ru) . Это связано с тем, что сайт картотеки поддерживается частной компанией.

В проекте Rostral.io предполагается использование нашего open source продукта прежде всего для личных, образовательных или научных целей. Либо подразумевается, что мы получили доступ к API нужного ресурса и затем уже настраиваем для него шаблон (потому что хотим собрать все в одну ленту в виде единообразных саммэри). Также мы, конечно, должны стремиться к тому, чтобы учитывать ограничения robots.txt и выдерживать вежливые интервалы запросов к сайтам (например, не чаще чем раз в 5 секунд).

Технические особенности

Наиболее творческой мне кажется часть реализации, связанной с ИИ. Когда источников 100+ и в каждом может быть 100+ страниц текста (если это PDF), оплачивать токены ChatGPT может быть накладно.

Поэтому в качестве основного варианта используется локальная модель на основе Deepseek (можно подключить любую модель по своему желанию, но эта запускается на ноутбуке с 16 GB RAM и даёт осмысленные ответы).

Работа с ней идёт через библиотеку для «Питона» под названием GPT4All — такое решение показалось мне на данном этапе самым простым.

Но и для локальной модели «переварить» большие документы непросто. Поэтому применён следующий подход: сначала выбираются блоки текста по ключевым словам (например, в случае примера с экспертизами выше это могут быть слова «заказчик», «собственник», «проектом предусматривается» и т. п.). Затем эти фрагменты объединяются и передаются модели, что позволяет уложиться в ее окно возможностей. Как мне показалось, это эффективнее, чем обычный embedding.

Конвейер в заголовке не только метафора: по сути система работает как пайплайн, передавая источник по нескольким стадиях (fetch, extract, download, normalize и т. д.), которые управляются из шаблонов.

Я назвал проект Rostral.io («Ростраль») — по ростральным колоннам Петербурга, огонь которых освещает путь. Пока не знаю, как все пойдёт, но мне было важно поделиться этим с сообществом.

Полная спецификация проекта Rostral.io для разработчиков (на английском языке) вместе с исходным кодом доступна в репозитории на GitHub. Пулл реквесты приветствуются!

Как попробовать

Примерно так:

cd rostral.io pip install -r requirements.txt  # Дополнительные шаги: # 1. Установите Tesseract OCR #    Windows: winget install -e --id UB-Mannheim.TesseractOCR #    Mac: brew install tesseract #    Linux: sudo apt install tesseract-ocr  # 2. Скачайте модель вручную (более 4 ГБ на диске): #    - Перейдите: https://huggingface.co/ct-2/DeepSeek-R1-Distill-Llama-8B-Q4_0-GGUF #    - Скачайте файл DeepSeek-R1-Distill-Llama-8B-Q4_0.gguf #    - Положите в папку: rostral.io/models/DeepSeek-R1-Distill-Llama-8B-Q4_0/  python3 -m rostral 

А вам близок такой подход к наблюдению? Какие сценарии наблюдения, которые можно реализовать в виде шаблонов, были бы полезны вам? Госказкупки, pravo.gov.ru, regulation.gov.ru, патенты или что-нибудь еще?


ссылка на оригинал статьи https://habr.com/ru/articles/927938/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *