惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
O
OpenAI News
B
Blog
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
Martin Fowler
Martin Fowler
博客园 - 司徒正美
美团技术团队
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Vercel News
Vercel News
Recent Announcements
Recent Announcements
MyScale Blog
MyScale Blog
D
Docker
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Hackread – Cybersecurity News, Data Breaches, AI and More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
博客园 - 【当耐特】
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
V
V2EX
博客园 - Franky
宝玉的分享
宝玉的分享
C
CERT Recently Published Vulnerability Notes
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Simon Willison's Weblog
Simon Willison's Weblog
Recorded Future
Recorded Future
T
The Blog of Author Tim Ferriss
T
Tor Project blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
雷峰网
雷峰网
T
Threatpost
Cisco Talos Blog
Cisco Talos Blog
L
LINUX DO - 热门话题
SecWiki News
SecWiki News
I
InfoQ
T
The Exploit Database - CXSecurity.com
Hacker News - Newest:
Hacker News - Newest: "LLM"
P
Privacy & Cybersecurity Law Blog
T
Troy Hunt's Blog
Latest news
Latest news
MongoDB | Blog
MongoDB | Blog
T
Tenable Blog
博客园 - 叶小钗
Attack and Defense Labs
Attack and Defense Labs

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
LLM-судья для нейроразбора резюме на hh
Евгений · 2026-06-22 · via Все публикации подряд на Хабре

Средний

9 мин

1

Создать LLM-судью легко. Гораздо сложнее сделать так, чтобы его оценкам можно было доверять.

Мы убедились в этом на практике при разработке нейроразбора резюме для ИИ-помощника hh.ru. Быстро выяснилось, что хороший LLM-судья — это отдельный продукт со своими рубриками, датасетами, метриками качества и стоимостью эксплуатации.

Меня зовут Женя Орлов, я LLM Eval Lead. В этой статье расскажу, как мы проектировали систему оценки для нейроразбора резюме, почему отказались от наивных подходов и какие выводы сделали по ходу разработки.


Зачем нам понадобился LLM-судья

Для начала немного контекста. Нейроразбор резюме — это один из навыков ИИ-помощника hh.ru, который помогает работодателям искать и приглашать на собеседование подходящих кандидатов. Нейроразбор оценивает мэтч резюме с вакансией — и если он есть, ИИ-помощник с помощью другого навыка соединяет работодателя с соискателем.

Как оценить резюме?

Представим, что у нас есть вакансия и резюме кандидата. Как понять, подходит кандидат или нет?

Один из вариантов — обучить ML-модель на разметке HR-специалистов. Но с появлением LLM стало возможно двигаться иначе: автоматизировать оценку на основе бизнес-правил, которыми пользуются эксперты. Такой подход прозрачнее — можно прочитать рассуждение модели — и проще в настройке за счет промптинга. Но у него есть цена: правила нужно формализовывать очень точно, а галлюцинации и ошибки интерпретации приходится отдельно контролировать.

Мы пошли по пути оценки кандидата через соответствие критериям, важным для конкретной позиции. Часть критериев может извлекаться из вакансии автоматически, часть — задаваться работодателем вручную.

Сложность оценки кандидата по критериям

Возьмём простой критерий: «Уверенное знание Excel». ИИ-помощник должен оценить, соответствует ли ему кандидат: полностью, частично или не соответствует вообще.

На первый взгляд задача простая. Но в резюме и вакансиях один и тот же навык описывают по-разному: разными словами, с разной детализацией и в разном контексте. Из-за этого возникает неопределённость. Мы не раз сталкивались с ситуацией, когда даже эксперты не могли прийти к единому мнению по оценке резюме. А если неоднозначность возникает у людей, то у LLM она тем более неизбежна.

Что значит «уверенное знание Excel»? Для одного это ВПР, для другого — формулы, сводные таблицы и макросы, для третьего — базовые операции с ячейками. Рекрутеры тоже могут вкладывать в этот критерий разный смысл в зависимости от позиции. Я называю это разрывом контекста: один и тот же факт может означать разные вещи для разных людей.

Возникает вопрос: как проверять качество такой оценки со всеми её неопределенностями? Самый простой ответ — человеческая разметка. Однако она полезна, но плохо масштабируется. Профессий много, нюансов еще больше, а критериев оценки — практически бесконечно много. Чтобы репрезентативно проверить работу навыка, нужно много экспертной разметки. Причём это разовая проверка состояния «здесь и сейчас»: после доработок навык придется размечать снова, а для мониторинга в продакшене такой подход становится слишком дорогим. Поэтому нам понадобились LLM-судьи.

