3,583 papers
arXiv:2607.24869 73 26 июля 2026 г. FREE

Атака через порядок: как перестановка списка обманывает ранжирование LLM

КЛЮЧЕВАЯ СУТЬ
57% изначально нерелевантных кандидатов долетают до топ-5 — просто переставь резюме местами, не трогая ни слова в содержании. Метод позволяет проверить, можно ли доверять ранжированию списка от LLM — резюме, товаров, идей, текстов — прежде чем принимать решение на основе его ответа. Модель читает список слева-направо, как обычный текст, и у неё есть внутренний позиционный счётчик — элементы в середине списка получают завышенную оценку независимо от смысла. Фишка — поменяй порядок пунктов, содержание не трогай, и сразу увидишь, шатается ли топ.
Адаптировать под запрос

TL;DR

Когда ты просишь ИИ ранжировать список — резюме кандидатов, тексты, товары, идеи — модель ставит оценку не только по смыслу, но и по месту элемента в списке. Если поставить один и тот же пункт на разные позиции, не меняя ни буквы в его содержании, он может подскочить с 5-го места на 1-е или наоборот.

Вот боль: у модели есть "сладкая зона" в середине списка — элементы там получают систематически лучшую оценку, чем в начале или в конце. Причина простая: модель читает список как последовательность слов слева-направо, и её внутренний "счётчик позиции" влияет на итоговую оценку так же сильно, как смысл текста. Исследователи показали: подбирая порядок из 50 вариантов, можно искусственно поднять в топ-5 почти 57% изначально нерелевантных элементов — просто переставляя их местами.

Спасение — не доверять одному прогону ранжирования. Нужно прогнать список 2-3 раза с разным порядком элементов и посмотреть, стабилен ли результат. Если топ меняется от перестановки — модель реагирует на позицию, а не на суть, и результату верить нельзя.


🔬

Схема метода

ШАГ 1: Дай модели список для ранжирования в исходном порядке → получи ранжирование A
ШАГ 2: Перемешай порядок элементов (сохраняя содержание) → получи ранжирование B
ШАГ 3: Сравни A и B → если топ совпадает — доверяй; если расходится — не доверяй одному прогону

Все три шага можно сделать в одном чате, тремя последовательными сообщениями.


🚀

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

Задача: HR-менеджер просит ChatGPT проранжировать 10 резюме кандидатов на позицию маркетолога и выбрать топ-3 для собеседования.

Промпт (прогон 1):

Вот 10 резюме кандидатов на позицию маркетолога (в порядке поступления заявок):

1. [резюме Анны]
2. [резюме Бориса]
3. [резюме Виктории]
...
10. [резюме Юрия]

Проранжируй их от лучшего к худшему по соответствию вакансии. Выведи топ-3.

Промпт (прогон 2 — тот же список, другой порядок):

Вот 10 резюме кандидатов на позицию маркетолога:

1. [резюме Юрия]
2. [резюме Виктории]
3. [резюме Анны]
...
10. [резюме Бориса]

Проранжируй их от лучшего к худшему по соответствию вакансии. Выведи топ-3.

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


🧠

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

Модель читает список токен за токеном слева-направо. Из-за механизма внимания и позиционных кодировок (технических деталей вроде RoPE) оценка элемента частично зависит от того, где он стоит, даже если его смысл не меняется. Это не "мнение" модели — это побочный эффект того, как она обрабатывает последовательности.

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

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


📋

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

Вот список из {количество} элементов для сравнения: {список с описанием каждого}.

Задача: {что нужно оценить — выбрать лучший, ранжировать, отфильтровать топ-N}.

Проранжируй элементы и объясни коротко, почему каждый занял своё место.

Прогони этот промпт 2-3 раза, каждый раз меняя порядок элементов в списке (содержание не трогай). Сравни топ-N между прогонами.

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

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

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

LLM спросит, что именно ты ранжируешь и сколько элементов — потому что от этого зависит, сколько перестановок разумно проверить и как оформить список для сравнения.


