3,583 papers
arXiv:2610.25676 76 19 окт. 2026 г. FREE

ConQual-Audit: проверка чек-листа критериев контррпримерами перед оценкой ответов LLM

КЛЮЧЕВАЯ СУТЬ
Чек-лист для оценки ответов LLM врёт в обе стороны. Строгий режет хорошие ответы за мелочи из эталона. Мягкий («ответ понятен и полезен») пропускает всё подряд. В одном тесте общий чек-лист принял все ответы, которые игнорировали предпочтения пользователя. Метод ConQual-Audit позволяет проверить, учитывает ли ваш ассистент явные «любит / избегает / нельзя», и не обмануться кривым чек-листом. Фишка: не спрашивай модель «нужен ли этот критерий?», а проси написать ответ, который его нарушает. Это контрпример: хороший ответ без критерия есть, значит критерий лишний. Плохой ответ, который проходит все критерии, есть, значит критерия не хватает. Лучший результат даёт короткий набор из 2–3 критериев.
Адаптировать под запрос
⚡

TL;DR

ConQual-Audit — это способ сначала построить короткий чек-лист требований к ответу, затем проверить сам чек-лист контрпримерами и только потом им оценивать ответы. Чек-лист строится из двух источников: профиля пользователя («что любит, чего избегает») и эталонного ответа на задачу. Каждое требование формулируется как утверждение: «Ответ не рекомендует протеиновые добавки». Потом модель пытается написать ответ, который нарушает критерий, но всё равно хорош. Если получилось, критерий лишний. Затем пытается написать ответ, который выполняет все критерии, но плох. Если получилось, критерия не хватает.

Главная боль оценки персонализации — чек-лист врёт в обе стороны. Он либо слишком строгий: отклоняет хорошие ответы, потому что требует мелочи из эталона. Либо слишком мягкий: пропускает плохие ответы, потому что состоит из общих пунктов вроде «ответ понятен и полезен». Когда критериев 5–8, они обычно дублируются, придираются к деталям и при этом пропускают главное. В одном из тестов общий чек-лист принял вообще все ответы, которые игнорировали предпочтения пользователя.

Метод состоит из трёх шагов: (1) вытащить критерии из профиля и эталона, (2) вычистить лишние и добавить недостающие через контрпримеры, (3) проверять ответ по каждому критерию: следует, противоречит или не относится. Лучшие результаты получились на коротких наборах — 2–3 критерия.

🔬

Схема метода

ШАГ 1. Построение: профиль + эталон → список утверждений
        («Ответ рекомендует…» / «Ответ НЕ рекомендует…»)
ШАГ 2а. Дубли: объединить одинаковые критерии
ШАГ 2б. Лишние: для каждого критерия написать хороший ответ,
        который его нарушает, но соблюдает остальные.
        Получилось → критерий удалить.
ШАГ 2в. Недостающие: написать плохой ответ,
        который соблюдает ВСЕ критерии.
        Получилось → добавить критерий, который его отсекает
        (максимум 3 новых).
ШАГ 3. Проверка ответа: каждый критерий →
        ENTAILMENT (следует) / CONTRADICTION (противоречит) / NEUTRAL
        Доля выполненных ≥ 0,5 → ответ принят

В чате шаги идут отдельными сообщениями в одном диалоге. Шаг 2 в оригинале сделан с несколькими ролями модели: генератор, проверяющий и судья.

🚀

Пример применения

Сильная зона метода: у вас есть персональный ассистент или кастомный GPT, и надо понять, учитывает ли он предпочтения конкретного человека. Субъективные вкусы вроде «красиво» метод проверяет плохо. Явные «любит / избегает / нельзя» он проверяет хорошо.

Задача: вы делаете кастомный GPT для нутрициолога. Клиентка Марина из Казани закупается во «ВкусВилле» и «Самокате». Она не ест красное мясо, у неё аллергия на арахис, бюджет — до 6 000 ₽ в неделю. Нужно построить чек-лист и проверить, как ассистент отвечает на запрос «Составь меню на неделю».

