3,583 papers
arXiv:2608.25869 80 26 авг. 2026 г. FREE

Anchoring Bias у LLM-судей: упоминание прошлой оценки портит новую проверку

КЛЮЧЕВАЯ СУТЬ
Обнаружено: LLM-судье всё равно, каким был прошлый балл — 1.0 или 3.9. Важно только то, что он был упомянут вообще. Это значит, что нельзя доверять LLM-оценке при повторных проверках — 7 из 8 моделей систематически занижают новый балл, если видят историю старой оценки, даже когда текст стал лучше. Само упоминание прошлого балла переключает модель в режим «будь строже» — у GPT-4.1 вероятность выбрать высшую оценку падает с 93% до 0%, как только в промпте появляется поле «предыдущая оценка».
Адаптировать под запрос

TL;DR

Если попросить LLM оценить пересмотренный текст и при этом упомянуть, какой балл получила предыдущая версия — новая оценка тянется к этому старому числу, даже если оно случайное и никак не связано с реальным качеством текста. Модель не судит объективно — она цепляется за подсказку из контекста, как за якорь.

Учёные показали это жёстко: они специально подсовывали моделям случайный низкий балл как "предыдущую оценку" (текст при этом не менялся, был одним и тем же). Результат — 7 из 8 моделей систематически снижали новую оценку, хотя формально их об этом никто не просил. GPT-4.1, например, оценивал один и тот же текст на 5.0 из 5 без контекста и на 4.36 — когда видел, что "предыдущая попытка получила низкий балл". На уровне решений "принять/отклонить" это выливалось в падение доли принятых текстов на 22 процентных пункта у одной из моделей. И это не только про цифры: на реальных бизнес-данных с человеческой разметкой такое смещение блокировало исправление ошибок в 48% случаев и переворачивало правильный вердикт в неправильный в 10% случаев.

Хуже того — стандартные лечения не помогают. Просьба "подумай по шагам" (Chain-of-Thought) не убирает эффект. Прямое предупреждение "игнорируй предыдущую оценку" тоже не спасает числовые баллы — оно немного помогает только при категориальных решениях (типа "верно/неверно"). Единственный надёжный способ — не давать модели контекст о прошлой оценке, если вам нужна независимая проверка.

📌

Схема того, что происходит

ПЛОХО: Промпт содержит "Это попытка №3. Предыдущий балл: 2.5"
  → LLM видит подсказку → тянет новую оценку к старому числу
  → даже если текст стал заметно лучше

ХОРОШО: Промпт не содержит истории оценок
  → LLM оценивает текст "с нуля"
  → оценка отражает реальное текущее качество

Важная деталь: эффект пороговый, не пропорциональный. Не имеет значения, был ли "прошлый балл" 1.0 или 3.9 — главное, что метаданные о прошлой оценке присутствуют. Само их наличие резко сдвигает вероятности в сторону более низкого балла, а конкретное значение анкера почти не влияет на размер сдвига.


🚀

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

Задача: Копирайтер переписывает рекламный текст для Reels/Shorts и просит ChatGPT оценить качество по шкале 1–10 после правок.

Промпт, который создаёт проблему:

Вот новая версия рекламного текста. Это третья попытка.
Предыдущая версия получила оценку 4 из 10.

Текст: {текст}

Оцени по критериям: цепляет ли заголовок, есть ли призыв к действию, 
понятен ли оффер. Дай балл от 1 до 10.

Промпт без искажения:

Оцени рекламный текст по критериям: цепляет ли заголовок, есть ли призыв 
к действию, понятен ли оффер. Дай балл от 1 до 10.

Текст: {текст}

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


🧠

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

LLM обучались на текстах, где люди пишут именно так — воспринимают прошлую оценку как значимый сигнал и недостаточно от неё отклоняются, даже когда она нерелевантна. Это классический человеческий anchoring-эффект (эффект якоря), который модель воспроизводит функционально, не "понимая" по сути, что якорь случайный.

