AI-скоринг тендеров и заявок: из 80-120 публикаций в день до 3-5 релевантных в Telegram
Мониторинг закупок и заявок с трёх источников: парсинг публикаций, LLM-оценка технического задания по 10-балльной шкале, HOT и WARM уходят в Telegram. Мониторинг занимал 2-3 часа в день.
- Масштаб
- 3 источника, автозапуск каждые 6 часов
- Этап
- Работает в проде
- Сдан
- 2026
TL;DR. Из 80-120 публикаций в день вручную отбирались 3-5 подходящих — на это уходило 2-3 часа ежедневно. Система парсит публикации с трёх источников, младшая языковая модель оценивает техническое задание по 10-балльной шкале, в Telegram приходят только релевантные лоты. Запуск автоматический, каждые 6 часов.
Ситуация: мониторинг закупок съедает рабочий день
Тендерные площадки и биржи заявок публикуют десятки лотов в день. Из 80-120 публикаций подходящими оказываются 3-5, но чтобы их найти, нужно открыть каждую: прочитать техническое задание, понять, о чём речь на самом деле, сопоставить с профилем работ.
Фильтрация по ключевым словам на стороне площадки не решает задачу: «автоматизация» находит поставку конвейеров, а реальный проект по компьютерному зрению может быть назван «модернизацией системы видеонаблюдения». Разбор ложится на человека — 2-3 часа в день, каждый день.
Задача
- Забрать разбор публикаций у человека полностью.
- Оценивать техническое задание по смыслу, а не по совпадению ключевых слов.
- Присылать только то, что стоит открыть, — в тот канал, который и так открыт.
- Удержать стоимость обработки на уровне, при котором ежедневный прогон не обсуждается.
Что сделали
Система забирает публикации с трёх источников: государственные закупки, биржа проектов и вакансии как косвенный сигнал спроса на автоматизацию. Каждый источник разбирается своим адаптером — API, RSS или парсинг документов закупки в PDF и DOCX.
Извлечённое техническое задание уходит в языковую модель, которая оценивает лот по 10-балльной шкале против профиля работ и присваивает статус: HOT, WARM или COLD. HOT и WARM отправляются в Telegram со ссылкой и кратким обоснованием оценки. COLD остаются в логе и в таблице — их можно перепроверить, но они не отвлекают.
Прогон запускается по расписанию каждые 6 часов через системный планировщик. Обработанные публикации помечаются в локальной базе, поэтому один и тот же лот не приходит дважды.
Результат
- Время на мониторинг — с 2-3 часов в день до нуля.
- В Telegram приходят 3-5 релевантных лотов вместо 80-120 публикаций для ручного просмотра.
- Пропущенных релевантных тендеров за время работы — не зафиксировано.
- Стоимость обработки удерживается на уровне, при котором прогон каждые 6 часов не требует обсуждения бюджета.
Ключевые технические решения
- Кэширование системного промпта между вызовами. Профиль работ и критерии оценки одинаковы для всех лотов в прогоне. Кэширование этой части запроса убирает основную статью расхода при массовом скоринге.
- Младшая модель на массовом этапе. Первичный отсев не требует старшей модели: задача — отличить релевантное от нерелевантного, а не написать разбор. Выбор модели под задачу здесь важнее качества формулировок.
- Дедупликация в локальной базе. Публикация помечается обработанной по идентификатору. Без этого при прогоне каждые 6 часов один лот приходил бы четыре раза в сутки.
- Три источника — три адаптера, один скоринг. Формат данных у площадок разный, критерии оценки — одни. Разделение слоя сбора и слоя оценки позволяет добавить площадку, не трогая логику скоринга.
Частые вопросы
Почему LLM, а не фильтр по ключевым словам?
Ключевые слова дают и ложные срабатывания, и пропуски: проект по компьютерному зрению может называться «модернизацией системы видеонаблюдения» и не содержать ни одного ожидаемого термина. Модель оценивает техническое задание по смыслу.
Сколько стоит ежедневный прогон?
Стоимость удерживается кэшированием системного промпта и выбором младшей модели на массовом этапе. Это осознанное проектное решение: если скоринг дорогой, от ежедневного прогона отказываются первым делом.
Можно ли подключить другую площадку?
Да. Сбор и оценка разделены: новая площадка — это новый адаптер сбора, критерии скоринга остаются прежними.
Что было бы дальше
Естественное продолжение — обратная связь по результату: отмечать, какие лоты дошли до контракта, и подтягивать критерии оценки под фактические выигрыши. Дальше — прогноз вероятности победы по параметрам заказчика и истории закупок.
Если отбор заявок или закупок отнимает часы в день — обсудим за 30 минут.
Стек
- Python
- LLM API с кэшированием промпта
- SQLite
- Telegram Bot API
- launchd
- Google Sheets