От наивного LLM-судьи к отдельному продукту

Наивный LLM-судья обычно выглядит так: берём одну LLM и просим её оценить ответ другой LLM, например по шкале от 1 до 10. Проблема в том, что без чётких правил модель сама решает, что считать хорошим ответом, а что плохим. Чем отличается 7 от 6? Какие ошибки критичны? Что важнее: полнота, точность или стиль? Если это не задано явно, мы получаем не оценку, а ещё одно мнение. Только теперь не человеческое, а мнение LLM.

Чтобы перейти от мнений к воспроизводимой оценке, нужны рубрики.

Внедряем рубрики

Проверяемая рубрика — это конкретный критерий качества результата. Но рубрики нельзя проектировать в отрыве от продукта. Сначала нужно понять, какую ценность даёт решение, зачем им пользуются и какие ошибки эту ценность разрушают. Только после этого можно формулировать правила оценки.

Последовательность такая:

  1. Сформулировать продуктовую ценность.

  2. Понять, какие ошибки для неё наиболее опасны.

  3. Перевести эти ошибки в проверяемые рубрики.

Например, для оценки кандидата критична галлюцинация фактов. Если ИИ-помощник выдумывает информацию о резюме, рекрутеру приходится перепроверять и исправлять работу модели. Это снижает ценность продукта. Поэтому «модель не выдумывает факты о кандидате» — валидная рубрика. Так мы переходим от абстрактного «ответ хороший» к конкретным проверкам качества.

Проектирование рубрик

Понять, какая рубрика нужна, недостаточно. Её ещё нужно сформулировать так, чтобы LLM могла стабильно по ней оценивать. Люди часто используют абстрактные понятия и опираются на профессиональный контекст, который кажется очевидным. Для модели такие формулировки могут быть субъективными, неполными или противоречивыми. Задача разработчика рубрики — закрыть этот разрыв контекста.

Рассмотрим пример.

Задача: написать кандидату сообщение с предложением откликнуться на вакансию.

Плохая рубрика:

Сообщение написано в профессиональном тоне и звучит вежливо.

Почему плохо: «профессиональный» и «вежливо» — оценочные слова без якоря. Разные судьи могут интерпретировать их по-разному.

Хорошая рубрика раскладывает качество на бинарные проверки:

  • есть приветствие с именем кандидата;

  • ассистент представился как ИИ-помощник;

  • обозначена цель обращения — предложить откликнуться;

  • указаны название вакансии и работодатель;

  • используется обращение на «вы», без сленга и эмодзи.

Это пример субъективизма в рубрике, но бывают и другие дефекты: неатомарность, пропущенные требования, дублирование проверок, неясные пороги. Чтобы находить такие проблемы, мы используем подход RIFT — таксономию типичных ошибок в критериях оценки. Она помогает проверять рубрики не через абстрактный вопрос «хорошая она или плохая», а через конкретные дефекты формулировки.

Обычно качественная рубрика не получается с первого раза. Мы пропускаем каждую версию через RIFT, находим слабые места и дорабатываем формулировки. Чем точнее рубрики, тем устойчивее работает LLM-судья и тем больше пользы приносит оценка.

Рубрики для нашего LLM-судьи

Для навыка «нейроразбор» мы пришли к десяти рубрикам. Часть из них описывает классические ошибки модели: precision — когда модель придумывает факты, и recall — когда пропускает важную информацию.

Другие рубрики появились из анализа реальных кейсов. Например, cutoff — ошибка на пороговых требованиях. В вакансии указано: «опыт работы от 3 лет», а ассистент видит кандидата с опытом 2,5 года и пишет: «в целом подходит». Но если бизнес задал конкретный порог, его нужно соблюдать. Такие пограничные случаи регулярно встречаются на практике, поэтому мы выделили их в отдельную рубрику.

Рубрики для нейроразбора

Рубрики для нейроразбора

Давайте разберем на примере, как работают все указанные рубрики вместе.

Критерий оценки кандидата: кандидат имеет не менее 3 лет опыта управления командой от 5 человек и опыт найма сотрудников, но не работал в кадровом агентстве.

Скрытый текст