Промпт (шаг 1 — построение):

Профиль клиентки: не ест красное мясо; аллергия на арахис; бюджет до 6 000 ₽ в неделю; покупает во «ВкусВилле» и «Самокате»; хочет больше белка.

Запрос: «Составь меню на неделю».

Эталонный ответ: меню на 7 дней, 3 приёма пищи, с граммовками и ориентировочной стоимостью.

Сделай список критериев для оценки ответа. Правила:
— каждый критерий — одно утверждение об ответе;
— обязательное: «Ответ рекомендует …»;
— запрещённое: «Ответ не рекомендует …»;
— берём только то, что относится к этому запросу;
— одно утверждение = одно требование, без дублей.
Источники: (а) предпочтения из профиля, (б) атомарные требования из эталона.

Промпт (шаг 2б — поиск лишних):

Вот критерии:
1. {критерий_1}
2. {критерий_2}
...
Для критерия №1: напиши ответ на запрос, который НАРУШАЕТ только критерий №1 и соблюдает все остальные. Ответ должен быть при этом хорошим для клиентки. Если такой ответ невозможно написать — так и скажи. Попыток — две. Затем оцени: подходит ли этот ответ клиентке? Если да — критерий лишний.
Повтори для каждого критерия.

Промпт (шаг 2в — поиск недостающих):

Теперь напиши ответ, который соблюдает ВСЕ оставшиеся критерии, но при этом НЕ подходит клиентке (нарушает её предпочтения или требования задачи). Если получилось — предложи не больше трёх новых критериев, которые отсекут такой ответ. Если не получилось — оставь список как есть.

Промпт (шаг 3 — проверка ответа ассистента):

Ответ ассистента: {ответ}
Для каждого критерия определи: ENTAILMENT (ответ это гарантирует), CONTRADICTION (ответ противоречит) или NEUTRAL (ответ об этом не говорит). Для ENTAILMENT процитируй предложения, которые это подтверждают. Затем посчитай долю критериев с ENTAILMENT. Ответ принят, если доля ≥ 0,5.

Результат: сначала модель выдаст 4–6 критериев. После шага 2б часть пропадёт, например дубли «не красное мясо» и «рекомендует курицу или рыбу». После шага 2в может появиться недостающий критерий вроде «Ответ не включает продукты, содержащие арахис». На шаге 3 вы получите таблицу «критерий → метка → цитата» и итоговую долю.

🧠

Почему это работает

Слабость. Когда модель составляет критерии «с нуля», она пишет либо слишком общее («ответ полезен»), которое проходит любой текст, либо слишком конкретное (копирует детали из эталона). Хороший ответ формулируется иначе и получает отказ. Оценщик с таким чеком-листом ошибается в обе стороны, и по формуле добавление лишнего критерия снижает оценку валидного ответа, а пропуск нужного завышает оценку плохого.

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

Что делает метод: превращает размытый вопрос «хороший ли чек-лист?» в два проверяемых теста. Лишний критерий определяется по хорошему ответу, который его нарушает. Недостающий определяется по плохому ответу, который проходит все критерии. Формулировки в виде утверждений позволяют потом проверять ответ как логический вывод: следует / противоречит / не относится.

Рычаги управления: - Число попыток (в статье 2) → больше попыток ловят больше лишних критериев, но растут расходы. - Лимит новых критериев (в статье 3) → не даёт чек-листу раздуться снова. - Порог принятия (0,5) → поднимите, если нужна строгая проверка; опустите, если важнее не потерять хорошие ответы. - Источники → если эталона нет, строите только из профиля. Если профиля нет, только из эталона. - Метка NEUTRAL → полезна: она отделяет «не сказал» от «сказал наоборот».

📋

Шаблон промпта

Ты — аудитор критериев оценки. Работаем в 3 этапа.

ДАНО
Запрос пользователя: {запрос}
Профиль / история предпочтений: {профиль}
Эталон (пример правильного ответа или требования задачи): {эталон}

