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

Материал из MachineLearning.

Перейти к: навигация, поиск
Claude Sonnet 4


Содержание

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

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

История

Понятие «промпт» восходит к режиму дополнения текста (text completion) в ранних языковых моделях. Уже GPT-2 (2019) чувствительно реагировала на формулировку начала; GPT-3 (2020) сделала few-shot learning массовым явлением: несколько демонстраций в контексте резко улучшали качество без градиентного обновления[1].

Ключевые вехи:

  • 2020 — few-shot / in-context learning в GPT-3: демонстрации в промпте задают формат и семантику задачи;
  • 2022chain-of-thought (CoT): явные промежуточные рассуждения улучшают решение арифметических и логических задач[1];
  • 2022–2023 — InstructGPT и ChatGPT: модели, выровненные через RLHF, стали следовать инструкциям, из-за чего промпт-инжиниринг превратился из академического трюка в повседневную практику;
  • 2023 — руководства DAIR.AI «Prompt Engineering Guide», распространение ReAct, Tree of Thoughts, RAG-пайплайнов;
  • 2024–2026 — автоматическая оптимизация промптов (APE, DSPy), системные промпты корпоративных ассистентов, защита от prompt injection.

Исторически промпт-инжиниринг и дообучение (fine-tuning / RLHF) шли параллельно: первое дёшево и быстро, второе закрепляет поведение в весах. На практике их комбинируют.

Базовые техники

Zero-shot prompting

Задача формулируется без примеров. Модель опирается на знания предобучения и (если есть) выравнивание. Пример: «Переведи на французский: …». Zero-shot прост, но уязвим к неоднозначности формата и критериев качества.

Аналогия: вы просите специалиста решить задачу, не показав ни одного образца отчёта — он может ответить верно по сути, но «не так, как принято у вас».

Few-shot prompting

В промпт включают k пар «вход → выход» (shots), задающих желаемый формат и стиль. Если x — целевой запрос, а (x_1,y_1),\ldots,(x_k,y_k) — демонстрации, промпт строится как конкатенация:

P = x_1\,\|\,y_1\,\|\,\cdots\,\|\,x_k\,\|\,y_k\,\|\,x,

и модель максимизирует p(y\mid P). Эмпирически важен не только что показано, но и порядок, разнообразие и близость примеров к запросу (retrieval of demonstrations).

Ловушка: плохо подобранные few-shot примеры могут ухудшить результат сильнее, чем zero-shot — модель копирует систематическую ошибку демонстраций.

Chain-of-Thought (CoT)

