Notimia: ИИ-редакция, которая превращает местные новости в готовые посты и городскую афишу
Местный новостной канал живёт скоростью, но небольшая команда не может каждый день читать полсотни сайтов и вручную переписывать каждую новость. Notimia читает источники за неё, собирает новости в сюжеты, готовит черновики по фактам и отправляет их в Telegram, а что выйдет - решает человек.
Задача
Местный новостной канал или городской портал соревнуется скоростью и полнотой. Новости разбросаны по десяткам мест: региональные газеты, мэрии, официальный бюллетень, YouTube-каналы, пресс-релизы, которые приходят кому-то на почту. Одно и то же событие появляется пять раз под разными заголовками, а важное теряется в шуме.
Небольшая команда тратит большую часть дня на чтение, а не на работу над текстами. А переписывать чужие статьи долго и рискованно: текст, который слишком близко повторяет источник, - это копия.
Мы сделали Notimia - ИИ-редакцию, которая берёт на себя чтение, сортировку и первые черновики, чтобы редакторам оставалось решать, что и как публиковать.
Новости из десятков источников
Каждый источник подключается через свой адаптер; нужный выбирается сам, когда источник добавляют по ссылке:
- RSS-ленты и новостные карты сайтов газет и порталов.
- Сайты без ленты - их страницы читаются напрямую, а для сайтов, которые показывают текст только через JavaScript, есть браузер без интерфейса.
- YouTube-каналы - с расшифровкой видео, когда она нужна.
- Официальный бюллетень BOE - чтобы официальные документы приходили рядом с новостями.
- Почтовый ящик для пресс-релизов и рассылок.
Неработающие источники отмечаются. Дубли отсекаются сразу: когда одну агентскую заметку перепечатывают несколько сайтов, перепечатки ссылаются на оригинал и не считаются новыми новостями.
Статьи собираются в сюжеты
Каждая статья превращается в набор фактов: кто, что, где, когда, цифры и цитаты, а также темы и места. Ещё статья получает вектор - числовой отпечаток её смысла.
Новая статья сравнивается с открытыми сюжетами последних дней. Если речь о том же событии, она добавляется в этот сюжет, если нет - открывает новый. Сюжет хранит свои статьи, список изданий, которые о нём написали, со временем публикации и общий список фактов, у каждого - число подтверждающих источников. Если автоматика ошиблась, администратор может вручную объединить сюжеты, разделить их или убрать из сюжета статью.
Входящие: по тому, что вам нужно
Проект описывает, что ему интересно, в брифах: темы, места, язык, стиль и длина постов, а также режим - черновики на проверку, автопубликация или только дайджесты.
Сюжеты ранжируются под каждый бриф по смыслу, а не по ключевым словам, и попадают во “Входящие” с оценкой, числом изданий и местом. Ранжирование делается только векторным поиском, поэтому наполнение “Входящих” не стоит ни одного обращения к ИИ. По клику открывается сюжет: краткое изложение, подтверждённые факты и список публикаций. Отсюда редактор пишет пост, добавляет сюжет в подборку, скрывает его или просит больше не показывать похожие. Вкладка “Чат” отвечает на вопросы о сюжете по его собственным материалам.
Посты пишутся по фактам - и проверяются
Когда редактор нажимает “Написать пост”, ИИ получает факты сюжета и настройки брифа, но никогда - сами исходные статьи. Прежде чем кто-то одобрит черновик, он проходит несколько проверок:
- Первая проверка ищет совпадения с источниками: Notimia находит самую длинную цепочку слов, общую у черновика с любым исходным текстом. От шести слов подряд черновик пишется заново, от восьми - одобрить его нельзя. Имена и цитаты с указанием автора не считаются. Это техническая страховка от случайного копирования, а не юридическая гарантия.
- Каждая цифра, сумма и дата в черновике должна быть в фактах. Эту проверку делает код, а не модель, потому что модели с числами ненадёжны.
- Наконец, черновик проверяет ИИ: отдельный проход модели ищет утверждения, которые факты не подтверждают, оценочные суждения в новостном тексте и запрещённое содержание.
Если черновик не прошёл проверку, он один раз пишется заново, а потом помечается для человека. Редактор может сократить или удлинить текст, сменить стиль, перевести его, подобрать или сгенерировать картинку, сравнить версии или отправить ссылку на согласование клиенту - тот одобрит текст без регистрации.
Публикация в Telegram с пометкой ИИ
Сегодня готов один канал публикации - Telegram. Канал подключается через сервисного бота, а редактор видит превью ровно того, что получит канал. Всё, что выходит без одобрения человека, сверху помечается строкой о том, что текст создан ИИ, на языке поста - по-испански это “Contenido generado automáticamente con inteligencia artificial”. Пометку формирует один компонент для всех каналов, поэтому забыть её нельзя. Посты выходят сразу или ставятся в календарь, а система сама распределяет слоты публикации для каждого брифа.
Один сюжет - несколько форматов
Кроме поста, из того же материала можно сделать дайджест за день или неделю, рассылку, сценарий для видео с режимом суфлёра, слайды для карусели, короткий текст для пуш-уведомления или аудиовыпуск: его читает синтезированный голос, а выпуски публикуются как подкаст. Несколько сюжетов можно объединить в один пост.
Городская афиша со своим ботом
Notimia собирает и события: концерты, выставки, лекции, ярмарки, мастер-классы. Она читает календари, разметку событий на сайтах площадок и афиши, объединяет одно событие, объявленное в нескольких местах, и замечает, когда его переносят, меняют или отменяют.
В итоге получается публичная страница афиши на испанском, английском, русском и украинском с фильтрами: сегодня, вечером, на выходных, по категориям, бесплатные, для детей. Каждое событие ведёт на источник, который его объявил, и добавляется в календарь. Жители могут подписаться на дайджест, а Telegram-бот спрашивает язык, город и интересы и присылает подборку на выходные; зарегистрированные пользователи получают напоминание перед сохранёнными событиями. Организаторы могут предложить событие - его одобряет модератор.
Тренды и неосвещённое
Экран “Тренды” показывает, какие сюжеты расходятся прямо сейчас: сколько изданий их подхватили и как быстро, срочная ли это новость, и хронологию публикаций, по которой видно, насколько канал отстаёт от первого издания. Экран “Не освещено” собирает официальные документы, о которых ещё никто не написал.
Для других платформ и команд
Notimia устроена как платформа с несколькими проектами. В каждом проекте есть участники с ролями - владелец, редактор, клиент-согласующий - и свой учёт расходов. Всё доступно через REST API с ключами проекта и правами доступа, описанный в OpenAPI, а также через подписанные вебхуки, ленты RSS, Atom и JSON и виджет новостей для любого сайта.
Все обращения к ИИ идут через единый шлюз. Каждое записывается с моделью и стоимостью, расходы видны по проекту и по задаче, а администратор выбирает, какая модель выполняет какую задачу. Простые решения “да или нет” уходят в отдельную модель для решений вместо полноценной генерации текста, а работа, которая может подождать, отправляется пакетом за полцены.
Технологии
- Бэкенд: Laravel 13 (модульный монолит), PHP 8.5
- Панель: Inertia + React 19 + Ant Design
- База данных: PostgreSQL 18 (поиск, аналитика и секционированные журналы)
- Векторный поиск: Qdrant (статьи, сюжеты, брифы, события)
- Очереди и реальное время: Redis, Horizon, WebSockets на Reverb
- ИИ: Anthropic Claude и OpenAI через единый шлюз, эмбеддинги Voyage
- Голос: сервисы расшифровки и синтеза речи для аудиоформатов
- Рендеринг: Chromium без интерфейса для сайтов на JavaScript, Gotenberg для экспорта
- Публикация: Telegram Bot API
- Инфраструктура: Docker, манифесты k3s, GitLab CIРезультат
Вместо чтения десятков сайтов редактор открывает “Входящие” с сюжетами, отобранными под его канал, где факты уже извлечены, а все публикации собраны в одном месте. Черновик, написанный по этим фактам и сверенный с источниками, - в один клик, превью для Telegram показывает, что увидят читатели, а городская афиша наполняется сама. Статус: Notimia в разработке и ещё не запущена; весь процесс работает на реальных новостях провинции Аликанте, а Telegram пока единственный готовый канал публикации.