ЭТАП 1. ПОСТРОЕНИЕ
Составь список критериев. Каждый — одно утверждение об ответе:
— обязательное: «Ответ рекомендует / содержит …»
— запрещённое: «Ответ не рекомендует / не содержит …»
Источники: (а) предпочтения и ограничения из профиля, относящиеся к запросу; (б) атомарные требования из эталона.

ЭТАП 2. АУДИТ (контрпримеры, макс. {число_попыток} попытки на критерий)
2а. Дубли: если два критерия значат одно и то же — оставь первый.
2б. Лишние: для каждого критерия напиши ответ, который нарушает ТОЛЬКО его и соблюдает остальные. Оцени: подходит ли такой ответ пользователю и задаче? Да → критерий удалить. Нет или ответ написать нельзя → оставить.
2в. Недостающие: напиши ответ, который соблюдает ВСЕ оставшиеся критерии, но не подходит пользователю или не решает задачу (отдельно по профилю и по эталону). Получилось → добавь не больше {лимит_новых} критериев, которые его отсекают.
Выведи итоговый список критериев и что удалено / добавлено.

ЭТАП 3. ПРОВЕРКА
Ответ для проверки: {ответ}
Для каждого критерия: ENTAILMENT / CONTRADICTION / NEUTRAL + цитата из ответа.
Итог: доля ENTAILMENT = ... Принят, если ≥ {порог}.

Что подставлять: {запрос} — задача пользователю. {профиль} — привычки, запреты, стиль, ограничения. {эталон} — образец или список требований. {число_попыток} — 2. {лимит_новых} — 3. {порог} — 0,5.

🚀 Быстрый старт — вставь в чат:

Вот шаблон ConQual-Audit. Адаптируй под мою задачу: хочу проверять ответы моего ассистента на соблюдение предпочтений пользователя.
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит про запрос, профиль пользователя и эталон ответа. Без них нельзя построить критерии из двух источников и придумать содержательные контрпримеры. Она возьмёт паттерн из шаблона и адаптирует под вашу задачу.

⚠️

Ограничения

⚠️ Нужны источник предпочтений и эталон: метод строит критерии из профиля и эталона. Если у вас нет ни того, ни другого, критерии придётся придумывать самому, и метод теряет опору.

⚠️ Нестабильность судьи: в статье модель-проверяющий повторяла свои решения на тех же критериях лишь примерно в трёх случаях из четырёх. Прогоните проверку дважды и сравните результаты. Не доверяйте одному прогону.

⚠️ Дорого по токенам: аудит съедает основную часть расходов. Он единоразовый для каждого запроса, но на одиночный вопрос в чате может не окупиться. Метод полезен, когда один чек-лист проверяет много ответов.

⚠️ Проверяет соблюдение требований, а не качество стиля: тон, красота, оригинальность в такие утверждения не превращаются.

⚠️ Аудит чужих чек-листов даёт слабый эффект: при подключении к другим оценщикам ошибки снизились лишь немного (примерно с 0,50 до 0,49 и с 0,51 до 0,46). Основной выигрыш получен в собственном конвейере метода.

⚠️ Малые модели: всё проверяли на небольшой модели Qwen3-8B. На сильных моделях результат, вероятно, лучше, но это не проверено.

🔍

Как исследовали

Исследователи взяли два набора: LaMP (ответы под конкретного пользователя, 100 пользователей, по 10 перефразированных верных, 10 отрицающих и 10 неверных ответов на каждого) и PrefEval (200 ответов, где одни сгенерированы с учётом предпочтения, а другие без). Смысл LaMP — проверить, отличает ли оценщик смысл от формы. Перефраз верного ответа должен проходить, ответ с отрицанием — нет. Против метода выставили девять оценщиков трёх семейств: по совпадению слов (BLEU, ROUGE), по эмбеддингам (BERTScore), «модель-судья» (GEMBA, PerSE, FActScore) и методы с чек-листом (ExPerT, PREF). Все модули ConQual работали на одной небольшой модели, чтобы выигрыш объяснялся методом, а не размером модели.