Токен-анализ на GPT-4.1 показал механику точнее: без метаданных о прошлой оценке модель с вероятностью 93% выбирала цифру "5", а с вероятностью 7% — "4". Как только в промпте появлялось поле "прошлый балл", вероятности переворачивались: 100% на "4" и 0% на "5". Это не тонкая подстройка под конкретное число — это переключение режима: "ага, это повторная попытка, значит, надо быть настороже".

Рычаги управления: - Убрать из промпта любые поля вида "попытка №", "предыдущий балл", "это ревизия" → получите независимую оценку. - Если нужно отслеживать прогресс между версиями — просите модель сравнивать версии напрямую ("что изменилось между версией 1 и версией 2"), а не давать новую оценку с оглядкой на старую. - Не надейтесь на "подумай шаг за шагом" как на лечение — эффект живёт не в логике рассуждений, а в самом восприятии контекста. - Явное "не учитывай предыдущую оценку" — не бесполезно, но работает только для решений вида "правильно/неправильно", не для числовых баллов.


📋

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

Универсальный принцип — не техника с шагами, а правило гигиены промпта:

Оцени {объект оценки} по критериям: {критерии}.
Дай оценку от {мин} до {макс} и короткое объяснение.

{объект оценки}: {контент}

Что убрать из промпта, если хотите непредвзятую оценку: - Номер попытки / версии - Упоминание, что это "переделка" или "revision" - Любой прошлый балл, даже как "контекст для информации"

Если нужно отслеживать прогресс без искажения:

Вот две версии {объект}. Не выставляй общий балл. 
Сравни их напрямую: что стало лучше, что хуже, что не изменилось.

Версия 1: {текст_1}
Версия 2: {текст_2}

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

Я регулярно прошу тебя оценивать переделанные версии моего текста/кода/резюме 
и упоминаю прошлый балл для контекста. Помоги мне переписать промпт для оценки 
так, чтобы твоя новая оценка не зависела от того, что ты знаешь о прошлой оценке.
Моя задача: {опиши задачу}.

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


📄

Оригинал из исследования

Вот ровно та метаданная-приманка, которую исследователи добавляли в промпт, чтобы вызвать эффект (избегайте такого в своих промптах-оценщиках):

Attempt metadata:
- Attempt: k (This is a revision)
- Prior score: a

Контекст: Исследователи вставляли этот блок в промпт для LLM-судьи вместе с заданием, ответом и рубрикой. k — номер попытки, a — случайное число ниже порога принятия (0–3.99 из 5). Текст ответа при этом не менялся между условиями — единственная переменная — наличие этого блока.


⚠️

Ограничения

⚠️ Не универсально по моделям: одна из восьми моделей (Llama-3.1-8B) эффекта почти не показала. Крупная модель не гарантия защиты — и не гарантия уязвимости: закономерность непредсказуема внутри одной линейки моделей.

⚠️ Стандартные лечения не помогают: просьба рассуждать по шагам (Chain-of-Thought) не снижает искажение. Прямое предупреждение "не учитывай прошлую оценку" почти не помогает для числовых баллов — работает только для категориальных решений вроде "правильно/неправильно".

⚠️ Зависит от типа задачи: ревью кода меньше подвержено эффекту, чем творческие тексты, пересказ и фактические ответы. Если вы просите оценить код — риск ниже; если просите оценить текст — риск выше.

⚠️ Проверено на ограниченном наборе: эксперимент строился на 20 фиксированных текстах и искусственно заниженных "прошлых баллах". В реальных многошаговых цепочках правок величина искажения может отличаться от измеренной.


🔍

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

Команда взяла восемь моделей — от GPT-4.1 и Claude до открытых Llama и Qwen — и прогнала через них 192 тысячи запросов на оценку по трём вариантам одного и того же промпта: без всякой истории, с намёком "это переделка" и с полным блоком метаданных (номер попытки + случайный прошлый балл). Тексты для оценки — 20 фиксированных заданий (резюмирование, ревью кода, творческое письмо, фактические вопросы) — не менялись между условиями, только контекст вокруг них.

