Как работает промпт-инжиниринг
Из-за того, как обучаются модели OpenAI, существуют определённые форматы промптов, которые работают особенно хорошо и приводят к более полезным результатам.
Официальное руководство OpenAI по промпт-инжинирингу обычно — лучшее место, чтобы начать и получить советы по составлению промптов.
Ниже мы приводим несколько форматов промптов, которые, на наш взгляд, хорошо работают, но не стесняйтесь пробовать разные варианты — возможно, они лучше подойдут под вашу задачу.
Практические правила и примеры
Примечание: «{text input here}» — это плейсхолдер для реального текста/контекста
1. Используйте самую новую модель
Для лучших результатов мы обычно рекомендуем использовать самые новые и наиболее мощные модели. Новые модели, как правило, проще «настраивать промптом».
Примечание: есть отличия, которые важно учитывать при составлении промпта для reasoning-модели по сравнению с GPT-моделью. Подробнее — здесь.
2. Размещайте инструкции в начале промпта и используйте ### или """ для разделения инструкции и контекста
Менее эффективно ❌:
Суммируй текст ниже в виде маркированного списка самых важных пунктов.
{text input here}Лучше ✅:
Суммируй текст ниже в виде маркированного списка самых важных пунктов.
Текст: """
{text input here}
"""3. Будьте конкретны, описательны и максимально подробно задавайте желаемый контекст, результат, длину, формат, стиль и т. д.
Будьте конкретны насчёт контекста, результата, длины, формата, стиля и т. д.
Менее эффективно ❌:
Напиши стихотворение об OpenAI. Лучше ✅:
Напиши короткое вдохновляющее стихотворение об OpenAI, сосредоточившись на недавнем запуске продукта DALL-E (DALL-E — это ML-модель преобразования текста в изображение), в стиле {famous poet}4. Задавайте желаемый формат вывода через примеры
Менее эффективно ❌:
Извлеки сущности, упомянутые в тексте ниже. Извлеки следующие 4 типа сущностей: названия компаний, имена людей, конкретные темы и мотивы.
Текст: {text}Показывайте, а не только рассказывайте — модели лучше реагируют, когда им демонстрируют конкретные требования к формату. Это также упрощает надёжный программный разбор нескольких результатов.
Лучше ✅:
Извлеки важные сущности, упомянутые в тексте ниже. Сначала извлеки все названия компаний, затем — все имена людей, затем — конкретные темы, подходящие по содержанию, и в конце — общие, охватывающие всё темы
Желаемый формат:
Company names: <comma_separated_list_of_company_names>
People names: -||-
Specific topics: -||-
General themes: -||-
Текст: {text}5. Начните с zero-shot, затем few-shot; если ни то ни другое не сработало — делайте fine-tuning
✅ Zero-shot
Извлеки ключевые слова из текста ниже.
Текст: {text}
Ключевые слова:✅ Few-shot — дайте пару примеров
Извлеки ключевые слова из соответствующих текстов ниже.
Текст 1: Stripe предоставляет API, которые веб-разработчики могут использовать для интеграции обработки платежей в свои веб-сайты и мобильные приложения.
Ключевые слова 1: Stripe, обработка платежей, API, веб-разработчики, веб-сайты, мобильные приложения
##
Текст 2: OpenAI обучила передовые языковые модели, которые очень хорошо понимают и генерируют текст. Наш API предоставляет доступ к этим моделям и может использоваться для решения практически любой задачи, связанной с обработкой языка.
Ключевые слова 2: OpenAI, языковые модели, обработка текста, API.
##
Текст 3: {text}
Ключевые слова 3:✅Fine-tuning: лучшие практики по fine-tuning — здесь.
6. Сокращайте «водянистые» и неточные формулировки
Менее эффективно ❌:
Описание этого продукта должно быть довольно коротким — всего несколько предложений, и не намного больше.Лучше ✅:
Используй абзац из 3–5 предложений, чтобы описать этот продукт.7. Вместо того чтобы говорить только, чего не делать, скажите, что делать вместо этого
Менее эффективно ❌:
Далее приведён диалог между Агентом и Клиентом. НЕ СПРАШИВАЙТЕ ИМЯ ПОЛЬЗОВАТЕЛЯ ИЛИ ПАРОЛЬ. НЕ ПОВТОРЯЙТЕ.
Клиент: Я не могу войти в свой аккаунт.
Агент:Лучше ✅:
Далее приведён диалог между Агентом и Клиентом. Агент попытается диагностировать проблему и предложить решение, при этом воздерживаясь от любых вопросов, связанных с PII. Вместо запроса PII, например имени пользователя или пароля, направьте пользователя в справочную статью www.samplewebsite.com/help/faq
Клиент: Я не могу войти в свой аккаунт.
Агент:8. Для генерации кода — используйте «наводящие слова», чтобы направить модель к нужному паттерну
Менее эффективно ❌:
# Напиши простую функцию на Python, которая
# 1. Попросит меня ввести число в милях
# 2. Преобразует мили в километрыВ примере кода ниже добавление «import» подсказывает модели, что стоит начать писать на Python. (Аналогично «SELECT» — хороший намёк на начало SQL-запроса.)
Лучше ✅:
# Напиши простую функцию на Python, которая
# 1. Попросит меня ввести число в милях
# 2. Преобразует мили в километры
import9. Используйте функцию Generate Anything
Разработчики могут использовать функцию «Generate Anything», чтобы описать задачу или ожидаемый вывод на естественном языке и получить подходящий промпт.
Подробнее об использовании функции «Generate Anything».
Параметры
Как правило, мы видим, что model и temperature — самые часто используемые параметры для изменения результата модели.
model- Более производительные модели, как правило, дороже и могут иметь более высокую задержку.temperature- Показатель того, как часто модель выбирает менее вероятный токен. Чем вышеtemperature, тем более случайным (и обычно более креативным) будет результат. Однако это не то же самое, что «правдивость». Для большинства фактических сценариев — например, извлечения данных и правдивых вопросов-ответов — лучше всего подходитtemperature= 0.max_completion_tokens(максимальная длина) - Не управляет длиной результата, а задаёт жёсткий верхний предел генерации токенов. В идеале вы не будете часто упираться в этот лимит, поскольку модель остановится либо когда решит, что закончила, либо когда дойдёт до заданной вами стоп-последовательности.stop(стоп-последовательности) - Набор символов (токенов), генерация которых приводит к остановке генерации текста.
Описание других параметров смотрите в справочнике API.