Результаты наглядно показали, почему чек-лист нужно проверять. BLEU отвергал 65% верных ответов, а BERTScore принимал все ответы с отрицанием. ExPerT, привязанный к словам эталона, отклонял 92–97% верных ответов. PREF с общими критериями принял все неправильные ответы на PrefEval. ConQual-Audit снизил долю ошибок до 0,21 на обоих наборах, то есть на 16% и 28% относительно сильнейшего конкурента. При этом ему хватало около 2–3 критериев против 5–8 у соперников. Разрыв между оценками хороших и плохих ответов стал почти вдвое больше.

Любопытно, что меньше критериев = точнее. Практический вывод: каждый лишний пункт чек-листа — это дополнительный шанс отклонить хороший ответ. Аудит чужих чек-листов удалял 19–29% критериев, но выигрыш был небольшой: проверяющая модель сама шумела. Расходы: около 12,6 тыс. токенов на ответ, и более 80% из них уходит на единоразовое построение и аудит критериев. Сама проверка стоит около 2,5 тыс. токенов на ответ.

💡

Адаптации и экстраполяции

🔧 Техника: убрать эталон → строить критерии только из профиля. Когда эталона нет, оставьте в шаблоне только источник (а). Эталонная часть этапа 2в тогда пропускается. Эффект: метод работает для персонализации «с нуля», но недостающие критерии будут искаться только по предпочтениям.

🔧 Техника: добавить print результатов 2б. Попросите вывести пару «критерий → контрпример → вердикт». Вы увидите, почему критерий удалён, и сможете вернуть его вручную.

Экстраполяция (не из статьи): аудит правил в инструкции агента. Правила в CLAUDE.md или системном промпте — те же критерии. Принцип контрпримеров можно перенести на них:

Вот правила из моей инструкции агенту:
{список_правил}

1. Для каждого правила опиши ситуацию, где агент его нарушил бы, а результат остался хорошим. Если такая ситуация есть — правило лишнее или слишком жёсткое.
2. Опиши ситуацию, где агент соблюл все правила, но результат плохой. Предложи не больше трёх правил, которые это закрывают.
Итог: сокращённый список правил.

В статье это не проверялось: в ней аудитируются критерии оценки, а не инструкции агенту. Но логика та же: лишнее правило ограничивает хорошие ответы, а недостающее пропускает плохие.

🔗

Ресурсы

  • Работа: Neither Over- nor Under-Constrained: Evaluating LLM Personalization under a Constraint Qualification Audit (ConQual-Audit)
  • Авторы: Xuran Li, Guanqin Zhang, Imran Razzak, Hakim Hacid, Eleanna Kafeza, Hao Xue, Flora D. Salim
  • Организации: University of New South Wales; Mohamed bin Zayed University of Artificial Intelligence; Technology Innovation Institute; Hong Kong University of Science and Technology
  • Бенчмарки: PrefEval (Zhao et al., 2025), LaMP (Salemi et al., 2024)
  • Сравнивали с: ExPerT (Salemi et al., 2025), PREF (Fu et al., 2025), GEMBA, PerSE, FActScore, BERTScore, MoverScore
  • Код и промпты: авторы заявляют о публикации в анонимном репозитории

📋 Дайджест исследования

Ключевая суть

Чек-лист для оценки ответов LLM врёт в обе стороны. Строгий режет хорошие ответы за мелочи из эталона. Мягкий («ответ понятен и полезен») пропускает всё подряд. В одном тесте общий чек-лист принял все ответы, которые игнорировали предпочтения пользователя. Метод ConQual-Audit позволяет проверить, учитывает ли ваш ассистент явные «любит / избегает / нельзя», и не обмануться кривым чек-листом. Фишка: не спрашивай модель «нужен ли этот критерий?», а проси написать ответ, который его нарушает. Это контрпример: хороший ответ без критерия есть, значит критерий лишний. Плохой ответ, который проходит все критерии, есть, значит критерия не хватает. Лучший результат даёт короткий набор из 2–3 критериев.

