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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Создание статьи о промпт-инжиниринге)
(Исправлена таблица на вики-разметку wikitable)
 
(3 промежуточные версии не показаны)
Строка 1: Строка 1:
-
{{well|Статья написана с использованием LLM '''Claude Sonnet 4''' и проверена участником [[Участник:Emil Petrov|Emil Petrov]] 15:17, 16 июня 2026 (MSD)
+
{{well|Статья написана с использованием LLM '''Claude Sonnet 4''' и проверена участником [[Участник:Emil Petrov|Emil Petrov]] 20:15, 14 июля 2026 (MSD)
Промпт приводится полностью в [[Обсуждение:Промпт-инжиниринг]]
Промпт приводится полностью в [[Обсуждение:Промпт-инжиниринг]]
}}
}}
{{TOCright}}
{{TOCright}}
-
'''Про́мпт-инжини́ринг''' (англ. prompt engineering) — дисциплина, изучающая методы составления текстовых инструкций (промптов) для управления поведением [[Большая языковая модель|больших языковых моделей]] и других генеративных систем искусственного интеллекта с целью получения точных, релевантных и полезных ответов<ref>{{статья|автор=Sahoo P. et al.|заглавие=A Systematic Survey of Prompt Engineering in Large Language Models: Techniques and Applications|издание=arXiv|год=2024|volume=2402.07927}}</ref>. В отличие от традиционного программирования, промпт-инжиниринг не требует знания языков программирования взаимодействие с моделью осуществляется на естественном языке.
+
 
 +
