Обновить
8K+
2
Иван Кузнецов@bm_kuznetsov

Директор по развитию бизнеса, БизнесМатика

Отправить сообщение

Шесть мест, где за два месяца в проде ломался LLM-конвейер над лентами закупок, и почти все вне промптов

Время на прочтение14 мин
Охват и читатели5.3K

У нас есть внутренняя система, которая ищет закупки под профиль сервисной ИТ-компании. Раз в час она читает ленты 14 закупочных площадок через платный агрегатор (сервис, который собирает извещения о закупках с сотен площадок), ещё две площадки читает напрямую и реже. Каждое извещение проходит детерминированный фильтр по названию, для новых записей, прошедших фильтр, система заводит карточку закупки, запись у себя в базе, и дешёвая LLM ставит по карточке вердикт. Этот шаг мы зовём предскорингом. Для тендеров-кандидатов система выкачивает документацию, далее средняя LLM собирает из файлов единый текст технического задания и затем оценивает закупку по 18 критериям с обоснованиями: 14 критериев считает LLM, 4 считает код. Решение «идём или нет» принимает человек на гейте - точке, дальше которой без него ничего не происходит. Тендерные заявки тоже подаёт человек.

В системе используется 3 разных LLM, ниже я зову их «дешёвой», «средней» и «старшей». Дешёвая - это Claude Haiku 4.5, средняя - Claude Sonnet 5, старшая - Claude Opus 5, она собирает коммерческое предложение и в этой статье почти не участвует. Всё, что LLM получают и отвечают, пишется в трассу, полный лог каждого обращения с токенами и длительностью, и большинство чисел ниже взяты из неё.

С первого живого прогона с начала июля по начало сентября наша тендерная система завела 4 452 карточки закупок, 3 890 из них отфильтровала ступень предскоринга (то есть жёсткие правила и дешёвая LLM вместе). В статусе тендера-кандидата побывали 580 карточек закупок, 61 из них жёсткие правила задним числом вернули в отсев, они включены в те же 3 890, а ещё 43 карточки закрыты вручную из других статусов или заведены вручную сразу тендерами-кандидатами, минуя предскоринг. Также 198 отклонил человек на гейте, 270 закрыл человек, как отменённые или просроченные, до решения по существу, 23 стали заявками, 18 ждут решения на 6 сентября, ещё 10 в прочих статусах, от четырёх нынешних кандидатов до одной проигранной. Еще из важного: 75% отказов человека по всей базе имеют код «не наш профиль» (это слабость дешёвой ступени, которую мы держим сознательно, к ней вернусь ниже). К началу сентября журнал разработки насчитывал почти 300 записей, большая их часть - про то, как тендерный конвейер ошибался в проде.

Читать дальше →

LLM‑судья вместо косинусной близости: точность подбора кандидатов с 44 до 66% и четыре провалившихся приёма

Время на прочтение11 мин
Охват и читатели5.8K

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

У любого такого поиска есть врождённая болезнь. Он находит похожие тексты, а рекрутёру нужны подходящие люди. Резюме сильного программиста совпадает с вакансией архитектора почти по всем ключевым словам, но это другая роль, и кандидат не подходит. Рекрутёр видит такое за несколько секунд. Поиск не видит вовсе. У такого резюме высокая косинусная близость к тексту вакансии, и поиск выводит его в верх поисковой выдачи.

Этим летом мы переделали ранжирование кандидатов. Теперь место кандидата в поисковой выдаче зависит от ответа на вопрос, который рекрутёр и так задаёт себе про каждого. «Показал бы я этого кандидата клиенту?» На этот вопрос отвечает языковая модель (LLM). Она встроена в платформу как судья, перечитывает найденные поиском резюме, и каждый вердикт обязана доказывать дословными цитатами из них.

Доля действительно подходящих кандидатов в первой десятке поисковой выдачи выросла с 43,7 до 66,3 процента. Замерено на эталонном наборе, который мы заморозили до начала работ. Как устроен замер, расскажу ниже.

Кроме прироста точности эта переделка дала четыре истории, где проверка на эталонном наборе перечеркнула то, что казалось очевидным. Тендер на роль судьи, который мы устроили между четырьмя LLM, выигрывала недорогая и быстрая из них, пока мы не проверили, настоящие ли цитаты из резюме она приводит. Экономия на глубине рассуждений прошла все проверки качества и провалилась на проверке цитат. Перебор 1330 вариантов взвешивания оценок судьи доказал, что веса не нужны. А RRF, стандартный приём слияния семантического и полнотекстового поиска, первую же проверку на эталонном наборе провалил, он ухудшил и полноту, и точность. Обо всём по порядку.

Читать дальше

Информация

В рейтинге
1 398-й
Зарегистрирован
Активность

Специализация

Менеджер продукта, Ученый по данным
Ведущий