Гайд по улучшению промптов от создателей ChatGPT

Новогодние каникулы — прекрасное время для получения новых навыков, а составление промптов (запросов к ИИ) — именно такой.

OpenAI рассказала о том, как улучшить результаты запросов к нейросети, предоставив подробную инструкцию с массой примеров для новичков и опытных пользователей. Уж кто как не они знают в этом толк! А я перевела гайд для вас.

*** Пожалуйста, поставьте лайк моей публикации! ***

Создатели оговариваются, что некоторые из приведенных примеров работают только в GPT-4. Если вы обнаружите, что чат не справляется с задачей и вам доступна более мощная модель, стоит попробовать еще раз с более мощной моделью. В любом случае, это практический навык, который достигается только путем проб.

Вот шесть стратегий для достижения лучших результатов, от простых к сложным:

Стратегия 1. Предоставьте четкие инструкции

Чат не умеет читать ваши мысли. Если результат слишком длинный, попросите дать краткий ответ. Если ответ слишком простой, попросите написать на экспертном уровне. Если вам не нравится формат, продемонстрируйте тот формат, который вы хотели бы видеть.

Чем меньше модели придется догадываться, чего именно вы хотите, тем выше вероятность, что вы это получите.

Тактики:

  • Конкретизируйте запрос, чтобы получить более релевантные ответы

Плохо: Кто президент?

Хорошо: Кто был президентом Мексики в 2021 году и как часто проводятся выборы?

Плохо: напиши краткие итоги встречи.

Хорошо: Кратко изложи итоги встречи в одном абзаце. Затем укажи спикеров и их ключевые высказывания. Наконец, перечисли действия, предложенные докладчиками, если таковые имеются.

  • Попросите чат сыграть роль

ИНСТРУКЦИЯ: Когда я прошу помочь мне написать что-нибудь, вы отвечаете документом, в каждом абзаце которого содержится хотя бы одна шутка или игривый комментарий.

ЗАПРОС: Напиши благодарственное письмо моему поставщику стальных болтов за то, что он доставил товар вовремя и в кратчайшие сроки. Это позволило нам получить важный заказ.

  • Используйте разделители, чтобы четко обозначить отдельные части ввода

Разделители - тройные кавычки, теги XML, заголовки разделов и т. д., которые могут помочь разграничить разделы текста, которые будут обрабатываться по-разному.

Для простых задач использование разделителей может не повлиять на качество вывода. Однако чем сложнее задача, тем важнее обозначить детали. Не заставляйте модель угадывать, что вы от нее хотите.

ЗАПРОС: Обобщи текст, заключенный в тройные кавычки, с помощью хайку.

"""добавьте сюда текст"""

ЗАПРОС: тебе будет предоставлен автореферат диссертации и предложенное название для нее. Название диссертации должно давать читателю хорошее представление о теме диссертации, но также должно привлекать внимание. Если название не соответствует этим критериям, предложите 5 вариантов.

ЗАПРОС:

Аннотация: вставьте сюда аннотацию

Заголовок: вставьте сюда заголовок

  • Укажите шаги, необходимые для выполнения задачи

Некоторые задачи лучше описать как последовательность шагов. Четкое описание может облегчить модели их выполнение.

ИНСТРУКЦИЯ: используй следующие пошаговые инструкции, чтобы ответить на действия пользователя.

Шаг 1. Пользователь предоставит текст в тройных кавычках. Обобщи этот текст в одном предложении с префиксом «Резюме:».

Шаг 2. Переведи резюме из шага 1 на испанский язык с префиксом «Перевод:».

  • Приведите примеры

Предоставление общих инструкций обычно более эффективно, чем демонстрация всех вариантов задачи на примере. Но в некоторых случаях привести примеры может быть проще.

Например, если вы хотите, чтобы модель копировала определенный стиль ответа на запросы пользователей, который сложно описать. Этот прием называется “промпты в несколько заходов”

  • Укажите желаемую длину ответа

Вы можете попросить чат выдавать результат заданной длины в виде количества слов, предложений, абзацев, пунктов списка и т. д.

Однако обратите внимание, что указание не работает с высокой точностью, модель может более точно генерить результаты с определенным количеством абзацев или пунктов списка.