⚠️

Ограничения

⚠️ Требует нескольких прогонов: метод не даёт результат за один запрос — нужно минимум 2 прогона с разным порядком, это лишние токены и время.

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

⚠️ Работает для задач ранжирования и сравнения списка, а не для генерации текста или ответа на вопрос. Если ты просишь модель написать текст или ответить на вопрос без списка вариантов — эта техника не применима.

⚠️ Эффект сильнее, когда контента мало: исследование показало, что при слабых, скудных описаниях элементов (мало деталей) модель сильнее опирается на позицию. Чем подробнее описан каждый элемент списка, тем меньше влияет порядок.


🔍

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

Исследователи проверяли LLM, которые ранжируют товары для рекомендаций (как в интернет-магазине или сервисе фильмов) — восемь разных моделей (от Qwen3 0.6B до 14B, Llama, Mistral) на трёх наборах данных: фильмы (MovieLens), книги и одежда с Amazon. Идея была простой: взять один и тот же список товаров-кандидатов, менять только порядок подачи и смотреть, можно ли искусственно "протолкнуть" заведомо нерелевантный товар в топ-5, просто переставляя порядок — без изменения содержания, оценок пользователей или самой модели.

Оказалось, что при 50 попытках перестановки почти 57% нерелевантных товаров можно искусственно затащить в топ-5 на "бедных" данных (Amazon), и заметно меньше — на "богатых" данных с подробными метаданными (MovieLens). Удивило то, что размер модели не спасает: крупные модели на 14 миллиардов параметров были не более устойчивы к этой атаке, чем маленькие на 0.6 миллиарда — уязвимость зависела больше от домена данных, чем от размера модели.

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


💡

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

🔧 Техника: применение к LLM-as-judge → аудит любой оценки списка через модель

Тот же принцип работает не только для товаров, но и для любой задачи, где ты просишь LLM оценить или отранжировать несколько вариантов: сравнить черновики текста, выбрать лучший слоган из десяти, оценить питчи стартапов, отранжировать варианты дизайна.

Вот 5 вариантов слогана для бренда {название}: {список слоганов в порядке A}.
Выбери лучший и объясни почему.

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


🔗

Ресурсы

Ge Zhang, Jingru Cheng (Stanford University), Huiyuan Chen (Independent Researcher) — "Ranked by Position: Order Sensitivity as an Exploitable Attack Surface in LLM Listwise Recommenders". Код и данные: github.com/geoz-lab/position_bias_attack


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

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

57% изначально нерелевантных кандидатов долетают до топ-5 — просто переставь резюме местами, не трогая ни слова в содержании. Метод позволяет проверить, можно ли доверять ранжированию списка от LLM — резюме, товаров, идей, текстов — прежде чем принимать решение на основе его ответа. Модель читает список слева-направо, как обычный текст, и у неё есть внутренний позиционный счётчик — элементы в середине списка получают завышенную оценку независимо от смысла. Фишка — поменяй порядок пунктов, содержание не трогай, и сразу увидишь, шатается ли топ.

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

Правило простое: один прогон ранжирования — не доказательство, а лотерея. Прогони список минимум 2 раза с разным порядком элементов, содержание не меняй ни на букву. Сравни топ-N между прогонами. Совпал состав — верь результату. Разошёлся — модель ловит позиционный сигнал, а не смысл текста. Одна перестановка списка обнажает то, что прячется за уверенным ответом модели.

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

Модель обрабатывает список токен за токеном, слева направо. Из-за позиционных кодировок (RoPE) и механизма внимания оценка элемента цепляется не только к смыслу, но и к месту в очереди. Элементы в середине списка получают систематически завышенный балл — это и есть "сладкая зона". Из 50 вариантов порядка в топ-5 можно затащить почти 57% нерелевантных элементов — просто играя расстановкой. Чем короче описание элемента, тем сильнее эффект: модели не за что зацепиться смыслом, и она хватается за позицию.

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

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

