TL;DR
Более длинный промпт с дополнительным контекстом не помогает LLM анализировать — и часто делает результат хуже. Исследователи проверили, что происходит когда просят модель найти уязвимость в коде: сначала давали только нужный фрагмент, потом добавляли связанные функции. Чем больше контекста — тем хуже работали слабые модели. Полученный эффект не специфичен для кода — он про то, как LLM вообще обрабатывает объём информации.
Слабость LLM — шум в контексте. Когда ты просишь модель что-то оценить или классифицировать и добавляешь «для понимания картины» дополнительные материалы, часть моделей начинает путаться. GPT-4.1 Mini при добавлении связанных функций потерял 25 процентных пунктов точности. Не потому что задача стала сложнее — а потому что модель «отвлекается» на нерелевантный контекст. При этом сильные модели (Claude Haiku 4.5, Gemini Flash) оставались стабильными независимо от объёма.
Выход — структурированный запрос с минимально необходимым контекстом. Prompt из исследования работает по схеме: целевой объект → бинарная классификация → объяснение по фиксированным критериям. Никакого «для полной картины прикладываю всё». Только то, что нужно для конкретного суждения — и явный запрос на структурированный вывод.
Схема метода
Один промпт, три обязательных блока:
БЛОК 1: Инструкция
→ Что анализировать
→ Бинарный вопрос: уязвимо / не уязвимо (1 / 0)
→ Формат ответа: сначала оценка, потом объяснение
БЛОК 2: Целевой объект
→ Только тот фрагмент, который нужно оценить
→ Без «для контекста прикладываю ещё вот это»
БЛОК 3: Критерии объяснения
→ Тип проблемы / уязвимости
→ Где именно (конкретное место, строка, фрагмент)
→ Корневая причина
→ Вектор эксплуатации или способ исправления
Всё в одном промпте. Отдельных запросов не нужно.
Пример применения
Задача: Ты получил оферту от потенциального партнёра по совместному бизнесу — хочешь понять, есть ли в условиях риски для тебя. Обычный инстинкт — скинуть весь документ целиком «для контекста». Но по логике исследования: лучше взять конкретный спорный пункт и работать с ним напрямую.
Промпт:
Проанализируй следующий пункт договора на наличие рисков для стороны-получателя.
ЗАДАЧА:
Оцени: несёт ли этот пункт правовой или финансовый риск?
Ответь сначала: ДА (1) или НЕТ (0).
Затем дай структурированное объяснение.
АНАЛИЗИРУЕМЫЙ ПУНКТ:
«Сторона А вправе в одностороннем порядке изменять условия
настоящего договора, уведомив Сторону Б не позднее чем за
3 (три) рабочих дня до вступления изменений в силу.»
ФОРМАТ ОБЪЯСНЕНИЯ:
1. Тип риска: [название категории]
2. Где именно: [конкретная фраза или конструкция]
3. Корневая причина: [почему это проблема]
4. Вектор использования против тебя: [как партнёр может это применить]
5. Как исправить: [что изменить в формулировке]
Результат: Модель выдаст сначала «ДА (1)» — потом пять заполненных блоков. В блоке «Тип риска» — категория проблемы (асимметрия прав, односторонний выход и т.д.). В «Корневой причине» — почему именно эта формулировка опасна. В «Векторе» — сценарий как партнёр может использовать пункт. В «Как исправить» — конкретная альтернативная формулировка. Никаких общих рассуждений — только структура по критериям.
Почему это работает
LLM не «читает» контекст как человек. Когда ты добавляешь дополнительные материалы «для понимания картины», модель не фильтрует их по релевантности — она обрабатывает всё. Нерелевантный контекст создаёт шум, который сбивает классификацию. Это особенно заметно на моделях среднего уровня.
Структура объяснения — это явная инструкция по критериям оценки. Когда ты просишь «объясни почему» — модель выбирает угол сама. Когда задаёшь пять конкретных осей (тип / место / причина / вектор / исправление) — получаешь пять заполненных ответов. Модель генерирует текст по паттерну из промпта, и чем конкретнее паттерн, тем точнее вывод.
Бинарный ответ перед объяснением фиксирует позицию. Если сначала попросить объяснение — модель может «уплыть» в нюансы. Если сначала потребовать чёткий ответ 1/0 — дальнейшее объяснение идёт как обоснование уже принятой позиции. Это снижает «размытые» ответы типа «с одной стороны… с другой стороны».
Рычаги управления промптом: - Количество критериев → убери «Вектор использования» для быстрой проверки - Бинарность → замени 1/0 на шкалу 1-5 если нужна градация - Целевой объект → ТОЛЬКО нужный фрагмент, не весь документ - Модель → для этого формата Claude и Gemini стабильнее GPT-4o mini
Шаблон промпта
Проанализируй следующий {объект анализа} на наличие {тип проблемы}.
ЗАДАЧА:
Содержит ли {объект} {тип проблемы}?
Ответь сначала: ДА (1) или НЕТ (0).
Затем дай структурированное объяснение.
АНАЛИЗИРУЕМЫЙ {ОБЪЕКТ}:
{вставь только конкретный фрагмент — без «для контекста» и лишних материалов}
ФОРМАТ ОБЪЯСНЕНИЯ:
1. Тип проблемы: [категория]
2. Где именно: [конкретное место в тексте]
3. Корневая причина: [почему это проблема]
4. Как это может навредить: [конкретный сценарий]
5. Как исправить: [что изменить]
Что подставлять:
- {объект анализа} — пункт договора / абзац / УТП / условие оффера / фрагмент письма
- {тип проблемы} — юридический риск / слабое место / манипуляция / противоречие / финансовая ловушка
- {объект} — повтор для согласования
🚀 Быстрый старт — вставь в чат:
Вот шаблон структурированного анализа. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит что именно анализировать и какой тип проблемы искать — потому что без этого она не сможет заполнить блок «Тип проблемы» и поставить бинарную оценку. Она возьмёт структуру из шаблона и адаптирует под твою задачу.
Ограничения
⚠️ Слабые модели + объёмный контекст: GPT-4o mini, GPT-4.1 Mini теряют в точности при добавлении дополнительного материала. Если нужна стабильность — используй Claude или Gemini.
⚠️ Не для субъективных суждений: Метод оптимален там, где есть объективные критерии (риск есть / нет, противоречие есть / нет). Для оценки «насколько интересно написан текст» бинарная схема работает хуже.
⚠️ C++ и малые выборки: Для редких языков и узких доменов результаты менее надёжны — выборка слишком маленькая для выводов.
⚠️ Python — исключение: Для Python-кода добавление контекста иногда помогало. Принцип «меньше контекста = лучше» — не абсолютный закон, а тенденция.
Как исследовали
Команда из NC State University и Federal University of Alagoas взяла 509 реальных уязвимостей из базы данных ReposVul — CVE-записей из открытых проектов на C, C++ и Python. Для каждой уязвимости они сгенерировали три версии промпта: только уязвимая функция, функция + вызываемые функции (callees), функция + вызывающие функции (callers). Это позволило напрямую сравнить: что происходит когда добавляешь контекст?
Тестировали четыре модели: Claude Haiku 4.5, Gemini 3 Flash, GPT-4.1 Mini, GPT-5 Mini. Все запросы через API при температуре 0 — для воспроизводимости. Измеряли точность, F1 и стоимость на конфигурацию.
Главное удивление: Code Only часто побеждал. Исследователи ожидали, что дополнительный контекст поможет — ведь некоторые уязвимости проявляются только при взаимодействии функций. Оказалось обратное: у GPT-4.1 Mini точность упала с 75% до 54% при добавлении callees. Статистически значимо, с большим размером эффекта (φ = 0.4). Claude Haiku 4.5 и Gemini Flash остались стабильными — разница незначимая. Это подтвердило гипотезу: проблема не в задаче, а в том, как разные модели справляются с «шумным» контекстом.
Отдельно оценивали качество объяснений вручную на 1004 сэмплах по двум осям — корректность (тип + место + причина) и полнота (тип + место + причина + вектор/исправление). Claude Haiku 4.5 дал правильные и полные объяснения в 93.6% случаев. GPT-модели имели процент «нулевых» объяснений в пять раз выше.
Адаптации и экстраполяции
🔧 Техника: градация вместо бинарности → для неоднозначных задач
Бинарное 1/0 хорошо для чётких категорий. Если задача субъективнее — замени на шкалу:
Оцени риск по шкале:
НИЗКИЙ (1) / СРЕДНИЙ (2) / ВЫСОКИЙ (3)
Это сохраняет принцип «сначала оценка — потом объяснение», но даёт больше градации для переговорной позиции.
🔧 Техника: два независимых анализа → для важных решений
Запусти один и тот же структурированный промпт дважды — с формулировкой «найди риски» и «найди возможности». Сравни результаты. Модель с разными инструкциями даст разные акценты в тех же пяти блоках.
ПРОМПТ 1: Содержит ли этот пункт риск для меня? (1/0)
ПРОМПТ 2: Содержит ли этот пункт возможность для меня? (1/0)
Результаты двух промптов дадут более полную картину, чем один нейтральный запрос.
Ресурсы
Название работы: Vulnerability Detection with Interprocedural Context in Multiple Languages: Assessing Effectiveness and Cost of Modern LLMs
Конференция: EASE 2026 (International Conference on Evaluation and Assessment in Software Engineering), Glasgow
Авторы: Kevin Lira, Baldoino Fonseca, Davy Baía, Márcio Ribeiro, Wesley K. G. Assunção
Организации: North Carolina State University; Federal University of Alagoas (Brazil)
Датасет: ReposVul — публичный датасет уязвимостей из NVD CVE