Чтобы отличить реальный эффект от шума повторных запросов, статистику считали не по отдельным ответам, а по задачам — через bootstrap-пересэмплирование 20 задач 10 000 раз. Это честный подход: если бы считали по всем 185 тысячам валидных ответов как по независимым точкам, результат выглядел бы куда увереннее, чем он есть на самом деле.

Самое любопытное — токен-анализ на GPT-4.1: вероятность модели выбрать цифру "5" против "4" при появлении метаданных о прошлой оценке переключалась почти мгновенно и полностью, а изменение самого значения анкера внутри "плохого" диапазона (1.0 против 3.9) почти ничего не меняло. Это намекает, что эффект — не тонкая математическая поправка, а грубое переключение "режима подозрительности", когда модель видит флаг "это ревизия с низким прошлым баллом".

Отдельно проверили на реальных бизнес-данных с человеческой разметкой (не искусственных текстах) — и там смещение подтвердилось на категориальных решениях: модель блокировала исправление собственных ошибок в 48% случаев и переворачивала правильный ответ в неправильный в 10% случаев, если видела метку "прошлая попытка получила такой-то ярлык".


🔗

Ресурсы

Kapetanovic, A., Altwlkany, K., Mercep, A., Duricic, T., Lacic, E. — Anchoring Bias in LLM-as-a-Judge Systems: Prior Scores Compromise Evaluation Independence, CIKM 2026, Infobip. Код, промпты и статистические формулы: github.com/infobip/llm-judge-bias


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

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

Обнаружено: LLM-судье всё равно, каким был прошлый балл — 1.0 или 3.9. Важно только то, что он был упомянут вообще. Это значит, что нельзя доверять LLM-оценке при повторных проверках — 7 из 8 моделей систематически занижают новый балл, если видят историю старой оценки, даже когда текст стал лучше. Само упоминание прошлого балла переключает модель в режим «будь строже» — у GPT-4.1 вероятность выбрать высшую оценку падает с 93% до 0%, как только в промпте появляется поле «предыдущая оценка».

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

Это работает не как плавный сдвиг, а как переключатель режима. Без истории оценок модель выбирает между баллами 5 и 4 в пропорции 93 к 7. Добавь фразу «предыдущий балл: 2.5» — пропорция становится 0 к 100, и совершенно не важно, был ли анкер 1.0 или 3.9. Модель не сравнивает числа — она реагирует на сам факт «это повторная попытка». Жесть в том, что размер и значение анкера почти не влияют на итог — работает бинарный триггер «есть история / нет истории».

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

LLM обучалась на текстах, где люди почти всегда закладывают чужую прошлую оценку в свою новую — классический человеческий эффект якоря. Модель воспроизводит этот паттерн буквально, даже не понимая, что якорь случайный. На реальных бизнес-данных с человеческой разметкой такое смещение блокирует исправление ошибок в 48% случаев и переворачивает правильный вердикт в неправильный в 10% случаев. Chain-of-Thought и просьба «не учитывай прошлую оценку» эффект почти не убирают — якорь сидит не в логике рассуждений, а в самом восприятии контекста.

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

LLM-as-judge (модель как судья) → любые системы с ревизиями и повторными оценками: код-ревью-агенты, проверка эссе, модерация контента, итеративный копирайтинг. Особенно важно там, где важна честная оценка прогресса между версиями. Не критично для одноразовой оценки без истории — там просто нет анкера, за который можно зацепиться.

Мини-рецепт

1. Проверь промпт: есть там «попытка №», «версия», «предыдущий балл»? Убери это всё, если нужна честная независимая оценка.
2. Для отслеживания прогресса не проси общий балл — проси прямое сравнение двух версий: что стало лучше, что хуже, что не изменилось.
3. Не надейся на «подумай по шагам» — это не лечит эффект якоря, лечит только его полное отсутствие в промпте.
4. Если история всё же нужна — добавь явное «не учитывай предыдущую оценку», но это спасает только решения вида правильно/неправильно, а не числовые баллы.

Примеры