Внимательный читатель может заметить: ваш критерий оценки кандидата содержит в себе аж целых три критерия! И будет прав. Реальность такова, что работодатели часто совмещают несколько критериев в одном, поэтому мы должны уметь обрабатывать и такие случаи.

Резюме:

  • С 2021 по 2024 год руководил командой из 7 разработчиков

  • Участвовал в проведении технических интервью и принятии решений по найму

  • С 2018 по 2020 год работал консультантом в кадровом агентстве N

Ответ оцениваемой модели

  • Кандидат соответствует критерию.

  • У него более 5 лет опыта управления людьми.

  • Он самостоятельно нанимал сотрудников и формировал команду.

  • Опыт работы в кадровом агентстве не обнаружен.

  • Кандидат обладает сильными лидерскими качествами и хорошо подходит для позиции.

  • Итоговый вердикт: не подходит

Разберем ответ модели по рубрикам:

Рубрика

Вердикт

Причина

Precision

в резюме нет информации, что кандидат самостоятельно формировал команду и обладает лидерскими качествами

Recall

все значимые факты для критерия были замечены

Accuracy

«более 5 лет опыта управления» не подтверждается резюме

Classification

участие в интервью классифицировано как полноценный опыт найма сотрудников

Cutoff

требование «от 3 лет» выполнено

Attribution

формирование команды приписано лично кандидату без подтверждения

Logic

для составного критерия (логическое условие И) выполнена корректная проверка всех входящих условий и сделан правильный вывод

Negation

модель утверждает отсутствие опыта в кадровом агентстве, хотя он явно указан в резюме

Consistency

модель утверждает, что кандидат подходит, а потом ставит вердикт «не подходит»

Relevance

«сильные лидерские качества» не относятся к проверяемому критерию

Таким образом, мы получили оценку ответа 3/10, что нельзя считать приемлемым результатом.

Четырёхэтапный судья

LLM-судья не обязан быть одним промптом. Часто его представляют как один запрос к модели, но на практике это может быть полноценный пайплайн.

У нас судья состоит из четырёх этапов:

  1. Первый — валидация входных данных. Если модель вернула ответ в неправильном формате, нет смысла оценивать его дальше: он уже нарушает требования.

  2. Второй — извлечение доказательств. На этом этапе судья работает с исходными данными и собирает факты, на которых потом будет строиться оценка.

  3. Третий — вердикты по рубрикам. Модель проходит по всем рубрикам и определяет, какие из них нарушены.

  4. Четвёртый — расчёт итогового скора. Этот этап мы вынесли в код: финальную оценку даёт не модель. Так надёжнее, потому что даже современные LLM ошибаются в вычислениях. Кроме того, в коде проще задавать веса и штрафы: одни ошибки критичнее других, а разные рубрики должны по-разному влиять на итоговый скор.

Отдельный продукт

В процессе разработки LLM-судей для «нейроразбора» мы пришли к выводу: судья — это отдельный GenAI-продукт со своим жизненным циклом и собственной эволюцией.

Начинается всё с небольшого калибровочного датасета. Мы стартовали примерно со ста явно корректных и ста явно некорректных примеров оценки кандидата по каждой рубрике. Этого достаточно, чтобы собрать первую версию судьи, откалибровать его на базовых случаях и начать использовать.

Дальше судья развивается вместе с продуктом. Появляются новые данные, edge-кейсы из продакшена и ошибки, которые раньше никто не видел. Всё это попадает в калибровочный датасет, делает его репрезентативнее, а судью — устойчивее.

Поэтому LLM-судью нельзя «сделать за один раз». По мере развития основного GenAI-навыка должен развиваться и судья, который его оценивает.

Сколько стоит LLM-судья

Я много раз слышал, что LLM-судьи дёшевы: один вызов модели стоит меньше ручной разметки. Это правда, но стоимость судьи не ограничивается одним вызовом LLM.

Чтобы судья приносил пользу, нужны калибровочный датасет с человеческой разметкой, качественные рубрики, инфраструктура, мониторинг прода, сбор edge-кейсов и постоянное развитие вместе с оцениваемым GenAI-продуктом.

Если учитывать всё это, картина меняется. Например, при использовании судьи для продакшен-мониторинга поверх существующего AI-сервиса расходы на токены могут вырасти в 2–3 раза. Это всё ещё дешевле, чем размечать весь прод вручную, но уже достаточно дорого, чтобы серьёзно думать о стоимости разработки, эксплуатации и сопровождения.

