# Примеры промптов

Предыдущий раздел представил базовый пример того, как использовать промпты с LLM.

В этом разделе мы предоставим больше примеров того, как использовать промпты для решения различных задач и представим ключевые концепции на конкретных примерах. Часто лучший способ освоить концепции - это пройти через примеры. Несколько примеров ниже наглядно покажут, как вы можете использовать хорошо разработанные промпты для решения разнообразных задач.\
\
Темы:

* Сжатие текста
* Извлечение информации
* Вопросно-ответные системы (QA)
* Классификация текста
* Диалог
* Генерация кода
* Рассуждение

## Сжатие текста

***

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

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

*Промпт:*

{% hint style="info" %}
Объясни, что такое антибиотики \
A:
{% endhint %}

*Результат:*

{% hint style="success" %}
Антибиотики – это тип лекарств, применяемых для лечения бактериальных инфекций. Они действуют путем уничтожения бактерий или предотвращения их размножения, что позволяет иммунной системе организма справиться с инфекцией. Антибиотики обычно принимаются внутрь в виде таблеток, капсул или жидких растворов, иногда их также вводят внутривенно. Они не действуют против вирусных инфекций, и неправильное использование может привести к развитию устойчивости к антибиотикам.
{% endhint %}

В разделе "A:" мы предоставляем промпт для ответа, который используется в вопросно-ответной форме (QA). В данном примере это было сделано для указания модели на ожидаемое продолжение. Возможно, данная конструкция пока не слишком полезна, но мы вернемся к этому в дальнейшем. Предположим, что данное объяснение слишком длинное, и вы хотите сжать его еще сильнее. На самом деле, можно попросить модель сжать это в одно предложение, например:

*Промпт:*

{% hint style="info" %}
Антибиотики – это тип лекарств, применяемых для лечения бактериальных инфекций. Они действуют путем уничтожения бактерий или предотвращения их размножения, что позволяет иммунной системе организма справиться с инфекцией. Антибиотики обычно принимаются внутрь в виде таблеток, капсул или жидких растворов, иногда их также вводят внутривенно. Они не действуют против вирусных инфекций, и неправильное использование может привести к развитию устойчивости к антибиотикам.\
\
Объясни вышесказанное одним предложением:
{% endhint %}

*Результат:*

{% hint style="success" %}
Антибиотики — это лекарства, используемые для лечения бактериальных инфекций путем уничтожения бактерий или остановки их размножения, но они не эффективны против вирусов, и чрезмерное использование может привести к устойчивости к антибиотикам.
{% endhint %}

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

## Извлечение информации

***

Несмотря на то что языковые модели обучаются генерации естественного языка и связанным задачам, они также способны выполнять классификацию и другие задачи обработки естественного языка (NLP).

> NLP (Natural Language Processing - Обработка естественного языка) - это область компьютерных наук и искусственного интеллекта, занимающаяся разработкой методов и моделей для взаимодействия компьютеров с естественными языками, такими как речь и текст.

Вот пример промпта, извлекающего информацию из заданного параграфа.

*Промпт:*

{% hint style="info" %}
Утверждения о вкладе авторов и благодарности в научных статьях должны ясно и точно указывать, использовали ли авторы технологии искусственного интеллекта, такие как ChatGPT, при подготовке своей рукописи и анализе, и в какой степени. Также следует указать, какие модели больших языковых моделей (LLMs) были задействованы. Это поможет редакторам и рецензентам более детально анализировать рукописи на наличие потенциальных предвзятостей, неточностей и неправильной атрибуции источников. Точно так же научные журналы должны обеспечивать прозрачность в отношении использования LLMs, например, при отборе представленных рукописей. \
\
Укажи продукт на основе большой языковой модели, упомянутый в вышеприведенном абзаце:
{% endhint %}

*Результат:*

{% hint style="success" %}
Упомянутый в вышеуказанном абзаце продукт на основе большой языковой  модели (LLM) - это ChatGPT.
{% endhint %}

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

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