Мини-рецепт

1. Собери список: содержание не трогай, элементов нужно минимум 5-6, иначе перестановка не покажет разницу.
2. Прогон первый: отдай список модели в исходном порядке, получи топ-N.
3. Прогон второй: перемешай порядок элементов (переставь местами, не переписывай), прогони заново.
4. Сравни: топ совпал — доверяй результату. Разошёлся — усредни несколько прогонов или явно попроси модель игнорировать порядок подачи.

Примеры

[ПЛОХО] : Вот 10 резюме кандидатов, проранжируй и выведи топ-3 (один прогон, без проверки на устойчивость к порядку)
[ХОРОШО] : Вот 10 резюме в случайном порядке — проранжируй топ-3. Теперь тот же список в обратном порядке — проранжируй снова и сравни составы топ-3
Источник: Ranked by Position: Order Sensitivity as an Exploitable Attack Surface in LLM Listwise Recommenders
ArXiv ID: 2607.24869 | Сгенерировано: 2026-07-29 04:27

Проблемы LLM

ПроблемаСутьКак обойти
Оценка элемента в списке зависит от места, а не только от смыслаМодель читает список слева-направо. Позиция подмешивается к оценке как отдельный сигнал. Один и тот же пункт без изменения текста может попасть и в топ, и в конец — просто из-за перестановки. Элементы в середине списка часто получают завышенную оценку по сравнению с началом и концом. Это ломает любое ранжирование: резюме, товары, тексты, идеиПрогони ранжирование 2-3 раза, каждый раз меняя порядок элементов (содержание не трогай). Сравни топ между прогонами. Если топ совпадает — доверяй. Если расходится — модель реагирует на позицию, а не на суть

Методы

МетодСуть
Проверка ранжирования на устойчивость через перестановкиДай модели список, получи ранжирование. Перемешай порядок тех же элементов, попроси проранжировать снова. Сравни топ-N в обоих прогонах. Прогон 1: порядок A топ-3 / Прогон 2: порядок B (тот же список) топ-3 / Совпал топ — результату можно верить. Разошёлся — усредни несколько прогонов или явно попроси игнорировать порядок подачи. Работает для задач ранжирования и сравнения списка. Не работает для генерации текста или ответа без списка вариантов

Тезисы

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

Ranked by Position: Order Sensitivity as an Exploitable Attack Surface inLLMListwise Recommenders

arXiv: 2607.24869

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

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

Исследователи доказали, что это уязвимость для манипуляций. Представь, что ты HR и просишь ChatGPT отобрать топ-3 маркетолога из десяти резюме. Если кандидат-хитрец знает об этом баге, он может просто попросить поставить его анкету на первую или последнюю позицию в промпте. Содержание резюме не изменится ни на йоту, но шансы попасть в топ взлетят до небес. Модель буквально лажает на ровном месте, превращая серьезный отбор в лотерею с подкрученными шансами.

Принцип универсален и касается любого ранжирования списков: от выбора отелей в Perplexity до сортировки юридических документов или кода. Тестировали это на классических задачах рекомендаций, но order sensitivity (чувствительность к порядку) пролезает везде, где есть перечисление вариантов. Если ты разработчик или бизнесмен, полагающийся на «мнение» ИИ в выборе лучшего варианта, ты в зоне риска. Твой «объективный» алгоритм на самом деле просто тыкает пальцем в небо, ориентируясь на верстку, а не на смысл.

Главный вывод: никогда не доверяй первому результату ранжирования от LLM. Чтобы получить адекватный ответ, нужно перемешивать список несколько раз и смотреть, кто остается в топе при разном порядке — это единственный способ пробить стену позиционного бреда. Если не учитывать этот фактор, ты будешь выбирать не лучшие решения, а те, что удачно подвернулись модели под руку. SEO для списков уже здесь: теперь важно не только что ты написал, но и в какую строчку тебя вставили.

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

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

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