Промпт-инжиниринг

Материал из llmdocs — справочник разработчика
Промпт-инжиниринг
Объекттекст запроса к языковой модели
Основные приёмычёткие инструкции, контекст, примеры (few-shot), рассуждение по шагам, формат вывода
Ключевые работыGPT-3 и few-shot (2020), chain-of-thought (2022), ReAct (2022)
Связанные практикиоценка (evals), RAG, контекст-инжиниринг
Руководствадокументация Anthropic, OpenAI, Google

Промпт-инжиниринг (англ. prompt engineering) — практика составления запросов к языковым моделям так, чтобы получать точные, полезные и предсказуемые результаты. Промпт — весь текст, который получает модель: системные инструкции, вопрос пользователя, приложенные документы, примеры, описание желаемого формата. Модель не знает ничего о задаче, кроме того, что есть в промпте и в её обучающих данных, поэтому качество ответа сильно зависит от того, как задача сформулирована.

С ростом возможностей моделей «магические формулы» потеряли значение, но основы остаются: ясная постановка задачи, достаточный контекст, примеры и проверка результата. Шире эту работу называют контекст-инжинирингом — управлением всем, что попадает в контекстное окно.

Основные принципы

  1. Ясность и конкретность. Объясните задачу так, как объясняли бы новому коллеге, не знающему контекста: цель, аудиторию, ограничения, критерии хорошего результата. «Сделай короче» хуже, чем «сократи до 3 предложений для руководителя, сохранив цифры».[1]
  2. Контекст и мотивация. Объяснение, зачем нужно правило, помогает модели применить его разумно: не «никаких списков», а «ответ будет зачитан голосовым ассистентом, поэтому без списков и разметки».
  3. Примеры. Несколько образцов входа и выхода (few-shot) показывают формат и стиль лучше длинных описаний. Эта способность модели учиться по примерам в запросе была ключевым открытием GPT-3.[4]
  4. Структура. Разделяйте инструкции, данные и примеры явными границами — заголовками Markdown или XML-тегами вроде <document> и <instructions>. Длинные документы лучше помещать в начало, а вопрос — в конец.
  5. Формат вывода. Явно опишите, что нужно получить: таблицу, JSON по схеме, определённую длину. Для машинной обработки используйте структурированный вывод.
  6. Позитивные формулировки. «Пиши связными абзацами» работает надёжнее, чем «не используй списки».

Пример

Системный промпт:
Ты — ревьюер кода в команде бэкенда на Python. Ревью читают младшие разработчики,
поэтому объясняй причину каждого замечания.

Сообщение пользователя:
<code>
def get_user(id):
    return db.execute(f"SELECT * FROM users WHERE id = {id}")
</code>

Найди проблемы в коде выше. Для каждой укажи:
1) серьёзность (критично / желательно),
2) что не так и почему,
3) исправленный вариант.
Если проблем нет — так и скажи.

Промпт задаёт роль и аудиторию, отделяет код тегами, описывает формат ответа и даёт модели разрешение сказать «проблем нет», уменьшая соблазн придумать замечания.

Приёмы

Приём Суть Когда помогает
Роль в системном промпте задать экспертизу, тон, аудиторию стиль и глубина ответов
Few-shot 2–5 примеров вход — выход нестандартный формат, классификация
Рассуждение по шагам (chain-of-thought) попросить подумать перед ответом[3] математика, логика, многошаговые задачи
Декомпозиция и цепочки разбить задачу на этапы, каждый — отдельный запрос сложные документы, конвейеры
Предоставление источников вставить документы и требовать ссылок на них фактические вопросы, снижение галлюцинаций
Самопроверка попросить проверить ответ по критериям код, расчёты, соответствие требованиям
Рассуждение и действие (ReAct) чередование мыслей и вызовов инструментов[5] агенты

Рассуждающие модели думают по шагам сами, поэтому для них подробные указания «как думать» часто не нужны и даже мешают; полезнее чётко описать задачу и критерии успеха. Систематический обзор десятков техник — в работе «The Prompt Report».[6]

Промпты для агентов и инструментов

Для систем с вызовом функций (Tool use / function calling) значительная часть промпт-инжиниринга переходит в описания инструментов: понятные имена, точные описания параметров, примеры, указание, когда инструмент использовать и когда нет. Инструкции агенту стоит писать как регламент для сотрудника: границы полномочий, что делать при неясности, когда остановиться и спросить.

Итерации и оценка

Промпт — это код: его стоит хранить в системе контроля версий и проверять на наборе тестовых примеров, а не на одном удачном запросе. Типичный цикл — сформулировать критерии успеха, собрать 20–100 характерных входов, запустить, разобрать ошибки, поправить промпт и повторить. Подробнее — в статье Оценка LLM (evals). Повторяющуюся длинную часть промпта выгодно кэшировать (Кэширование промптов).[2]

Безопасность

Если в промпт попадают данные из внешних источников — письма, веб-страницы, документы пользователей, — они могут содержать инструкции, которые модель примет за команды. Защиту от этого описывает статья Безопасность LLM: prompt injection: разделение данных и инструкций, ограничение прав инструментов и подтверждение опасных действий человеком.

См. также

Источники

  1. Anthropic — Prompt engineering overview
  2. OpenAI — Prompt engineering guide
  3. J. Wei et al. — Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (2022)
  4. T. Brown et al. — Language Models are Few-Shot Learners (2020)
  5. S. Yao et al. — ReAct: Synergizing Reasoning and Acting in Language Models (2022)
  6. S. Schulhoff et al. — The Prompt Report: A Systematic Survey of Prompting Techniques (2024)