ИНСТРУКЦИЯ: Обобщи текст, заключенный в тройные кавычки, примерно в 50 слов.

"""вставьте сюда текст"""

Стратегия 2. Снабдите чат справочной информацией

Языковые модели могут уверенно придумывать ложные ответы, особенно когда их спрашивают об эзотерических темах или о цитатах и URL-адресах.

Точно так же, как шпаргалка может помочь учащемуся лучше сдать экзамен, справочный текст может помочь избежать выдумок в ответе.

Тактики:

  • Попросите модель использовать справочный текст в ответе

ИНСТРУКЦИЯ: Используй представленные статьи, разделенные тройными кавычками, чтобы ответить на вопросы. Если в статьях ответ не найден, напишите «Не удалось найти ответ».

ЗАПРОС: <вставьте статьи, каждая из которых заключена в тройные кавычки> Вопрос: <вставьте сюда вопрос>

  • Попросите модель использовать в ответе цитаты из справочного текста

Учитывайте, что чат имеет ограниченное контекстное окно, а потому нужен способ поиска информации, имеющей отношение к задаваемому вопросу. Вложения могут использоваться для эффективного поиска знаний.

Дополнительные сведения о том, как это реализовать, см. тактику «Поиск по внешним данным».

Стратегия 3. Разбейте сложную задачу на более простые подзадачи

Сложные задачи, как правило, имеют более высокий уровень ошибок, чем простые.

Тактики:

  • Используйте классификацию намерений, чтобы определить наиболее релевантные инструкции для запроса пользователя

Для задач, в которых для обработки различных случаев требуются разные инструкции, может быть полезно сначала классифицировать типы запросов и использовать эту классификацию для инструкций, чтобы каждый запрос содержал только те инструкции, которые необходимы для выполнения данного этапа задачи.

Это может привести к снижению частоты ошибок по сравнению с использованием одного запроса для выполнения всей задачи.

Это также может привести к снижению стоимости запроса, поскольку запуск более крупных подсказок обходится дороже.

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

ИНСТРУКЦИЯ

Тебе будут представлены запросы в службу поддержки клиентов, требующие устранения неполадок. Помоги пользователю:

- Попроси их проверить, подключены ли все кабели к роутер. Обрати внимание, что кабели со временем часто отходят.

- Если все кабели подключены, а проблема не устранена, спроси, какую модель роутера используется.

- Теперь ты расскажешь, как перезагрузить устройство:

-- Если номер модели — MTD-327J, посоветуй нажать красную кнопку и удерживать ее в течение 5 секунд, а затем подождать 5 минут, прежде чем проверить соединение.

-- Если номер модели — MTD-327S, посоветуй отключить и снова подключить, затем подождать 5 минут, прежде чем проверять соединение.

- Если проблема клиента не устранена после перезапуска устройства и ожидания 5 минут, подключите его к ИТ-поддержке, выведя {"Запрошена ИТ-поддержка"}.

- Если пользователь начинает задавать вопросы, не относящиеся к теме, подтверди, хочет ли он завершить текущий чат об устранении неполадок, и классифицируйте свой запрос по следующей схеме:

<вставьте сюда схему первичной/вторичной классификации сверху>

ЗАПРОС

Мне нужно, чтобы мой интернет снова заработал.

  • Для запросов, требующих длинных диалогов, суммируйте или фильтруйте предыдущий диалог

Поскольку чат имеет фиксированную длину контекста, диалог между пользователем и помощником не может продолжаться бесконечно.

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

Альтернативное решение — по запросу выбирать предыдущие части разговора См. тактику «Поиск по внешним данным».

  • Обобщайте длинные документы по частям и рекурсивно создавайте полное резюме

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

Чтобы резюмировать очень длинный документ, например книгу, можно использовать последовательность запросов для суммирования каждого раздела документа. Краткое изложение разделов можно объединять и суммировать, создавая краткое изложение сводных данных. Этот процесс может продолжаться до тех пор, пока не будет обобщен весь документ.