Как удешевить судью

LLM-судью можно сделать доступнее, если сознательно идти на компромиссы.

Во-первых, не обязательно проверять всё. Лучше сфокусироваться на нескольких рубриках, которые ловят ошибки с критичным влиянием на продукт.

Во-вторых, не всегда нужна самая сильная модель. Если рубрики хорошо сформулированы, атомарны и легко проверяются, то с задачей может справиться и небольшая модель — при условии хорошей калибровки.

В-третьих, не нужно оценивать весь прод. Часто достаточно статистически обоснованной выборки, чтобы контролировать качество без проверки каждого кейса.

В-четвёртых, не стоит пытаться поймать все edge-кейсы. Если ошибка системная, она проявится снова. Погоня за стопроцентным покрытием обычно только раздувает бюджет.

И главное: идеального LLM-судьи не существует. Соблазнительно добиться 100% совпадения с человеческой разметкой, но на неоднозначных задачах даже эксперты не всегда приходят к одному ответу. Поэтому важнее определить достаточный уровень качества. Для себя мы выбрали ориентир 80%+.

Такой подход помогает контролировать расходы и не терять в качестве оценки.

Наш результат: что сработало, а что нет

В разработке LLM-судьи у нас были и удачные решения, и неработающие гипотезы.

Что сработало хорошо:

  1. Продуктовый подход. Мы начали не с выбора модели и промптинга, а с понимания ценности продукта и ошибок, которые эту ценность разрушают.

  2. Переход от «оцени ответ» к рубрикам. После этого стало возможно собирать датасеты, калибровать судью и постепенно улучшать качество оценки.

  3. Разделение этапов внутри судьи. Отдельно: поиск подтверждений, проверка по рубрикам и расчёт финального скора.

  4. Итерации через ручную валидацию. Мы регулярно проверяли оценки судьи руками и дорабатывали его на найденных ошибках.

  5. Structure Guided Reasoning. Этот подход помог задать логику рассуждения и формат ответа судьи.

  6. LangGraph-пайплайн. Мы начинали с DeepEval, но в итоге пришли к LangGraph. При этом сам фреймворк вторичен: если вы умеете валидировать судью и понимаете, как его оценки коррелируют с человеческой разметкой, технологический стек становится менее важен.

Что не сработало:

  1. Наивные судьи в формате «оцени ответ». Без рубрик модель выдаёт не устойчивую оценку, а ещё одно мнение.

  2. Шкала от 1 до 10. На практике трудно объяснить, чем 6 отличается от 7, а модели часто выбирают средние значения как безопасный вариант. Мы отказались от таких шкал и перешли к бинарной оценке: критерий либо выполнен, либо нет.

  3. Ставка на более сильную модель без методологии. Модель посильнее не спасает, если непонятно, что именно и по каким правилам она должна оценивать.

  4. Попытка идеально синхронизироваться с экспертами. На неоднозначных задачах это невозможно и быстро превращается в сжигание времени и бюджета.

  5. Рубрики без проверки по таксономии ошибок. Если не проверять формулировки, в них легко остаются субъективность, неатомарность, пропущенные требования и другие дефекты.

  6. Слепая вера в экспертную разметку. Эксперты тоже ошибаются и не всегда согласны друг с другом, поэтому разметку нужно проверять и калибровать.

  7. Разработка без контроля стоимости. Судья может стать дорогим уже на этапе продакшен-мониторинга, поэтому стоимость нужно учитывать с самого начала.

Вывод — три опоры

Хороший LLM-судья держится на трёх опорах.

Первая — продуктовая. Нужно понимать, какую ценность создаёт продукт и какие ошибки эту ценность разрушают. Без этого невозможно сформулировать хорошие критерии оценки.

Вторая — инженерная. Это архитектура судьи, выбор моделей, фреймворков, промптинга, каскадов и других технических решений.

Третья — финансовая. О ней легко забыть. Можно повысить корреляцию судьи с человеческой оценкой, запуская несколько дорогих моделей на каждый кейс. Но если стоимость растёт быстрее качества, решение становится непрактичным. Поэтому хороший судья — это всегда баланс между качеством оценки и стоимостью эксплуатации.

А как вы проектируете LLM-судей? Делитесь в комментариях, буду рад обсудить!

Больше интересного про разработку ИИ-помощника для работодателей и GenAI-команду hh можно найти в телеграм-канале «Охэхэнные новости». Подписывайтесь!