Как работает промпт-инженерия
Из-за того, как обучаются модели OpenAI, существуют определенные форматы промптов, которые работают особенно хорошо и приводят к более полезным результатам модели. Официальное руководство OpenAI по промпт-инженерии обычно является лучшим местом, с которого стоит начать знакомство с советами по созданию промптов.
Ниже мы приводим несколько форматов промптов, которые, по нашему опыту, хорошо работают, но вы можете экспериментировать с другими форматами, которые могут лучше подходить для вашей задачи.
Практические правила и примеры
Примечание: «{text input here}» — это заполнитель для фактического текста/контекста
1. Используйте последнюю модель
Для достижения наилучших результатов мы обычно рекомендуем использовать самые новые и наиболее функциональные модели. Для более новых моделей обычно проще создавать промпты.
Примечание: При составлении промптов для модели рассуждений и для модели GPT следует учитывать некоторые различия. Подробнее здесь.
2. Размещайте инструкции в начале промпта и используйте ### или """ для разделения инструкции и контекста
Менее эффективно ❌:
Кратко изложите текст ниже в виде маркированного списка самых важных пунктов.
{text input here}Лучше ✅:
Кратко изложите текст ниже в виде маркированного списка самых важных пунктов.
Текст: """
{text input here}
"""3. Будьте как можно более конкретны, описательны и подробны в отношении желаемого контекста, результата, длины, формата, стиля и т. д.
Будьте конкретны в отношении контекста, результата, длины, формата, стиля и т. д.
Менее эффективно ❌:
Напишите стихотворение об OpenAI. Лучше ✅:
Напишите короткое вдохновляющее стихотворение об OpenAI, сосредоточившись на недавнем запуске продукта DALL-E (DALL-E — ML-модель преобразования текста в изображение) в стиле {famous poet}4. Формулируйте желаемый формат вывода с помощью примеров
Менее эффективно ❌:
Извлеките сущности, упомянутые в тексте ниже. Извлеките следующие 4 типа сущностей: названия компаний, имена людей, конкретные темы и общие темы.
Текст: {text}Показывайте и объясняйте — модели лучше реагируют, когда им показывают конкретные требования к формату. Это также упрощает надежный программный разбор нескольких выходных результатов.
Лучше ✅:
Извлеките важные сущности, упомянутые в тексте ниже. Сначала извлеките все названия компаний, затем все имена людей, затем конкретные темы, соответствующие содержанию, и наконец общие сквозные темы
Желаемый формат:
Названия компаний: <comma_separated_list_of_company_names>
Имена людей: -||-
Конкретные темы: -||-
Общие темы: -||-
Текст: {text}5. Начните с zero-shot, затем few-shot; если ни один вариант не сработал, выполните дообучение
✅ Zero-shot
Извлеките ключевые слова из текста ниже.
Текст: {text}
Ключевые слова:✅ Few-shot — предоставьте пару примеров
Извлеките ключевые слова из соответствующих текстов ниже.
Текст 1: Stripe предоставляет API, которые веб-разработчики могут использовать для интеграции обработки платежей в свои сайты и мобильные приложения.
Ключевые слова 1: Stripe, обработка платежей, API, веб-разработчики, сайты, мобильные приложения
##
Текст 2: OpenAI обучила передовые языковые модели, которые очень хорошо понимают и генерируют текст. Наш API предоставляет доступ к этим моделям и может использоваться для решения практически любой задачи, связанной с обработкой языка.
Ключевые слова 2: OpenAI, языковые модели, обработка текста, API.
##
Текст 3: {text}
Ключевые слова 3:✅Дообучение: лучшие практики дообучения смотрите здесь.
6. Сокращайте «пухлые» и неточные описания
Менее эффективно ❌:
Описание этого продукта должно быть довольно коротким, всего несколько предложений, и не намного длиннее.Лучше ✅:
Используйте абзац из 3–5 предложений, чтобы описать этот продукт.7. Вместо того чтобы говорить только о том, чего не делать, скажите, что делать вместо этого
Менее эффективно ❌:
Ниже приведен диалог между агентом и клиентом. НЕ ЗАПРАШИВАЙТЕ ИМЯ ПОЛЬЗОВАТЕЛЯ ИЛИ ПАРОЛЬ. НЕ ПОВТОРЯЙТЕ.
Клиент: Я не могу войти в свой аккаунт.
Агент:Лучше ✅:
Ниже приведен диалог между агентом и клиентом. Агент попытается диагностировать проблему и предложить решение, воздерживаясь от вопросов, связанных с персональными данными (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, тем более случайным (и обычно творческим) будет вывод. Однако это не то же самое, что «правдивость». Для большинства фактических сценариев, таких как извлечение данных и правдивые ответы на вопросы, лучше всего использоватьtemperature0.`max_completion_tokens` (максимальная длина) — Не управляет длиной вывода, а задает жесткое ограничение на генерацию токенов. В идеале вы не будете часто достигать этого лимита, поскольку модель остановится либо когда сочтет ответ завершенным, либо когда встретит заданную вами стоп-последовательность.
`stop` (стоп-последовательности) — Набор символов (токенов), при генерации которых создание текста остановится.
Описание других параметров см. в справочнике API.
