Глава 2: Механизм Attention
Принцип
Модель взвешивает важность каждого токена относительно других. Позиция инструкций в промпте влияет на их приоритет.
Как работает Attention
Механизм self-attention вычисляет веса связей между всеми парами токенов:
где:
-
(Query) — что ищем
-
(Key) — где ищем
-
(Value) — что возвращаем
-
— размерность ключа (для нормализации)
Упрощённая интуиция
Каждый токен "смотрит" на все остальные и решает, насколько они важны для его понимания.
Предложение: "Кот сидел на коврике, он был пушистым"
Токен "он" → высокий attention к "кот" (референт)
Токен "пушистым" → высокий attention к "он" и "кот"
Позиционные эффекты
1. Начало и конец промпта
Токены в начале и конце получают больше внимания (эффект primacy и recency).
Пример 1: Слабая позиция (инструкция в середине)
"Вот код для анализа:
$200 строк кода$
Найди уязвимости и верни JSON.
$ещё 100 строк$"
Пример 2: Сильная позиция (инструкция в начале)
"ЗАДАЧА: найди уязвимости, формат JSON.
Код для анализа:
$300 строк кода$"
Пример 3: Якорение (начало + конец)
"ЗАДАЧА: найди уязвимости, формат JSON.
Код:
$300 строк$
НАПОМИНАНИЕ: ответ строго в JSON формате."
2. Lost in the middle
При длинном контексте информация в середине может "теряться".
Проблема:
"Документ 1: $важная информация$
Документ 2: $текст$
Документ 3: $текст$
...
Документ 50: $текст$
Документ 51: $критичная информация$ ← может быть пропущена
Вопрос: ..."
Решение — структурирование:
"КРИТИЧНАЯ ИНФОРМАЦИЯ:
- Из документа 1: $факт$
- Из документа 51: $факт$
КОНТЕКСТ:
$остальные документы$
ВОПРОС: ..."
3. Attention sink
Первые токены часто получают непропорционально высокий attention (служат "якорем").
Использование:
"Ты senior Python developer. ← якорь роли
$длинный контекст$
Как senior Python developer, проанализируй... ← усиление якоря"
Практические следствия
Структура промпта по приоритету
$1. РОЛЬ — если нужна$ ← высокий attention (начало)
$2. КРИТИЧНЫЕ ИНСТРУКЦИИ$ ← высокий attention
$3. КОНТЕКСТ$ ← средний attention
$4. ЗАДАЧА$ ← средний attention
$5. ФОРМАТ / ОГРАНИЧЕНИЯ$ ← высокий attention (конец)
Примеры оптимизации
Пример 1: Code review
Плохо:
"Вот код: $код$. Проверь безопасность. Формат: список проблем."
Хорошо:
"ЗАДАЧА: security review
ФОРМАТ: список проблем (строка: описание)
КОД:
$код$
Выведи ТОЛЬКО проблемы безопасности."
Пример 2: Анализ данных
Плохо:
"$100 строк данных$
Посчитай среднее, медиану, стандартное отклонение.
Данные выше."
Хорошо:
"Статистический анализ данных.
Метрики: mean, median, std.
Формат: JSON.
ДАННЫЕ:
$100 строк$"
Пример 3: Многошаговая задача
Плохо:
"Напиши код, потом протестируй, потом оптимизируй, данные такие: $данные$"
Хорошо:
"ЗАДАЧА: обработка данных
ЭТАПЫ:
1. Написать функцию
2. Добавить тесты
3. Оптимизировать
ДАННЫЕ:
$данные$
Выполни этапы последовательно."
Многоголовый attention
Современные модели используют multi-head attention:
где каждая "голова" может фокусироваться на разных аспектах:
-
Синтаксис
-
Семантика
-
Позиционные связи
-
Тематические связи
Следствие для промптов
Разные аспекты задачи лучше разделять явно:
Плохо:
"Напиши быстрый безопасный читаемый код парсинга JSON"
Хорошо:
"Напиши парсер JSON.
Требования:
1. БЕЗОПАСНОСТЬ: валидация входа, лимит глубины
2. СКОРОСТЬ: O(n) сложность
3. ЧИТАЕМОСТЬ: понятные имена, docstring"