# Общие рекомендации по разработке промптов

Вот несколько советов, которые стоит иметь в виду при разработке ваших промптов:


### Начните с простого
При разработке промптов стоит помнить, что это итеративный процесс, требующий много экспериментов для достижения оптимальных результатов. Хорошей отправной точкой является использование простого плейграунда от 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_places>

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).
