Инженерная компания, Казань
Агент отбора тендеров: читает ленту закупок и приносит только то, что подходит компании
Компания автоматизирует инженерные системы и участвует в закупках. Фильтры в тендерной площадке настроены, но лента по ним даёт сотни позиций, и разбирать их приходится собственнику лично. Мы собрали контур, который делает первый проход за него: обходит источник по расписанию, отсеивает заведомо чужое обычным кодом, скачивает документацию, готовит первичную оценку и присылает карточку в Telegram. Решение остаётся за человеком, и именно его решения становятся обучающим материалом. Отдельное требование: расход на модель предсказуем и остаётся на стороне компании, поэтому агент работает на её машине и её подписке.
- Лента закупок по фильтрам компании даёт сотни позиций, читать их руками некому
- Понимание, наш тендер или нет, живёт в голове собственника и нигде не записано
- Документация закупки лежит архивами, без неё оценка превращается в гадание
- Расход на модель должен быть предсказуемым, а не открытым счётчиком
- Конвейер обычным кодом: опрос источника, дедупликация, отсев по регионам, суммам, срокам и ОКПД до обращения к модели
- Первичная оценка сутью в один абзац и карточка в Telegram владельцу
- Три кнопки под карточкой: подходит, шум, разобрать глубоко. Отметки копятся и превращаются в правила отбора
- Углублённый разбор документации по кнопке, с журналом операций и месячной квотой
- Портрет компании и правила правятся текстом, без похода к разработчику
- Агент развёрнут на машине компании, обновления доставляются автоматически и переживают перезагрузку
Задача
Компания участвует в закупках. Фильтры в тендерной площадке настроены давно, но лента по ним даёт сотни позиций, и разбирать их приходится собственнику лично: критерии отбора живут у него в голове и нигде не записаны.
Заявка звучала так: пусть первый проход делает агент, а решение остаётся за мной.
Почему конвейер, а не «агент, который всё сам»
Опрос источника, дедупликация, отсев по регионам и суммам, скачивание документов и журнал операций - это обычный код. Гонять расписание через агентский цикл значит платить моделью за работу, которую делает условный оператор, и терять предсказуемость расхода. Поэтому механику делает код, а модель включается там, где нужно понимание текста.
Обход источника раз в полчаса. Дешёвый фильтр работает до модели: явный мусор отсекается бесплатно, до платной оценки доходит только спорное. Каждое решение фильтра объясняется словами и сохраняется, поэтому всегда видно, почему закупка не дошла до человека.
Разговор, который снял половину конструкции
Первая версия отсеивала сама: стоп-слова, порог оценки, минимальная сумма. На созвоне собственник разложил по шагам, как он хочет на самом деле: отбор делает его фильтр в площадке, всё, что в него попало, обязано пройти обработку, дальше поверхностная первичная аналитика, карточка в мессенджере и решение кнопкой.
Пришлось обнулить стоп-слова, снять порог оценки и ограничить первичный разбор тремя документами. Плюс поставить предохранитель на прогон, чтобы не залить чат сотней карточек разом. Это тот случай, когда правильная работа - убрать своё, а не добавить нового.
Как он учится
Под каждой карточкой три кнопки: подходит, шум, разобрать глубоко. Отметки копятся в базе. Регулярное «мимо» на однотипных закупках превращается в стоп-слово или в границу по сумме. Портрет компании и правила лежат текстовыми файлами и читаются на каждом прогоне, поэтому владелец правит их сам, без похода к разработчику.
Углублённый разбор документации - платная операция, поэтому он вызывается кнопкой и попадает в журнал. Расход считается операциями, а не токенами, и на месяц задаётся квота: при её исчерпании глубокие разборы останавливаются, а мониторинг и первичные оценки продолжают работать.
Где он живёт
Агент развёрнут на машине компании и работает на её подписке: расход остаётся у заказчика, данные не уезжают к подрядчику. Автозапуск переживает перезагрузку, сон при питании от сети отключён, иначе и агент, и канал связи отваливались бы каждую ночь.
Обновления доставляются сами. Сторож на нашей стороне ловит машину, когда она появляется в сети, докатывает код одним архивом с проверкой контрольной суммы, потому что половины обновления на машине быть не должно, и забирает обратно накопленную статистику решений.
Осторожность вместо бодрости
Жёсткое правило: нет данных - агент говорит об этом прямо. Если документы закупки не читаются, суть помечается как предположение, а не выдаётся за факт. Регистрация на электронных площадках агенту закрыта их же политикой безопасности, обойти это нельзя, и он не делает вид, что смог.
На запуске обязательна отсечка: всё, что уже накопилось в фильтре, помечается виденным. Без неё человеку прилетела бы история за месяцы вместо новых закупок, 250 карточек в первую минуту.
Что дальше
Контур с самого начала сделан многокомпанийным: у каждой компании своя папка с конфигом, портретом, словарём и базой, данные не пересекаются. Новый клиент заводится копированием папки, правок в коде не требуется.
Тендеры здесь только первая задача. Оболочка ставилась с прицелом на рост: следующими в очереди новостной радар по отрасли и разбор входящих коммерческих предложений.
Разберём вашу задачу за 30 минут
Созвон на полчаса по видео или телефону. Смотрим, как всё устроено сейчас, и говорим, что с этим делать. Бесплатно и ни к чему не обязывает.
