Опубликовано
Фонарь, собака и LLM: как повысить контрастность промптов
Автор: Гусев Николай [портфолио]
Ночь. Лес. Собака тянет поводок куда-то в темноту. Я веду фонарём по кустам - на шорох. И ловлю себя на мысли: я ведь не вглядываюсь. Фонарь - бросок взгляда - галочка. "Тут никого". Я не увидел, что там. Я увидел, что там ничего важного.
И это не баг зрения. Это его основная программа.
Смотреть и видеть - разные вещи. Смотреть - направить внимание, получить данные, обработать. Видеть - классифицировать ситуацию как resolved без полной обработки. Мозг ставит галочку: проверено, угрозы нет.
И тут я понял: именно так работают языковые модели (LLM). Токен приходит, контекст подсказывает паттерн, и модель "видит" - выдаёт следующий токен без вглядывания в смысл. Она помечает: в этом контексте после этих токенов - вот этот. Разрешено, выдано.
Что говорят саккады
Японские нейробиологи из университета Тохоку исследовали саккады - мелкие движения глаз, которые мы совершаем несколько раз в секунду. И нашли два канала восприятия.
-
М-путь (магноцеллюлярный) - обнаруживает движение и смещение. "Вглядывание". Детекция аномалий.
-
Р-путь (парвоцеллюлярный) - подавляет ложные сигналы. "Помечаю как resolved". Стабилизация.
Ключевое открытие: повышение контраста объекта до саккады улучшает распознавание, а после - ухудшает. Когда пост-саккадический сигнал яркий, Р-путь подавляет М-путь. Мозг говорит: "вижу чётко, значит всё стабильно, нечего проверять".
Если бы мы замечали каждое смещение картинки при движении глаз - нас бы тошнило от информации.
LLM живут на Р-пути
Языковая модель по умолчанию работает как Р-путь. Она получает контекст и "помечает" наиболее вероятное продолжение как resolved. Без вглядывания. Без проверки, почему именно этот токен уместен.
Галлюцинации - это не ошибки зрения. Это уверенное "вижу" без вглядывания.
Можно ли повысить "контрастность" промпта, чтобы переключить LLM с Р-пути на М-путь? Можно. И вы уже это делаете.
Приём 1: контраст до - структурируйте ввод
Сильный сигнал до саккады улучшает распознавание. Для LLM: чётко выделите задачу до того, как начнётся генерация.
Плохо (низкий контраст)
у меня есть список серверов server1 192.168.1.1 server2 192.168.1.2 server3 192.168.1.3 и на каждом работает nginx и мне надо проверить что порты открыты и конфиги валидны и ещё посмотреть логи на ошибки пожалуйста помоги
Модель "видит": текст про серверы, nginx, порты, логи. Помечает как "админская задача" и выдаёт универсальный ответ. Всё сливается в один поток - Р-путь торжествует.
Хорошо (высокий контраст)
<task>Проверить доступность nginx на 3 серверах</task>
<servers>
- server1: 192.168.1.1
- server2: 192.168.1.2
- server3: 192.168.1.3
</servers>
<checks>
1. Порт 80/443 открыт
2. nginx -t проходит без ошибок
3. Нет ERROR в error.log за последний час
</checks>
<output>Таблица: сервер | статус | детали</output>
XML-теги работают как "высокий контраст до саккады". Модель видит структуру. М-путь активирован: есть границы, есть что детектировать.
Приём 2: контраст после - не подсказывайте ответ
Самый контринтуитивный вывод: яркий сигнал после саккады ухудшает распознавание. Р-путь подавляет М-путь. Мозг говорит: "вижу чёткую картину, всё стабильно".
Если вы намекаете на ответ в конце промпта - модель перестаёт думать.
Плохо (вы подали ответ)
Проанализируй логи. Наверное, проблема в том, что
подключения дропаются из-за нехватки файловых
дескрипторов, да?
Вы дали ответ. Модель подтвердит вашу гипотезу. Зачем вглядываться, если ответ уже есть?
Хорошо (ответа нет)
Проанализируй логи nginx за последний час.
Укажи: 1) наиболее вероятную причину ошибок
2) конкретные строки лога, которые на неё указывают
3) что проверить дальше
Нет подсказки. Модели придётся "вглядеться" в данные.
Приём 3: эффект гашения - заставьте думать
Японцы нашли blanking effect: убрать объект на 100-300 мс после саккады - и точность обнаружения растёт. Р-путь не успевает подавить М-путь.
Цепочка рассуждений (Chain-of-Thought) - это эффект гашения для LLM. Модель проходит через "пустоту" пошаговых рассуждений без готового шаблона. Не может "пометить" ответ - потому что ответа ещё нет.
Без гашения
Вопрос: в коде баг или фича?
for item in items:
result = process(item)
results.append(result)
Модель видит цикл, append - и помечает: "нормальный код". А results может быть не инициализирован, а process() может мутировать item.
С гашением
Проанализируй код пошагово:
Шаг 1: какие переменные используются и где объявлены?
Шаг 2: есть ли побочные эффекты?
Шаг 3: какие граничные случаи?
Шаг 4: вердикт - баг или фича, и почему
for item in items:
result = process(item)
results.append(result)
Четыре "пустоты" прежде чем выдать ответ. Каждая - микросаккада, где М-путь работает, а Р-путь ещё не вмешался.
Приём 4: рамка для М-пути
Явный формат вывода создаёт "рамку", в которой М-путь знает, что детектировать.
Плохо
Расскажи про разницу между REST и GraphQL
Модель выдаст энциклопедическую справку. Р-путь нашёл знакомый паттерн и пометил как resolved.
Хорошо
Сравни REST и GraphQL для проекта с такими условиями:
- 3 фронтенд-разработчика, до этого только REST
- мобильное приложение с медленным каналом
- 40+ типов сущностей, но на экране обычно 3-5 полей
Ответ в формате:
| Критерий | REST | GraphQL |
Для каждого критерия - одно предложение и оценка 1-5.
В конце - вердикт и почему.
Конкретный контекст + формат вывода = М-путь знает, куда смотреть. Модель вынуждена сравнивать, а не пересказывать документацию.
Итого
Зрительная система считает мир стабильным, пока нет противоречий. LLM считает контекст resolved, пока нет границ.
Четыре приёма контраста:
-
Структурируйте ввод (XML, JSON, заголовки) = высокий контраст до
-
Не подсказывайте ответ = низкий контраст после
-
Пошаговый анализ = эффект гашения, Цепочка рассуждений (Chain-of-Thought)
-
Формат вывода = рамка для М-пути
Вы не учитесь писать промпты. Вы учитесь переключать каналы восприятия.
Собака в лесу всегда на М-пути - для неё шорох не фоновый сигнал, а primary data. А мы с фонарём - и LLM с токенами - живём на Р-пути. Иногда нужно выключить фонарь на секунду, чтобы увидеть.
Исследование: I see... hey, stop moving: как зрительная система компенсирует неточности саккад (Хабр)
*Hermes Agent - AI-ассистент с инженерной методологией. Больше про классическую разработку + ИИ - *@hermesagentru.