Если необходимо использовать информацию о предыдущих разделах, чтобы понять смысл последующих, может быть полезен еще один трюк: включить краткое изложение текста, который предшествует любому заданному моменту в книге, одновременно суммируя содержание текущего текста. Эффективность этой процедуры реферирования книг изучалась в предыдущих исследованиях OpenAI с использованием GPT-3.

Стратегия 4. Дайте чату время “на подумать”

Если вас попросить умножить 17 на 28, вы наверняка не сразу дадите ответ. Точно так же чат допускает больше ошибок в рассуждениях, пытаясь ответить сразу, вместо того, чтобы потратить время на выработку ответа. Запрос на «цепочку мыслей» перед ответом может помочь модели дать более качественный ответ.

Тактики:

  • Попросите чат порассуждать, прежде чем дать ответ

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

ИНСТРУКЦИЯ: Определи, правильно ли решение студента

ЗАПРОС

Постановка задачи: я строю солнечную электростанцию:

- Земля стоит 100 долларов за кв. метр.

- Я могу купить солнечные панели по цене 250 долларов за кв. метр.

- Я заключил контракт на техническое обслуживание, которое будет стоить мне фиксированную сумму в 100 тысяч долларов в год и плюс 10 долларов за кв. метр.

Какова общая стоимость первого года эксплуатации в зависимости от количества кв. метров?

Решение студента: Пусть x — размер установки в кв. метрах.

1. Стоимость земли: 100x

2. Стоимость солнечной панели: 250x.

3. Стоимость обслуживания: 100 000 + 100x.

Общая стоимость: 100x + 250x + 100 000 + 100x = 450x + 100 000.

ЧАТ

Решение студента правильное.

Но решение студента на самом деле неправильное! Мы можем заставить чат увидеть это, предложив сначала сгенерить собственное решение.

ИНСТРУКЦИЯ

Сначала найди свое решение задачи. Затем сравни свое решение с решением учащегося и оцени правильность решения учащегося. Не давай ответ пока не решишь задачу самостоятельно.

Задача: я строю солнечную электростанцию, и мне нужна помощь в расчете финансовых показателей.

- Земля стоит 100 долларов за кв. метр.

- Я могу купить солнечные панели по цене 250 долларов за кв. метр.

- Я заключил контракт на техническое обслуживание, которое будет стоить мне фиксированную сумму в 100 тысяч долларов в год и дополнительные 10 долларов за кв. метр.

Какова общая стоимость первого года эксплуатации в зависимости от количества кв. метров.

Решение студента: Пусть x — размер установки в кв.метрах.

1. Стоимость земли: 100x

2. Стоимость солнечной панели: 250x.

3. Стоимость обслуживания: 100 000 + 100x.

Общая стоимость: 100x + 250x + 100 000 + 100x = 450x + 100 000.

ЧАТ

Пусть x — размер установки в кв.метрах.

1. Стоимость земли: 100x

2. Стоимость солнечной панели: 250x.

3. Стоимость обслуживания: 100 000 + 10x.

Общая стоимость: 100x + 250x + 100 000 + 10x = 360x + 100 000.

Решение студента неверное. Он допустил ошибку при расчете стоимости обслуживания, применив 100x вместо 10x. Правильная общая стоимость первого года работы равна 360x + 100 000.

  • Используйте "внутренний монолог" или последовательность вопросов, чтобы выявить процесс рассуждения чата

Предыдущая тактика показывает, что иногда чату нужно подробно рассмотреть задачу, прежде чем ответить на конкретный вопрос. Однако в некоторых случаях процессом рассуждений нецелесообразно делиться с пользователем. Например, в репетиторских приложениях мы хотим побудить учащихся самостоятельно найти ответы, и процесс рассуждений может натолкнуть на ответ.

“Внутренний монолог” — это тактика, которую можно использовать, чтобы нивелировать этот аспект. Идея внутреннего монолога заключается в том, чтобы поручить чату представить этапы рассуждений, который упрощает их восприятие, в структурированном виде. Затем пользователю предоставляется результат только с частью рассуждений чата.

ИНСТРУКЦИЯ

Выполни следующие действия, чтобы ответить на вопросы пользователей.