CoT побуждает модель генерировать промежуточные шаги рассуждения перед финальным ответом. Классический триггер — фраза «Давай думать шаг за шагом» (Let's think step by step) в zero-shot CoT; в few-shot CoT демонстрации сами содержат цепочки рассуждений.

Формально ответ можно мыслить как:

y^* = \arg\max_y\, p(y \mid x,\, c),

где c — цепочка рассуждений. CoT особенно полезен на задачах, требующих многошаговой декомпозиции (математика, логика, планирование), но увеличивает расход токенов и может «убедительно» обосновывать неверный итог.

Self-consistency

Модель несколько раз генерирует цепочки рассуждений при температуре T>0; финальный ответ выбирается большинством голосов (majority voting) среди извлечённых ответов. Идея: разные траектории рассуждения сходятся к верному ответу чаще, чем к одному и тому же ошибочному.

Цена — N-кратный инференс. Метод хорошо сочетается с CoT на закрытых задачах с однозначным ответом и хуже работает там, где «правильный» ответ субъективен.

Tree of Thoughts (ToT)

Расширение CoT: вместо одной линейной цепочки строится дерево кандидатных шагов. На каждом узле модель (или эвристика) оценивает перспективность ветки; далее применяют поиск (BFS/DFS, beam search)[1]. ToT ближе к осознанному планированию, чем «однопроходное» мышление, но дорог по compute и требует аккуратной оценки узлов.

ReAct

ReAct (Reasoning + Acting) чередует шаги «мысль → действие → наблюдение»[1]. Модель не только рассуждает, но и вызывает инструменты (поиск, калькулятор, API, код). Это основа многих агентных систем поверх трансформерных LLM.

Связь с механизмом внимания: инструменты расширяют «контекст» фактами извне, а attention внутри модели распределяет вес между инструкцией, историей и результатами действий.

Системные промпты и роли

Современные чат-модели обычно различают роли сообщений:

  • system — политика, роль, стиль, запреты, формат (часто скрыт от конечного пользователя);
  • user — запрос пользователя;
  • assistant — ответ модели;
  • иногда tool / function — результат вызова инструмента.

Системный промпт задаёт «конституцию» сессии: кто модель, что она умеет, как обрабатывать неоднозначность, когда отказывать. На практике системный промпт — главный рычаг продуктовой безопасности и бренда ассистента, но он не абсолютен: возможны обходы (jailbreak) и конфликты с user-сообщением.

Хороший системный промпт конкретен (критерии, примеры допустимого/недопустимого), измерим (что считать успехом) и не перегружен противоречивыми правилами. Плохой — длинный список запретов без приоритетов, из-за чего модель либо игнорирует часть инструкций, либо впадает в over-refusal.

Продвинутые методы

Prompt chaining

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

Retrieval-Augmented Generation (RAG)

RAG динамически подмешивает в промпт фрагменты документов, найденные по запросу. Типичный пайплайн: запрос → эмбеддинг → поиск ближайших чанков → сборка контекста → генерация. RAG снижает галлюцинации по фактам из корпоративной базы и даёт актуальность без переобучения модели[1].

Промпт-инжиниринг в RAG критичен на этапе сборки: как маркировать источники, что делать при пустом retrieval, как запретить выдумывать факты вне контекста. Ошибка retrieval нельзя «заговорить» красивым промптом — нужна диагностика индекса и метрик retrieval/generation по отдельности.

Автоматический промпт-инжиниринг (APE) и DSPy

APE (Automatic Prompt Engineer) использует саму LLM для предложения и отбора кандидатных инструкций по метрике на валидации[1]. Формально ищут

p^* = \arg\max_{p \in \mathcal{P}}\, \mathbb{E}_{(x,y)}\!\left[\mathrm{score}\big(y,\, f_p(x)\big)\right],

где f_p — модель с промптом p, \mathcal{P} — пространство кандидатов.

DSPy предлагает декларативный подход: программа описывает модули (retrieve, reason, answer), а оптимизатор подбирает промпты/демонстрации под метрику. Это сдвиг от «ручного искусства формулировок» к инженерии с тестами и регрессиями.

Soft prompting и prefix-tuning

Вместо дискретного текста оптимизируют непрерывные префиксы в пространстве встраиваний (prompt tuning / prefix-tuning). Это мост между промпт-инжинирингом и параметрической адаптацией: «промпт» становится обучаемым тензором.

Prompt injection и защита

Prompt injection — атака, при которой недоверенный ввод (письмо, веб-страница, документ в RAG) пытается переопределить системные инструкции («игнорируй предыдущие правила…»). Различают прямую инъекцию (в user-сообщении) и косвенную (в retrieved-контенте).

Защиты: разделение доверенного/недоверенного контекста, явная разметка источников, фильтрация, отдельная политика для tool-calling, минимизация полномочий агента. Полной гарантии нет: это открытая область безопасности LLM.

Режимы отказа и когда промпт бесполезен

Промпт-инжиниринг не заменяет недостающие знания, инструменты и выравнивание. Типичные случаи, когда «лучший промпт» почти не помогает:

  • факт отсутствует в параметрах и в retrieved-контексте — модель будет галлюцинировать или отказываться;
  • нужна гарантированная структура/схема — надёжнее constrained decoding / JSON-schema / грамматика, а не «пожалуйста, верни JSON»;
  • задача требует свежих данных или точных вычислений — нужны инструменты (ReAct), а не более витиеватая инструкция;
  • конфликт целей (полезность vs безопасность) заложен в RLHF/политике — промпт лишь частично смягчает поведение;
  • длинный шумный контекст: attention «размазывается», mid-context instructions теряются (lost in the middle).

Связь с alignment: промпт — поверхностное управление; RLHF и конституциональные методы задают базовые предпочтения. Если политика модели противоречит запросу, борьба промптом — признак необходимости продуктового решения (инструменты, дообучение, явные отказы), а не бесконечной полировки формулировок.

Смежные генеративные парадигмы (например, диффузионные модели изображений и текста) также управляются текстовыми условиями, но пространство «промпта» там иное: чаще речь о conditioning и guidance, чем о ролях system/user.

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

Оценивают не «красоту промпта», а систему «промпт + модель + (опционально) retrieval/tools»:

  • точность / Exact Match / F1 на закрытых бенчмарках (MMLU, GSM8K, HumanEval и доменные наборы);
  • LLM-as-a-judge и человеческая оценка полезности/безопасности (с оговоркой о предвзятости судьи);
  • консистентность (self-consistency rate, стабильность формата);
  • стоимость: число входных/выходных токенов, число вызовов при ToT/self-consistency;
  • латентность: TTFT (time to first token), end-to-end latency;
  • для RAG — Recall@k / nDCG retrieval и groundedness генерации.

Практическое правило: фиксируйте eval-набор до творческой правки промпта, иначе легко подогнать формулировку под любимые примеры (prompt overfitting).

Связь с дообучением и выравниванием

| Подход | Что меняется | Когда уместен | |---|---|---| | Промпт-инжиниринг | только вход | быстрые итерации, разные задачи на одной модели | | Soft prompt / adapters (LoRA) | малая доля параметров | стабильный доменный стиль при ограниченном compute | | SFT / RLHF / DPO | веса политики | устойчивое следование инструкциям, безопасность, тон бренда |

Промпт и RLHF дополняют друг друга: RLHF учит модель хотеть быть полезной и безопасной; промпт уточняет конкретную задачу сессии. Векторные представления промптов и документов связывают дисциплину с нейросетевым встраиванием в RAG и soft prompting.

Инструменты и фреймворки

  • LangChain / LlamaIndex — цепочки промптов, агенты, RAG;
  • DSPy — оптимизация программ и промптов под метрики;
  • PromptFlow (Azure), OpenAI Evals, самописные eval-харнессы;
  • шаблонизаторы промптов (Jinja и аналоги) для версионирования и A/B-тестов.

Применения

  • обработка естественного языка: суммаризация, перевод, классификация, извлечение информации;
  • генерация и объяснение кода;
  • корпоративные ассистенты на RAG;
  • агенты с инструментами (ReAct);
  • творческая генерация и редактура при жёстких бренд-гайдлайнах в system prompt;
  • управление мультимодальными и генеративными пайплайнами, включая текстовые условия для диффузионных моделей.

См. также

Примечания

Литература