Источник параграфа: [ChatGPT: five priorities for research](https://www.nature.com/articles/d41586-023-00288-7)

## Вопросно-ответные системы (&#x51;*&*&#x41;)

***

> *QA (англ. Question and Answer) переводится на русский как "Вопрос и ответ".*
>
> *Вопросно-ответные системы (QA) - это методология, которая позволяет пользователю задавать вопросы на естественном языке, а затем получать соответствующие ответы от компьютерной программы или искусственного интеллекта. Этот подход широко используется для автоматизации поиска информации и обмена знаний с помощью компьютерных систем.*

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

*Промпт:*

{% hint style="info" %}
Ответьте на вопрос на основе указанного контекста. Дайте краткий и лаконичный ответ. Ответьте "Не уверен(а) в ответе", если не уверены в ответе. \
\
Контекст: Происхождение теплизумаба связано с фармацевтической компанией Ortho Pharmaceutical из Нью-Джерси. Там ученые создали раннюю версию антитела под названием OKT3. Изначально полученное из мышей, это молекула могла связываться с поверхностью Т-клеток и ограничивать их потенциал уничтожения клеток. В 1986 году оно было одобрено для помощи в предотвращении отторжения органов после трансплантации почек, став первым терапевтическим антителом, разрешенным для использования у человека. \
\
Вопрос: Изначально откуда был получен OKT3? \
Ответ:
{% endhint %}

*Результат:*

{% hint style="success" %}
Из мышей.
{% endhint %}

Контекст получен из [Nature](https://www.nature.com/articles/d41586-023-00400-x).

## Классификация текста

***

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

Давайте попробуем продемонстрировать это на примере классификации текста.

*Промпт:*

{% hint style="info" %}
Классифицируй текст как нейтральный, отрицательный или положительный.\
\
Текст: Я думаю, еда была нормальной. \
Отзыв:
{% endhint %}

*Результат:*

{% hint style="success" %}
Нейтральный
{% endhint %}

Вы предложили модель классифицировать текст и она ответила "Нейтральный", что является правильным ответом. Это хорошо, но предположим, что вам важно, чтобы модель отвечала в точном формате, как вы ей задали команду, то есть вместо "Нейтральный" вы хотите, чтобы она ответила "нейтральный" с маленькой буквы. Как этого добиться? Существует несколько способов. Важно быть конкретным, поэтому чем больше информации вы предоставите в промпте, тем лучше будут результаты. Вы можете использовать примеры, чтобы показать правильное поведение. Давайте попробуем снова:

*Промпт:*

{% hint style="info" %}
Классифицировать текст как нейтральный, отрицательный или положительный. \
Текст: Я думаю, что отпуск - это нормально. \
Настроение: нейтральный \
Настроение:&#x20;
{% endhint %}

*Результат:*

{% hint style="success" %}
нейтральный
{% endhint %}

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

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

*Промпт:*

{% hint style="info" %}
Классифицировать текст как нейтральный, отрицательный или положительный. Текст: Я думаю, что отпуск - это нормально. \
Настроение:
{% endhint %}

*Результат:*

{% hint style="success" %}
Нейтральный
{% endhint %}

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

## Диалог

***

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

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

*Промпт:*

{% hint style="info" %}
Ниже представлен диалог с искусственным интеллектом, который играет роль научного ассистента. Тон ассистента технический и научный. \
\
Человек: Здравствуйте, кто вы? \
ИИ: Приветствую! Я искусственный интеллект, и моя роль – научный помощник. Как я могу вам помочь сегодня? \
Человек: Можете рассказать мне о создании черных дыр? \
ИИ:
{% endhint %}

*Результат:*

{% hint style="success" %}
Конечно! Черные дыры представляют собой участки пространство-времени, в которых гравитационная сила настолько сильна, что ничто, даже свет, не может избежать её. Они образуются, когда очень массивная звезда умирает, и её ядро коллапсирует, образуя сингулярность бесконечной плотности. Интенсивная гравитация сингулярности притягивает всю материю и излучение вокруг себя, создавая черную дыру.
{% endhint %}

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

*Промпт:*

{% hint style="info" %}
Ниже представлен диалог с искусственным интеллектом-исследователем. Ответы помощника должны быть понятны даже ученикам начальной школы. \
\
Человек: Привет, кто ты? \
ИИ: Приветствую! Я искусственный интеллект-исследователь. Как я могу помочь вам сегодня? \
Человек: Можешь рассказать мне о создании черных дыр? \
ИИ:
{% endhint %}

*Результат:*

{% hint style="success" %}
Конечно! Черные дыры появляются, когда очень большая звезда исчерпывает свои запасы топлива и начинает сжиматься. Гравитация этой звезды настолько сильна, что ничто, даже свет, не может выбраться из её объятий. Это создаёт особую точку в пространстве и времени с огромной гравитационной силой, которую называют черной дырой.
{% endhint %}

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

\\

## Генерация кода

***

Один из эффективных способов применения LLM (Большой Языковой Модели) - это создание программного кода. Copilot - превосходный пример такого применения. С помощью внимательно разработанных подсказок можно успешно выполнить множество задач по написанию кода. Давайте рассмотрим несколько примеров далее.

> **Copilot** - это инновационный инструмент для генерации программного кода, разработанный компанией GitHub, которая в настоящее время принадлежит Microsoft. Этот инструмент использует современные языковые модели, включая технологии искусственного интеллекта, чтобы помогать разработчикам писать код более быстро и эффективно.

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

*Промпт:*

{% hint style="info" %}
/\* \
Ask the user for their name and say "Hello"\
\*/
{% endhint %}

*Результат:*

{% hint style="success" %}
let name = prompt("What is your name?"); \
console.log(`Hello, ${name}!`);
{% endhint %}

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

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

*Промпт:*

{% hint style="info" %}
"""\
Table departments, columns = \[DepartmentId, DepartmentName]\
Table students, columns = \[DepartmentId, StudentId, StudentName]\
Create a MySQL query for all students in the Computer Science Department\
"""
{% endhint %}

*Результат:*

{% hint style="success" %}
SELECT StudentId, StudentName\
FROM students\
WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = 'Computer Science');
{% endhint %}

Это очень впечатляюще. В этом примере вы предоставили данные о схеме базы данных и попросили его сгенерировать корректный запрос MySQL.

> **MySQL** - это система управления реляционными базами данных (СУБД), которая предоставляет мощные инструменты для хранения, организации и манипулирования данными. Она позволяет пользователям создавать и управлять базами данных, таблицами, индексами и запросами, обеспечивая эффективное хранение и извлечение информации.

## Рассуждение

***

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

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

*Промпт:*

{% hint style="info" %}
Чему равно умножение 9 000 на 9 000?
{% endhint %}

*Результат:*

{% hint style="success" %}
Умножение 9 000 на 9 000 равно 81 000 000 (восемьдесят один миллион).
{% endhint %}

Давайте рассмотрим более сложную задачу.

*Промпт:*

{% hint style="info" %}
Нечетные числа в этой группе дают в сумме четное число: 15, 32, 5, 13, 82, 7, 1. \
A:
{% endhint %}

*Результат:*

{% hint style="danger" %}
Нет, нечетные числа в этой группе дают в сумме нечетное число: 119.
{% endhint %}

Ответ неправильный! Попробуем улучшить промпт.

*Промпт:*

{% hint style="info" %}
Нечетные числа в этой группе дают в сумме четное число: 15, 32, 5, 13, 82, 7, 1. Реши задачу, разбив ее на этапы. Сначала определи нечетные числа, сложи их и укажи, какой результат получился - четный или нечетный.
{% endhint %}

*Результат:*

{% hint style="success" %}
Нечетные числа: 15, 5, 13, 7, 1 \
Сумма: 41 \
41 - нечетное число.
{% endhint %}

Гораздо лучше, не так ли? Кстати, я пробовал это несколько раз, и система иногда ошибается. Если вы предоставите более точные инструкции вместе с примерами, это может помочь получить лучшие результаты.

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