Принцип работы

Три шага, как конвейер с отделом технического контроля. 1. Построение. Профиль пользователя и эталонный ответ превращаются в утверждения: «Ответ рекомендует…» или «Ответ НЕ рекомендует…». 2. Аудит. Сначала склей дубли. Потом для каждого критерия пиши хороший ответ, который нарушает только его. Получилось — критерий долой. Затем пиши плохой ответ, который проходит все оставшиеся. Получилось — добавь критерий (не больше 3 новых). 3. Проверка. Для каждого критерия метка: следует, противоречит или не относится. Доля «следует» от 0,5 и выше — ответ принят. Аудит чек-листа делается до оценки ответов, а не после. Это как проверить линейку, прежде чем мерить ею доску.

Почему работает

Модель плохо отвечает на абстрактный вопрос «хороший ли у меня чек-лист?». Зато она отлично пишет конкретные тексты по условию. «Напиши ответ, который нарушает только пункт 3» — обычная задача на генерацию. Контрпример работает как доказательство: если хороший ответ существует без критерия, спорить не о чем. Цена ошибки в чек-листе высокая. Лишний критерий снижает оценку нормального ответа. Пропущенный критерий завышает оценку плохого. Жесть: общий чек-лист принял вообще все ответы, которые не учли предпочтения. Метка «не относится» помогает отделить «ответ промолчал» от «ответ сказал наоборот».

Когда применять

Кастомные GPT и персональные ассистенты → проверка, учитывают ли они конкретные запреты и вкусы человека (аллергия, бюджет, любимые магазины), особенно когда один чек-лист проверяет много ответов. НЕ подходит для субъективного: тон, красота, оригинальность в утверждения не превращаются. Для одиночного вопроса в чате тоже не окупится: аудит съедает основную часть токенов.

Мини-рецепт

1. Собери вводные: запрос, профиль пользователя (что любит, чего избегает) и эталон ответа. Нет эталона — строй только из профиля. Нет профиля — только из эталона.
2. Построй черновик: попроси список утверждений. Одно утверждение — одно требование. Только то, что относится к запросу.
3. Убери дубли: два пункта значат одно и то же — оставь первый.
4. Найди лишние: для каждого критерия просит написать хороший ответ, который нарушает только его. Две попытки. Подходит пользователю — критерий вон.
5. Найди недостающие: пусть модель напишет плохой ответ, который проходит все оставшиеся пункты. Получилось — добавь до трёх критериев, которые его отсекут.
6. Проверь ответ: по каждому критерию метка плюс цитата. Считай долю «следует». Порог 0,5. Нужна строгость — поднимай.
7. Прогони дважды: судья-модель в статье повторяла своё решение лишь в трёх случаях из четырёх. Один прогон не считается.

Примеры

[ПЛОХО] : Оцени, хорошо ли ассистент учёл предпочтения клиентки в меню на неделю. Критерии: ответ полезен, понятен и подходит клиентке
[ХОРОШО] : Профиль: Марина не ест красное мясо, аллергия на арахис, бюджет до 6 000 ₽ в неделю, покупает во «ВкусВилле» и «Самокате». Запрос: «Составь меню на неделю». Составь критерии вида «Ответ рекомендует…» или «Ответ не рекомендует…». Потом для каждого критерия напиши хороший для Марины ответ, который нарушает только его. Получилось — критерий лишний. Затем напиши плохой для Марины ответ, который проходит все критерии. Получилось — предложи до трёх новых. В конце проверь ответ ассистента: по каждому критерию СЛЕДУЕТ, ПРОТИВОРЕЧИТ или НЕ ОТНОСИТСЯ, плюс цитата. Посчитай долю СЛЕДУЕТ Что получится: в первом списке будут дубли вроде «не красное мясо» и «рекомендует курицу или рыбу». Аудит их уберёт. А недостающий пункт «Ответ не включает продукты с арахисом» появится после плохого ответа, где меню красивое, но с арахисовой пастой.
Источник: Neither Over- nor Under-Constrained: Evaluating LLM Personalization under a Constraint Qualification Audit
ArXiv ID: 2610.25676 | Сгенерировано: 2026-10-20 16:10