Шаг 1. Сначала найди собственное решение задачи. Не полагайся на решение учащегося, поскольку оно может быть неправильным. Заключите всю свою работу на этом этапе в тройные кавычки (""").

Шаг 2. Сравни свое решение с решением учащегося и оцени, правильно решение учащегося. Заключите весь результат этапа в тройные кавычки (""").

Шаг 3. Если ученик допустил ошибку, определи, какую подсказку ты можешь дать ученику, не раскрывая ответа. Заключите весь результат этапа в тройные кавычки (""").

Шаг 4. Дай ученику подсказку из предыдущего шага (кроме тройных кавычек). Вместо написания «Шаг 4 — ...» напишите «Подсказка:».

ЗАПРОС

Постановка задачи: <вставьте формулировку проблемы>

Решение учащегося: <вставьте решение учащегося>

Как вариант - этого также можно достичь с помощью последовательности запросов, в которых результаты всех запросов, кроме последнего, скрыты от пользователя.

[последний этап рассуждений] Ты - репетитор по математике. Если ученик допустил ошибку, дай ему подсказку таким образом, чтобы не раскрыть ответ. Если ученик не допустил ошибки, просто предложите ему ободряющий комментарий.

ЗАПРОС

Задача: """<вставьте формулировку задачи>"""

Решение: """<вставьте решение, сгенерированное чатом>"""

Решение учащегося: """<вставьте решение учащегося>"""

Анализ: """<вставьте анализ, сгенерированный чатом на предыдущем этапе>"""

  • Спросите чат, не пропустил ли он что-нибудь на предыдущих шагах

Предположим, мы используем чат для поиска цитат из источника, имеющих отношение к конкретному вопросу. После каждого отрывка чат должен определить, следует ли ему начать писать следующий или остановиться.

Если исходный документ большой, модель часто останавливается слишком рано и не приводит все релевантные цитаты. В этом случае можно добиться лучшего результата, предложив чату найти любые фрагменты, которые он пропустил на предыдущих этапах.

ИНСТРУКЦИЯ

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

Убедись, что отрывки содержат весь соответствующий контекст, необходимый для их интерпретации. Другими словами, не извлекай небольшие фрагменты, в которых отсутствует важный контекст. Предоставьте вывод в формате JSON следующим образом:

[{"отрывок": "..."},

...

{"отрывок": "..."}]

ЗАПРОС

"""<вставьте сюда документ>"""

ЧАТ

[{"excerpt": "чат записывает здесь отрывок"},

...

{"excerpt": "чат пишет здесь еще один отрывок"}]

ЗАПРОС

Есть ли более релевантные отрывки? Старайся не повторять отрывки. Также убедись, что отрывки содержат весь контекст, необходимый для их интерпретации — другими словами, не извлекай небольшие фрагменты, в которых отсутствует важный контекст.

Стратегия 5. Используйте внешние инструменты

  • Поиск по внешним данным

Чат может использовать внешнюю информацию как часть входных данных. Это может помочь генерировать более полные и актуальные ответы. Например, если пользователь задает вопрос о конкретном фильме, полезно добавить информацию об актерах, режиссере и т. д.

См. тактику “Попросите модель использовать справочный текст в ответе” чтобы понять, как использовать поиск знаний для минимизации вероятности получения неверных фактов в ответах чата.

  • Выполнение кода для более точных вычислений или вызова внешних API

Нельзя полагаться на языковые модели для точного выполнения арифметических или длинных вычислений. Когда это необходимо, чату можно поручить написать и запустить код вместо выполнения собственных вычислений. Например, чату можно поручить поместить код для запуска в определенный формат, например тройной апостроф. После получения результата код можно извлечь и запустить.

Наконец, результат могут быть использован в качестве входных данных для последующего запроса.

ИНСТРУКЦИЯ

Ты можешь писать и выполнить код Python, заключив его в тройные кавычки, например: ```Здесь находится код```. Используй его для выполнения вычислений.

ЗАПРОС

Найдите все действительные корни следующего многочлена: 3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10.

ИНСТРУКЦИЯ

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

``` python

импортировать сообщение

message.write(to="Джон", message="Эй, хочешь встретиться после работы?")```

ВНИМАНИЕ: Выполнение кода модели небезопасно, и в любом приложении следует предпринять меры предосторожности: например, необходима изолированная среда выполнения кода.

Предоставьте чату доступ к определенным функциям

API Chat Completions позволяет передавать в запросах описания функций. Это позволит чату генерировать аргументы функций в соответствии с предоставленными инструкциями. Сгенерированные аргументы функции возвращаются API в формате JSON и могут использоваться для выполнения вызовов функций. А вывод в результате вызова функций затем может быть использован чатом в следующем запросе. Это рекомендуемый способ использования моделей OpenAI для вызова внешних функций. Подробнее см. раздел «Вызов функций» в руководстве по созданию текста и дополнительные примеры вызова функций в OpenAI Cookbook.

Стратегия 6. Оценивайте изменения постоянно

Иногда трудно определить, делает ли изменение (например, новая инструкция или новый дизайн) ваш результат лучше. Использование нескольких вариантов может подсказать, какой из них лучше. Но при небольших размерах выборки может быть трудно отличить истинное улучшение от случайной удачи. Возможно, это изменение повысит результат на одних ответах, но ухудшит качество на других.

Процедуры оценки полезны для оптимизации. Хорошие оценки:

  • Пример использования в реальной жизни
  • Содержит множество примеров
  • Легко автоматизировать или повторить

Оценка результатов может производиться машинами, людьми или совместно. Компьютеры например, могут автоматизировать оценку с использованием объективных критериев (например, вопросов с единственным правильным ответом). OpenAI Evals — это программная платформа с открытым исходным кодом, предоставляющая инструменты для создания автоматических оценок.

  • Оцените результаты модели со ссылкой на ответы «золотого стандарта»

Предположим, известно, что правильный ответ на вопрос должен ссылаться на определенный набор известных фактов.Мы можем использовать модельный запрос, чтобы подсчитать, сколько требуемых фактов включено в ответ.

Например, используя следующую инструкцию:

ИНСТРУКЦИЯ

Будет предоставлен текст в тройных кавычках, который должен быть ответом на вопрос. Проверь, содержатся ли в ответе следующие сведения:

- Нил Армстронг был первым человеком, ступившим на Луну.

- Дата, когда Нил Армстронг впервые ступил на Луну, — 21 июля 1969 года.

Для каждого высказывания выполни следующие действия:

1 – Переформулируй мысль.

2 – Приведи цитату, наиболее близкую к заданному вопросу.

3. Подумай, может ли кто-то, читающий цитату и не знающий темы, напрямую сделать вывод о ее сути. Прежде чем принять решение, объясни, почему или почему нет.

4 – Напиши «да», если ответ на вопрос 3 был «да», в противном случае напишите «нет».

Наконец, подсчитайте количество ответов «да». Укажите это количество как {"count": <вставьте количество здесь>}.

Вот пример ввода, где выполняются оба условия:

ИНСТРУКЦИЯ

<вставьте инструкцию, приведенную выше>

ЗАПРОС

"""Нил Армстронг известен тем, что был первым человеком, ступившим на Луну. Это историческое событие произошло 21 июля 1969 года во время миссии Аполлона-11."""

Есть множество вариантов оценки на основе стандарта. Например, можно отслеживать степень совпадения между ответом-вариантом и ответом по золотому стандарту, а также отслеживает, противоречит ли ответ-вариант какой-либо части ответа по золотому стандарту. Подробно описывать не буду, т.к. это узко специализированные задачи.

Полный гайд от OpenAI. Еще больше примеров промптов - тут.

Еще один способ потренироваться в создании промптов для изображений - игра от Google

Другие ресурсы по промптам от OpenAI

Расскажите, насколько полезны эти советы для вас? С какими запросами возникает больше всего трудностей?

Пожалуйста, поддержите меня, поставьте лайк или подпишитесь!

23
4 комментария

ChatGPT тупое говнище. Оно не понимает даже самые чёткие инструкции

Ответить

Инструкция: сократи текст на 50% или до …. Знаков — это не чёткая инструкция? А эта тварь не понимает её вообще

Ответить

Просил на русском?

Ответить

четкая, но ее очень сложно реализовать без ущерба для качества ответа, уж очень жесткое ограничение по объему. Соответствовать условию более мягкому запросу - в абзацах - проще

Ответить