Как я скрестил rusprofile и LLM, чтобы не тратить день на поиск подрядчиков

Как я скрестил rusprofile и LLM, чтобы не тратить день на поиск подрядчиков

Как я скрестил rusprofile и LLM, чтобы не тратить день на поиск подрядчиков

Раньше закупщик в крупной компании реально тратил 6–8 часов в неделю на тупой поиск контрагентов. Открываешь rusprofile, вбиваешь ОКВЭД, фильтруешь по региону, смотришь выручку, лицензии, копируешь в Excel. В итоге из 30 компаний реально подходящих — от силы пять.

Я забрал эту рутину на связку «парсер + LLM». Ниже расскажу, как собрал архитектуру, которую уже запускал в нескольких отделах закупок, и какие грабли собрал по дороге.

Что сервис должен уметь

На вход даём:

  • ОКВЭДы (основной + допы)
  • Регион или радиус от точки
  • Финансовые фильтры: выручка, прибыль, возраст компании
  • Юридические требования: лицензии, СРО, реестры
  • Плюс свободный текст задачи («монтаж вентиляции в пищевом производстве, опыт от трёх лет»)

На выходе — топ-10 компаний с короткой карточкой, обоснованием и красными флагами (банкротство, налоговые долги, массовый учредитель).

Архитектура

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

Слой 1. Сбор данных

Беру минимум два источника: rusprofile.ru и Контур.Фокус (через API). Плюс выгрузки ЕГРЮЛ, реестры СРО и недобросовестных поставщиков.

С rusprofile работаю через HTML-парсер с пулом прокси. Сайт быстро начинает капчу, если лезть чаще одного запроса в 2–3 секунды. Поэтому 20–30 резидентных прокси и жёсткий rate limit. Контур даёт стабильный JSON и историю изменений — его использую как основной источник.

Слой 2. Нормализация и обогащение

Привожу всё к одной схеме: ИНН как ключ, выручка в рублях, ОКВЭДы с пометкой основного. Дополнительно проверяю банкротства, лицензии и реестр недобросовестных поставщиков. Однодневки отсеиваю по формальным признакам.

Слой 3. Жёсткая фильтрация

LLM не кормлю тысячу компаний — дорого и бесполезно. До модели доходит максимум 50–100 кандидатов, отобранных обычным SQL-запросом по ОКВЭД, региону, выручке и отсутствию банкротств.

Слой 4. Ранжирование через LLM

Для российских задач беру GigaChat Pro — она нормально понимает бизнес-текст и юридические формулировки. На вход даю описание задачи, JSON-карточку компании и инструкцию оценить релевантность от 0 до 100 с обоснованием в пару предложений. Модель проходит по каждому кандидату отдельно, потом сортирую и беру топ-10.

Подводные камни

Их оказалось больше, чем я думал на старте.

ОКВЭД врёт

Компания может иметь основной код «оптовая торговля», а по факту монтировать оборудование. LLM смотрит не только на коды, но и на название, описание с сайта и тендерную историю. Это и есть главная ценность модели.

Дубликаты и группы компаний

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

Свежесть данных

Выручка за 2024 год появляется только во второй половине 2025-го. Банкротства и лицензии меняются ежедневно, поэтому кэш на месяц для финансов — ок, а для рисков — максимум сутки.

Галлюцинации

Модель может написать «есть лицензия МЧС», просто увидев слово «пожарная». Все утверждения в обосновании проверяю регуляркой и подсвечиваю то, чего нет в исходных данных.

Юридические риски

Rusprofile запрещает парсинг в соглашении. Для внутреннего инструмента риски терпимые, для продукта на продажу — лучше сразу идти через официальные API.

Что получает закупщик

Excel или PDF с таблицей: ИНН, компания, регион, выручка, балл, обоснование и флаги. Время на подготовку — 4–7 минут вместо целого дня. Человек всё равно принимает финальное решение, я это принципиально оставляю за ним.

Что в итоге

Подбор подрядчиков — отличный пример, где LLM не заменяет человека, а просто снимает с него рутину. Главный выигрыш не в скорости, а в том, что закупщик реально читает топ-10 вместо того, чтобы пролистывать сотню по диагонали.

Развёртывание под ключ для среднего отдела занимает 3–4 недели: неделя на источники, две на пилот и калибровку промптов, неделя на обучение. Дальше только раз в квартал обновляю промпты под новые категории закупок.