Проблемы LLM

ПроблемаСутьКак обойти
Чек-лист критериев, который составила модель, ошибается в обе стороныПросишь модель составить критерии для оценки ответов. Она пишет либо слишком общее: «ответ полезен и понятен». Такому условию соответствует любой текст, даже плохой. Либо слишком частное: копирует мелочи из эталонного ответа. Тогда хорошие ответы, сформулированные иначе, получают отказ. Длинный список из 5–8 пунктов обычно дублируется, придирается к деталям и пропускает главное. Оценка получается ненадёжной.Не доверяй первому списку. Проверь его контрпримерами (см. метод ниже). Держи список коротким: 2–4 критерия. Формулируй каждый как одно утверждение: «Ответ не содержит X».

Методы

МетодСуть
Аудит чек-листа контрпримерами — убирает лишние критерии и находит недостающиеШаг 1. Составь критерии как утверждения. Обязательное: «Ответ рекомендует…». Запрещённое: «Ответ не рекомендует…». Бери их из двух источников: из профиля или требований пользователя и из эталонного ответа. Шаг 2. Дубли. Объедини критерии с одним смыслом. Шаг 3. Лишние. Для каждого критерия попроси: «Напиши хороший ответ, который нарушает ТОЛЬКО этот критерий и соблюдает остальные». Если получился хороший ответ, критерий лишний, удали его. Если написать нельзя, критерий нужен. Дай две попытки на критерий. Шаг 4. Недостающие. Попроси: «Напиши плохой ответ, который соблюдает ВСЕ критерии». Если получилось, добавь критерии, которые его отсекут. Не больше 3 новых, иначе список снова раздуется. Шаг 5. Проверка ответа. По каждому критерию ставь метку: «следует», «противоречит» или «не относится». К метке «следует» требуй цитату из ответа. Считай долю выполненных критериев. Порог 0,5 — отправная точка. Для строгой проверки подними его. Если боишься потерять хорошие ответы, опусти. Почему работает: вопрос «хорош ли чек-лист?» размытый. Контрпример превращает его в проверяемый тест. Хороший ответ без критерия доказывает, что критерий лишний. Плохой ответ, прошедший все критерии, доказывает, что чего-то не хватает. Метка «не относится» отделяет «ответ не упомянул» от «ответ сказал наоборот». Когда да: один чек-лист проверяет много ответов. Требования явные: любит, избегает, нельзя, обязательно. Источники есть: профиль и эталон. Когда нет: одиночный вопрос в чате, аудит дороже пользы. Оценка вкуса, тона, красоты, оригинальности. Нет ни профиля, ни эталона, тогда критерии придётся придумывать самому. Осторожно: проверка моделью нестабильна. Прогони её дважды и сравни. Не верь одному прогону.
📖 Простыми словами

Neither Over- nor Under-Constrained: EvaluatingLLMPersonalization under a Constraint Qualification Audit

arXiv: 2610.25676

Нейросети отвратительно проверяют чужую персонализацию. Когда просишь модель составить чек-лист для проверки ответа, она скатывается в крайности: пишет либо размытую воду вроде «ответ полезен», либо тупо копирует эталон до запятой. В итоге оценщик лажает в обе стороны: бракует крутые альтернативные ответы и пропускает мусор. Метод ConQual-Audit решает проблему в корне — он сначала аудирует сам чек-лист, а уже потом подпускает его к ответам.

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

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

Разрабы гоняли метод на личных ассистентах, но подход жизненно важен для кастомных GPT, ботов поддержки и финтеха. Метод бессилен против субъективщины вроде «напиши душевно», зато идеально щёлкает жёсткие ограничения пользователя: аллергии, веганство, стоп-слова и лимиты бюджета. Везде, где цена ошибки — мгновенная потеря клиента, эта схема окупается сразу.

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

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с