mirror of
https://github.com/dair-ai/Prompt-Engineering-Guide
synced 2024-11-02 15:40:13 +00:00
108 lines
9.8 KiB
Plaintext
108 lines
9.8 KiB
Plaintext
|
# Общие рекомендации по разработке промптов
|
|||
|
|
|||
|
Вот несколько советов, которые стоит иметь в виду при разработке ваших промптов:
|
|||
|
|
|||
|
|
|||
|
### Начните с простого
|
|||
|
При разработке промптов стоит помнить, что это итеративный процесс, требующий много экспериментов для достижения оптимальных результатов. Хорошей отправной точкой является использование простого плейграунда от OpenAI или Cohere.
|
|||
|
|
|||
|
Вы можете начать с простых промптов и добавлять больше элементов и контекста по мере стремления к лучшим результатам. Важно итеративно улучшать ваш промпт по мере продвижения. При чтении руководства вы увидите множество примеров, где специфичность, простота и краткость часто дадут вам лучшие результаты.
|
|||
|
|
|||
|
Когда у вас есть большая задача, включающая множество различных подзадач, вы можете попробовать разбить задачу на более простые подзадачи и постепенно улучшать результаты. Это позволяет избежать слишком большой сложности в процессе проектирования промпта с самого начала.
|
|||
|
|
|||
|
### Инструкция
|
|||
|
Вы можете разрабатывать эффективные промпты для различных простых задач, используя команды для указания модели, что вы хотите достичь, такие как "Write", "Classify", "Summarize", "Translate", "Order", и т.д.
|
|||
|
|
|||
|
Имейте в виду, что вам также нужно много экспериментировать, чтобы увидеть, что работает лучше всего. Попробуйте разные инструкции с разными ключевыми словами, контекстами и данными, и посмотрите, что работает лучше всего для вашего конкретного случая использования и задачи. Обычно чем более специфичным и соответствующим контекст для задачи, которую вы пытаетесь выполнить, тем лучше. Мы затронем важность выборки и добавления большего контекста в следующих руководствах.
|
|||
|
|
|||
|
Другие рекомендуют размещать инструкции в начале промпта. Еще одна рекомендация состоит в использовании некоторого ясного разделителя, например "###", для отделения инструкции и контекста.
|
|||
|
|
|||
|
Например:
|
|||
|
|
|||
|
*Промпт:*
|
|||
|
```
|
|||
|
### Instruction ###
|
|||
|
Translate the text below to Spanish:
|
|||
|
|
|||
|
Text: "hello!"
|
|||
|
```
|
|||
|
|
|||
|
*Результат:*
|
|||
|
```
|
|||
|
¡Hola!
|
|||
|
```
|
|||
|
|
|||
|
### Специфичность
|
|||
|
Будьте очень конкретными относительно инструкции и задачи, которую вы хотите, чтобы модель выполнила. Чем более подробным и детальным будет промпт, тем лучше результаты. Это особенно важно, когда у вас есть желаемый результат или стиль генерации, который вы ищете. Нет конкретных токенов или ключевых слов, которые приводят к лучшим результатам. Гораздо важнее иметь хороший формат и описательный промпт. Фактически, предоставление примеров в промпте очень эффективно для получения желаемого вывода в конкретных форматах.
|
|||
|
|
|||
|
При разработке промптов стоит также учитывать длину промпта, так как есть ограничения на то насколько длинным может быть промпт. Подумайте о том, насколько конкретным и детальным вы должны быть. Включение слишком многих ненужных деталей не всегда является хорошим подходом. Детали должны быть соответствующими и способствовать выполнению задачи. Это то, с чем вам придется много экспериментировать. Мы настоятельно рекомендуем проводить много экспериментов и итераций для оптимизации промптов для ваших приложений.
|
|||
|
|
|||
|
В качестве примера рассмотрим простой промпт для извлечения определенной информации из текста.
|
|||
|
|
|||
|
*Промпт:*
|
|||
|
```
|
|||
|
Extract the name of places in the following text.
|
|||
|
|
|||
|
Desired format:
|
|||
|
Place: <comma_separated_list_of_company_names>
|
|||
|
|
|||
|
Input: "Although these developments are encouraging to researchers, much is still a mystery. “We often have a black box between the brain and the effect we see in the periphery,” says Henrique Veiga-Fernandes, a neuroimmunologist at the Champalimaud Centre for the Unknown in Lisbon. “If we want to use it in the therapeutic context, we actually need to understand the mechanism.""
|
|||
|
```
|
|||
|
|
|||
|
*Результат:*
|
|||
|
```
|
|||
|
Place: Champalimaud Centre for the Unknown, Lisbon
|
|||
|
```
|
|||
|
|
|||
|
Исходный текст взят из [этой статьи Nature](https://www.nature.com/articles/d41586-023-00509-z).
|
|||
|
|
|||
|
### Избегайте неточностей
|
|||
|
|
|||
|
Учитывая вышеуказанные рекомендации о детализации и улучшении формата, легко попасть в ловушку желания быть слишком умным в промптах и, возможно, создавать неточные описания. Часто лучше быть конкретным и прямым. Аналогия здесь очень похожа на эффективную коммуникацию - чем прямее, тем эффективнее передается сообщение.
|
|||
|
|
|||
|
Например, вы можете заинтересоваться изучением концепции промптинга. Вы можете попробовать что-то вроде:
|
|||
|
|
|||
|
```
|
|||
|
Explain the concept prompt engineering. Keep the explanation short, only a few sentences, and don't be too descriptive.
|
|||
|
```
|
|||
|
|
|||
|
Из промпта выше не ясно, сколько предложений использовать и в каком стиле. Возможно, с помощью таких промптов вы все равно получите неплохие ответы, но лучший промпт будет очень конкретным, кратким и по существу. Например:
|
|||
|
|
|||
|
```
|
|||
|
Use 2-3 sentences to explain the concept of prompt engineering to a high school student.
|
|||
|
```
|
|||
|
|
|||
|
### Делать или не делать?
|
|||
|
Еще один распространенный совет при разработке промптов - избегать формулировки того, что не нужно делать, а вместо этого указывать, что нужно делать. Это способствует большей специфичности и фокусу на деталях, которые приводят к хорошим результатам модели.
|
|||
|
|
|||
|
Вот пример неудачного чат-бота по рекомендации фильмов, когда я указываю, что не нужно делать, из-за того, как я сформулировал инструкцию - фокусируясь на том, что не нужно делать.
|
|||
|
|
|||
|
*Промпт:*
|
|||
|
```
|
|||
|
The following is an agent that recommends movies to a customer. DO NOT ASK FOR INTERESTS. DO NOT ASK FOR PERSONAL INFORMATION.
|
|||
|
|
|||
|
Customer: Please recommend a movie based on my interests.
|
|||
|
Agent:
|
|||
|
```
|
|||
|
|
|||
|
*Результат:*
|
|||
|
```
|
|||
|
Sure, I can recommend a movie based on your interests. What kind of movie would you like to watch? Do you prefer action, comedy, romance, or something else?
|
|||
|
```
|
|||
|
|
|||
|
Вот лучший промпт:
|
|||
|
|
|||
|
*Промпт:*
|
|||
|
```
|
|||
|
The following is an agent that recommends movies to a customer. The agent is responsible to recommend a movie from the top global trending movies. It should refrain from asking users for their preferences and avoid asking for personal information. If the agent doesn't have a movie to recommend, it should respond "Sorry, couldn't find a movie to recommend today.".
|
|||
|
|
|||
|
Customer: Please recommend a movie based on my interests.
|
|||
|
Agent:
|
|||
|
```
|
|||
|
|
|||
|
*Результат:*
|
|||
|
```
|
|||
|
Sorry, I don't have any information about your interests. However, here's a list of the top global trending movies right now: [list of movies]. I hope you find something you like!
|
|||
|
```
|
|||
|
|
|||
|
Некоторые из приведенных примеров были взяты из статьи ["Best practices for prompt engineering with OpenAI API"](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api).
|