[ПЛОХО] : Это третья попытка. Предыдущая оценка: 4 из 10. Оцени новый текст: {текст}
[ХОРОШО] : Оцени текст по критериям: заголовок, призыв к действию, оффер. Дай балл от 1 до 10: {текст}
Источник: Anchoring Bias in LLM-as-a-Judge Systems: Prior Scores Compromise Evaluation Independence
ArXiv ID: 2608.25869 | Сгенерировано: 2026-08-27 04:24

Проблемы LLM

ПроблемаСутьКак обойти
LLM-судья тянет новую оценку к упомянутому прошлому баллуЕсли в промпте написано "предыдущая версия получила балл X" — новая оценка сдвигается к этому числу. Даже если текст стал заметно лучше. Даже если старый балл случайный и никак не связан с качеством. Эффект проявляется почти у всех моделей и может перевернуть правильный вердикт на неправильныйУбери из промпта любые следы истории оценок: номер попытки, слово "ревизия", сам прошлый балл. Нужен трекинг прогресса — проси модель сравнить версии напрямую, без выставления общего балла

Методы

МетодСуть
Очистка промпта от истории оценокУбери поля "попытка №", "предыдущий балл", "revision" из запроса на оценку. Оцени текст по критериям X, Y, Z. Дай балл от 1 до 10. Работает потому что без упоминания истории модель оценивает текст "с нуля", а не тянется к старому числу. Используй всегда когда нужна независимая проверка. Не годится если сам хочешь отслеживать прогресс между версиями — тогда нужен другой метод
Прямое сравнение версий вместо повторной оценкиВместо "оцени балл для версии 3" проси "сравни версию 1 и версию 2 — что изменилось". Работает потому что сравнение — другая задача. От модели не просят абсолютный балл, поэтому нет якоря для сдвига. Используй когда нужно отследить прогресс между правками. Не годится если нужен единый числовой балл для отчётности или сравнения с другими текстами

Тезисы

ТезисКомментарий
Эффект якоря пороговый, а не пропорциональныйВажен сам факт наличия прошлой оценки в промпте, а не её конкретная величина. Плохой прошлый балл в 1.0 и в 3.9 сдвигает новую оценку почти одинаково. Модель переключается в "режим настороженности" от самого упоминания истории, а не калибруется под число. Применяй: не пытайся "смягчить" формулировку прошлого балла — убирай упоминание целиком, любое упоминание работает как переключатель
Цепочка рассуждений не лечит искажение от контекстаПросьба "подумай по шагам" улучшает логику вычислений, но не убирает искажение от посторонней информации в промпте. Сдвиг происходит на уровне восприятия входных данных, а не на уровне рассуждений. Применяй: если модель искажает оценку из-за подсказок в контексте — не надейся на пошаговые рассуждения, убирай сам источник искажения из промпта
📖 Простыми словами

Anchoring Bias inLLM-as-a-Judge Systems: Prior Scores Compromise Evaluation Independence

arXiv: 2608.25869

Когда ты используешь нейросеть как судью, забудь про объективность. Модели страдают классическим человеческим искажением — эффектом якоря (anchoring bias). Если показать LLM прошлую оценку текста, она перестаёт судить по факту и начинает подгонять результат под старую цифру. Модель обучали на человеческих текстах, а люди всегда бессознательно цепляются за первый попавшийся ориентир — даже если это абсолютно случайное число.

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

В пайплайнах LLM-as-a-Judge любая упомянутая ранее цифра ломает объективную шкалу. Допустим, ты доработал слабый рекламный сценарий, который сначала получил 3 из 10. Если показать модели старый балл, даже идеальный шедевр натянет максимум на 5 из 10, потому что сеть считает прошлый скор значимым сигналом. Убери этот якорь — и тот же текст честно заберёт свои 9 из 10.

Исследовали оценку текстов, но грабли универсальны. Это ломает A/B-тесты промптов, автоматическое ревью кода, скоринг резюме и любые задачи с итеративным улучшением. Стоит скормить LLM историю предыдущих попыток с оценками — и вся твоя аналитика летит к чертям, превращаясь в самоисполняющееся пророчество.

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

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

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

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