'''Про́мпт-инжини́ринг''' (англ. ''prompt engineering'') — дисциплина и практика составления текстовых инструкций ('''промптов'''), управляющих поведением [[Большая языковая модель|больших языковых моделей]] (LLM) и других генеративных систем искусственного интеллекта с целью получения точных, релевантных и полезных ответов<ref name="sahoo2024">{{статья |автор=Sahoo P., Singh A. K., Saha S., Jain V., Mondal S., Chadha A. |заглавие=A Systematic Survey of Prompt Engineering in Large Language Models: Techniques and Applications |издание=arXiv |год=2024 |volume=2402.07927 |ссылка=https://arxiv.org/abs/2402.07927}}</ref>. В отличие от классического программирования, где поведение задаётся кодом и обновлением параметров, промпт-инжиниринг действует на уровне ''входа'': формулировка запроса, примеры, роль и ограничения включаются в контекстное окно модели и меняют распределение генерируемых токенов без изменения весов.
 +
 
 +
Наглядно: LLM — это чрезвычайно начитанный, но «безвольный» собеседник. Промпт — не магическая заклинательная формула, а ''спецификация задачи'': что считать успехом, в каком формате отвечать, какие шаги допустимы и чего нельзя делать. Хороший промпт снижает неоднозначность; плохой провоцирует галлюцинации, уход от темы или избыточную осторожность.
== История ==
== История ==
-
Понятие «промпт» появилось вместе с первыми языковыми моделями, работающими по принципу дополнения текста (text completion). GPT-2 (2019) и GPT-3 (2020) от OpenAI показали, что формулировка запроса существенно влияет на качество ответа. С выходом ChatGPT в 2022 году промпт-инжиниринг оформился в самостоятельную практическую дисциплину: появились руководства, исследовательские работы и специализированные курсы.
+
Понятие «промпт» восходит к режиму дополнения текста (''text completion'') в ранних языковых моделях. Уже GPT-2 (2019) чувствительно реагировала на формулировку начала; GPT-3 (2020) сделала '''few-shot learning''' массовым явлением: несколько демонстраций в контексте резко улучшали качество без градиентного обновления<ref name="brown2020">{{статья |автор=Brown T. B. et al. |заглавие=Language Models are Few-Shot Learners |издание=Advances in Neural Information Processing Systems |год=2020 |том=33 |страницы=1877–1901 |ссылка=https://arxiv.org/abs/2005.14165}}</ref>.
Ключевые вехи:
Ключевые вехи:
-
* 2020 — «few-shot learning» в GPT-3: демонстрация того, что несколько примеров в промпте резко улучшают качество<ref>{{статья|автор=Brown T. B. et al.|заглавие=Language Models are Few-Shot Learners|издание=NeurIPS|год=2020}}</ref>;
+
* '''2020''' few-shot / in-context learning в GPT-3: демонстрации в промпте задают формат и семантику задачи;
-
* 2022 — «chain-of-thought prompting»: пошаговые рассуждения в промпте улучшают решение математических задач<ref>{{статья|автор=Wei J. et al.|заглавие=Chain-of-Thought Prompting Elicits Reasoning in Large Language Models|издание=NeurIPS|год=2022}}</ref>;
+
* '''2022''' ''chain-of-thought'' (CoT): явные промежуточные рассуждения улучшают решение арифметических и логических задач<ref name="wei2022">{{статья |автор=Wei J. et al. |заглавие=Chain-of-Thought Prompting Elicits Reasoning in Large Language Models |издание=Advances in Neural Information Processing Systems |год=2022 |том=35 |ссылка=https://arxiv.org/abs/2201.11903}}</ref>;
-
* 2023 — выход руководства DAIR.AI «Prompt Engineering Guide»;
+
* '''2022–2023''' — InstructGPT и ChatGPT: модели, выровненные через [[Обучение с подкреплением из обратной связи человека (RLHF)|RLHF]], стали ''следовать инструкциям'', из-за чего промпт-инжиниринг превратился из академического трюка в повседневную практику;
-
* 2024 интеграция методов промпт-инжиниринга в корпоративные RAG-системы.
+
* '''2023''' — руководства DAIR.AI «Prompt Engineering Guide», распространение ReAct, Tree of Thoughts, RAG-пайплайнов;
 +
* '''2024–2026''' автоматическая оптимизация промптов (APE, DSPy), системные промпты корпоративных ассистентов, защита от prompt injection.
 +
 
 +
Исторически промпт-инжиниринг и дообучение (fine-tuning / RLHF) шли параллельно: первое дёшево и быстро, второе закрепляет поведение в весах. На практике их комбинируют.
== Базовые техники ==
== Базовые техники ==
Строка 19: Строка 25:
=== Zero-shot prompting ===
=== Zero-shot prompting ===
-
Простейший вид: задача формулируется без примеров. Модель полагается исключительно на знания, полученные при предобучении.
+
Задача формулируется '''без примеров'''. Модель опирается на знания предобучения и (если есть) выравнивание. Пример: «Переведи на французский: …». Zero-shot прост, но уязвим к неоднозначности формата и критериев качества.
-
=== Few-shot prompting ===
+
Аналогия: вы просите специалиста решить задачу, не показав ни одного образца отчёта — он может ответить верно по сути, но «не так, как принято у вас».
-
В промпт включается несколько пар «вход→выход» (shots), которые задают желаемый формат ответа.
+
=== Few-shot prompting ===
-
Формально, если <tex>x</tex> — входной запрос, а <tex>(x_1,y_1),\ldots,(x_k,y_k)</tex> — демонстрационные примеры, то промпт строится как конкатенация:
+
В промпт включают <tex>k</tex> пар «вход → выход» (''shots''), задающих желаемый формат и стиль. Если <tex>x</tex> — целевой запрос, а <tex>(x_1,y_1),\ldots,(x_k,y_k)</tex> — демонстрации, промпт строится как конкатенация:
:<tex>P = x_1\,\|\,y_1\,\|\,\cdots\,\|\,x_k\,\|\,y_k\,\|\,x,</tex>
:<tex>P = x_1\,\|\,y_1\,\|\,\cdots\,\|\,x_k\,\|\,y_k\,\|\,x,</tex>
-
и модель максимизирует <tex>p(y\mid P)</tex>.
+
и модель максимизирует <tex>p(y\mid P)</tex>. Эмпирически важен не только ''что'' показано, но и порядок, разнообразие и близость примеров к запросу (retrieval of demonstrations).
 +
 
 +
Ловушка: плохо подобранные few-shot примеры могут ''ухудшить'' результат сильнее, чем zero-shot — модель копирует систематическую ошибку демонстраций.
=== Chain-of-Thought (CoT) ===
=== Chain-of-Thought (CoT) ===
-
Добавление фразы «Давай думать шаг за шагом» побуждает модель строить промежуточные рассуждения перед финальным ответом. В нотации:
+
CoT побуждает модель генерировать промежуточные шаги рассуждения перед финальным ответом. Классический триггер — фраза «Давай думать шаг за шагом» (''Let's think step by step'') в zero-shot CoT; в few-shot CoT демонстрации сами содержат цепочки рассуждений.
 +
 
 +
Формально ответ можно мыслить как:
-
:<tex>\text{Ответ} = \arg\max_y\, p\!\left(y \mid x,\, c\right),</tex>
+
:<tex>y^* = \arg\max_y\, p(y \mid x,\, c),</tex>
-
где <tex>c</tex> — цепочка рассуждений (chain of thought).
+
где <tex>c</tex> — цепочка рассуждений. CoT особенно полезен на задачах, требующих многошаговой декомпозиции (математика, логика, планирование), но увеличивает расход токенов и может «убедительно» обосновывать неверный итог.
=== Self-consistency ===
=== Self-consistency ===
-
Метод, при котором модель несколько раз генерирует цепочку рассуждений с температурой <tex>T>0</tex>, а финальный ответ выбирается большинством голосов (majority voting).
+
Модель несколько раз генерирует цепочки рассуждений при температуре <tex>T>0</tex>; финальный ответ выбирается большинством голосов (''majority voting'') среди извлечённых ответов. Идея: разные траектории рассуждения сходятся к верному ответу чаще, чем к одному и тому же ошибочному.
 +
 
 +
Цена — <tex>N</tex>-кратный инференс. Метод хорошо сочетается с CoT на закрытых задачах с однозначным ответом и хуже работает там, где «правильный» ответ субъективен.
=== Tree of Thoughts (ToT) ===
=== Tree of Thoughts (ToT) ===
-
Расширение CoT: вместо линейной цепочки рассуждений строится дерево возможных шагов. На каждом узле модель оценивает перспективность ветки, что позволяет реализовать поиск по пространству рассуждений.
+
Расширение CoT: вместо одной линейной цепочки строится '''дерево''' кандидатных шагов. На каждом узле модель (или эвристика) оценивает перспективность ветки; далее применяют поиск (BFS/DFS, beam search)<ref name="yao2023tot">{{статья |автор=Yao S., Yu D., Zhao J., Shafran I., Griffiths T. L., Cao Y., Narasimhan K. |заглавие=Tree of Thoughts: Deliberate Problem Solving with Large Language Models |издание=Advances in Neural Information Processing Systems |год=2023 |том=36 |ссылка=https://arxiv.org/abs/2305.10601}}</ref>. ToT ближе к осознанному планированию, чем «однопроходное» мышление, но дорог по compute и требует аккуратной оценки узлов.
=== ReAct ===
=== ReAct ===
-
Сочетает рассуждение (Reasoning) с действием (Acting): модель чередует шаги «мысль→действие→наблюдение». Используется в агентных системах, где модель вызывает инструменты (поиск, калькулятор, API).
+
'''ReAct''' (Reasoning + Acting) чередует шаги «мысль → действие → наблюдение»<ref name="yao2023react">{{статья |автор=Yao S., Zhao J., Yu D., Du N., Shafran I., Narasimhan K., Cao Y. |заглавие=ReAct: Synergizing Reasoning and Acting in Language Models |издание=International Conference on Learning Representations |год=2023 |ссылка=https://arxiv.org/abs/2210.03629}}</ref>. Модель не только рассуждает, но и вызывает инструменты (поиск, калькулятор, API, код). Это основа многих агентных систем поверх [[Трансформер (модель)|трансформерных]] LLM.
 +
 
 +
Связь с [[Механизм внимания|механизмом внимания]]: инструменты расширяют «контекст» фактами извне, а attention внутри модели распределяет вес между инструкцией, историей и результатами действий.
== Системные промпты и роли ==
== Системные промпты и роли ==
-
Большинство современных [[Трансформер (модель)|трансформерных]] моделей поддерживают три типа сообщений:
+
Современные чат-модели обычно различают роли сообщений:
-
* '''system''' — задаёт контекст, роль и ограничения модели;
+
* '''system''' — политика, роль, стиль, запреты, формат (часто скрыт от конечного пользователя);
* '''user''' — запрос пользователя;
* '''user''' — запрос пользователя;
-
* '''assistant''' — ответ модели.
+
* '''assistant''' — ответ модели;
 +
* иногда '''tool''' / '''function''' — результат вызова инструмента.
-
Системный промпт задаёт «личность» модели и правила взаимодействия.
+
Системный промпт задаёт «конституцию» сессии: кто модель, что она умеет, как обрабатывать неоднозначность, когда отказывать. На практике системный промпт — главный рычаг продуктовой безопасности и бренда ассистента, но он не абсолютен: возможны обходы (jailbreak) и конфликты с user-сообщением.
 +
 
 +
Хороший системный промпт конкретен (критерии, примеры допустимого/недопустимого), измерим (что считать успехом) и не перегружен противоречивыми правилами. Плохой — длинный список запретов без приоритетов, из-за чего модель либо игнорирует часть инструкций, либо впадает в over-refusal.
== Продвинутые методы ==
== Продвинутые методы ==
Строка 64: Строка 81:
=== Prompt chaining ===
=== Prompt chaining ===
-
Разбиение сложной задачи на несколько последовательных промптов, где выход одного служит входом следующего. Позволяет справляться с задачами, требующими многошагового планирования.
+
Сложная задача разбивается на последовательность промптов: выход одного — вход следующего (извлечение сущностей → проверка → генерация ответа). Chaining упрощает отладку и снижает нагрузку на одно длинное рассуждение, но накапливает ошибки на стыках этапов.
=== Retrieval-Augmented Generation (RAG) ===
=== Retrieval-Augmented Generation (RAG) ===
-
Комбинация поиска по базе знаний с генерацией: в промпт динамически включаются релевантные фрагменты документов, найденных по запросу пользователя. Позволяет снизить галлюцинации [[Большая языковая модель|LLM]].
+
RAG динамически подмешивает в промпт фрагменты документов, найденные по запросу. Типичный пайплайн: запрос → [[Нейросетевое встраивание|эмбеддинг]] → поиск ближайших чанков → сборка контекста → генерация. RAG снижает галлюцинации по фактам из корпоративной базы и даёт актуальность без переобучения модели<ref name="lewis2020">{{статья |автор=Lewis P. et al. |заглавие=Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks |издание=Advances in Neural Information Processing Systems |год=2020 |том=33 |ссылка=https://arxiv.org/abs/2005.11401}}</ref>.
-
=== Автоматический промпт-инжиниринг (APE) ===
+
Промпт-инжиниринг в RAG критичен на этапе ''сборки'': как маркировать источники, что делать при пустом retrieval, как запретить выдумывать факты вне контекста. Ошибка retrieval нельзя «заговорить» красивым промптом — нужна диагностика индекса и метрик retrieval/generation по отдельности.
-
Автоматическая оптимизация промпта с помощью самой языковой модели. Формально задача — найти
+
=== Автоматический промпт-инжиниринг (APE) и DSPy ===
-
:<tex>p^* = \arg\max_{p \in \mathcal{P}}\, \mathbb{E}_{(x,y)}\!\left[\text{score}(y, f_p(x))\right],</tex>
+
'''APE''' (Automatic Prompt Engineer) использует саму LLM для предложения и отбора кандидатных инструкций по метрике на валидации<ref name="zhou2023">{{статья |автор=Zhou Y. et al. |заглавие=Large Language Models Are Human-Level Prompt Engineers |издание=International Conference on Learning Representations |год=2023 |ссылка=https://arxiv.org/abs/2211.01910}}</ref>. Формально ищут
-
где <tex>f_p</tex> — модель с промптом <tex>p</tex>.
+
:<tex>p^* = \arg\max_{p \in \mathcal{P}}\, \mathbb{E}_{(x,y)}\!\left[\mathrm{score}\big(y,\, f_p(x)\big)\right],</tex>
 +
 
 +
где <tex>f_p</tex> — модель с промптом <tex>p</tex>, <tex>\mathcal{P}</tex> — пространство кандидатов.
 +
 
 +
'''DSPy''' предлагает декларативный подход: программа описывает модули (retrieve, reason, answer), а оптимизатор подбирает промпты/демонстрации под метрику. Это сдвиг от «ручного искусства формулировок» к инженерии с тестами и регрессиями.
 +
 
 +
=== Soft prompting и prefix-tuning ===
 +
 
 +
Вместо дискретного текста оптимизируют непрерывные префиксы в пространстве [[Нейросетевое встраивание|встраиваний]] (prompt tuning / prefix-tuning). Это мост между промпт-инжинирингом и параметрической адаптацией: «промпт» становится обучаемым тензором.
=== Prompt injection и защита ===
=== Prompt injection и защита ===
-
Атаки типа «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)|RLHF]] и конституциональные методы задают ''базовые'' предпочтения. Если политика модели противоречит запросу, борьба промптом — признак необходимости продуктового решения (инструменты, дообучение, явные отказы), а не бесконечной полировки формулировок.
 +
 
 +
Смежные генеративные парадигмы (например, [[Диффузионная модель|диффузионные]] модели изображений и текста) также управляются текстовыми условиями, но пространство «промпта» там иное: чаще речь о conditioning и guidance, чем о ролях system/user.
== Метрики и оценка ==
== Метрики и оценка ==
-
Качество промпта оценивается по:
+
Оценивают не «красоту промпта», а систему «промпт + модель + (опционально) retrieval/tools»:
-
* точности ответа на задачах-бенчмарках (MMLU, GSM8K, HumanEval);
+
* '''точность / Exact Match / F1''' на закрытых бенчмарках (MMLU, GSM8K, HumanEval и доменные наборы);
-
* консистентности (self-consistency rate);
+
* '''LLM-as-a-judge''' и человеческая оценка полезности/безопасности (с оговоркой о предвзятости судьи);
-
* стоимости токенов;
+
* '''консистентность''' (self-consistency rate, стабильность формата);
-
* латентности (время до первого токена, TTFT).
+
* '''стоимость''': число входных/выходных токенов, число вызовов при ToT/self-consistency;
 +
* '''латентность''': TTFT (time to first token), end-to-end latency;
 +
* для RAG — Recall@k / nDCG retrieval и groundedness генерации.
 +
 
 +
Практическое правило: фиксируйте eval-набор ''до'' творческой правки промпта, иначе легко подогнать формулировку под любимые примеры (prompt overfitting).
 +
 
 +
== Связь с дообучением и выравниванием ==
-
== Связь с дообучением ==
+
{| class="wikitable"
 +
|-
 +
! Подход !! Что меняется !! Когда уместен
 +
|-
 +
| Промпт-инжиниринг || только вход || быстрые итерации, разные задачи на одной модели
 +
|-
 +
| Soft prompt / adapters (LoRA) || малая доля параметров || стабильный доменный стиль при ограниченном compute
 +
|-
 +
| SFT / [[Обучение с подкреплением из обратной связи человека (RLHF)|RLHF]] / DPO || веса политики || устойчивое следование инструкциям, безопасность, тон бренда
 +
|}
-
Промпт-инжиниринг и [[Обучение с подкреплением из обратной связи человека (RLHF)|RLHF-дообучение]] дополняют друг друга: дообучение фиксирует желаемое поведение модели в её весах, тогда как промпт управляет поведением без изменения весов. [[Нейросетевое встраивание|Векторные представления]] (embeddings) промптов используются в «soft prompting» — обучаемых непрерывных префиксах, оптимизируемых градиентным спуском.
+
Промпт и RLHF дополняют друг друга: RLHF учит модель ''хотеть'' быть полезной и безопасной; промпт уточняет ''конкретную'' задачу сессии. Векторные представления промптов и документов связывают дисциплину с [[Нейросетевое встраивание|нейросетевым встраиванием]] в RAG и soft prompting.
== Инструменты и фреймворки ==
== Инструменты и фреймворки ==
-
* '''LangChain''' — популярная библиотека для создания цепочек промптов и RAG-пайплайнов;
+
* '''LangChain''' / '''LlamaIndex''' — цепочки промптов, агенты, RAG;
-
* '''LlamaIndex''' — специализирован на индексировании и поиске по документам;
+
* '''DSPy''' — оптимизация программ и промптов под метрики;
-
* '''DSPy''' — декларативный подход к оптимизации промптов;
+
* '''PromptFlow''' (Azure), OpenAI Evals, самописные eval-харнессы;
-
* '''PromptFlow''' — инструмент Microsoft для промпт-инжиниринга в Azure.
+
* шаблонизаторы промптов (Jinja и аналоги) для версионирования и A/B-тестов.
== Применения ==
== Применения ==
-
Промпт-инжиниринг применяется в широком спектре задач:
+
* [[Обработка естественного языка|обработка естественного языка]]: суммаризация, перевод, классификация, извлечение информации;
-
* [[Обработка естественного языка|обработка текстов]] (суммаризация, перевод, классификация);
+
* генерация и объяснение кода;
-
* генерация кода и отладка;
+
* корпоративные ассистенты на RAG;
-
* создание контента и творческое письмо;
+
* агенты с инструментами (ReAct);
-
* агентные системы с инструментами;
+
* творческая генерация и редактура при жёстких бренд-гайдлайнах в system prompt;
-
* корпоративные чат-боты на основе RAG.
+
* управление мультимодальными и генеративными пайплайнами, включая текстовые условия для [[Диффузионная модель|диффузионных моделей]].
== См. также ==
== См. также ==
-
* [[Трансформер (модель)]]
 
* [[Большая языковая модель]]
* [[Большая языковая модель]]
 +
* [[Трансформер (модель)]]
* [[Механизм внимания]]
* [[Механизм внимания]]
* [[Нейросетевое встраивание]]
* [[Нейросетевое встраивание]]
* [[Обучение с подкреплением из обратной связи человека (RLHF)]]
* [[Обучение с подкреплением из обратной связи человека (RLHF)]]
 +
* [[Диффузионная модель]]
== Примечания ==
== Примечания ==
Строка 124: Строка 180:
== Литература ==
== Литература ==
-
* {{статья|автор=Brown T. B. et al.|заглавие=Language Models are Few-Shot Learners|издание=Advances in Neural Information Processing Systems|год=2020|том=33|страницы=1877–1901}}
+
* {{статья |автор=Brown T. B. et al. |заглавие=Language Models are Few-Shot Learners |издание=Advances in Neural Information Processing Systems |год=2020 |том=33 |страницы=1877–1901 |ссылка=https://arxiv.org/abs/2005.14165}}
-
* {{статья|автор=Wei J. et al.|заглавие=Chain-of-Thought Prompting Elicits Reasoning in Large Language Models|издание=NeurIPS|год=2022}}
+
* {{статья |автор=Wei J. et al. |заглавие=Chain-of-Thought Prompting Elicits Reasoning in Large Language Models |издание=Advances in Neural Information Processing Systems |год=2022 |том=35 |ссылка=https://arxiv.org/abs/2201.11903}}
-
* {{статья|автор=Yao S. et al.|заглавие=ReAct: Synergizing Reasoning and Acting in Language Models|издание=ICLR|год=2023}}
+
* {{статья |автор=Yao S. et al. |заглавие=ReAct: Synergizing Reasoning and Acting in Language Models |издание=International Conference on Learning Representations |год=2023 |ссылка=https://arxiv.org/abs/2210.03629}}
-
* {{статья|автор=Zhou D. et al.|заглавие=Large Language Models Are Human-Level Prompt Engineers|издание=ICLR|год=2023}}
+
* {{статья |автор=Yao S. et al. |заглавие=Tree of Thoughts: Deliberate Problem Solving with Large Language Models |издание=Advances in Neural Information Processing Systems |год=2023 |том=36 |ссылка=https://arxiv.org/abs/2305.10601}}
-
* {{статья|автор=Sahoo P. et al.|заглавие=A Systematic Survey of Prompt Engineering in Large Language Models|издание=arXiv|год=2024|volume=2402.07927}}
+
* {{статья |автор=Zhou Y. et al. |заглавие=Large Language Models Are Human-Level Prompt Engineers |издание=International Conference on Learning Representations |год=2023 |ссылка=https://arxiv.org/abs/2211.01910}}
-
* {{книга|автор=Liu P. et al.|заглавие=Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in NLP|издание=ACM Computing Surveys|год=2023|том=55|страницы=1–35}}
+
* {{статья |автор=Lewis P. et al. |заглавие=Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks |издание=Advances in Neural Information Processing Systems |год=2020 |том=33 |ссылка=https://arxiv.org/abs/2005.11401}}
 +
* {{статья |автор=Sahoo P. et al. |заглавие=A Systematic Survey of Prompt Engineering in Large Language Models: Techniques and Applications |издание=arXiv |год=2024 |volume=2402.07927 |ссылка=https://arxiv.org/abs/2402.07927}}
 +
* {{книга |автор=Liu P., Yuan W., Fu J., Jiang Z., Hayashi H., Neubig G. |заглавие=Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in NLP |издание=ACM Computing Surveys |год=2023 |том=55 |номер=9 |страницы=1–35}}
[[Категория:Машинное обучение]]
[[Категория:Машинное обучение]]
-
[[Категория:Обработка ествественного языка]]
+
[[Категория:Обработка естественного языка]]
[[Категория:Искусственный интеллект]]
[[Категория:Искусственный интеллект]]

Текущая версия

Статья написана с использованием LLM Claude Sonnet 4 и проверена участником Emil Petrov 20:15, 14 июля 2026 (MSD)

Промпт приводится полностью в Обсуждение:Промпт-инжиниринг


Содержание

Про́мпт-инжини́ринг (англ. 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;
  • управление мультимодальными и генеративными пайплайнами, включая текстовые условия для диффузионных моделей.

См. также

Примечания

Литература

Личные инструменты