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

Что такое подсказка?

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

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

Быстрый инжиниринг

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

Давайте перейдем к немного более сложному случаю математики и попросим LLM умножить два числа. В данном случае я спрашиваю: «что такое 23431232». Ответ, который я получил, не совсем правильный. Теперь позвольте мне изменить подсказку и добавить в нее дополнительную строку,«что такое 23431232. Дайте мне точный ответ после умножения». Теперь мы получаем правильный ответ от LLM.

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

Элементы подсказки

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

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

При желании подсказки могут включать контекст, чтобы модель лучше обслуживала вас. Например, если у меня есть вопросы, скажем, об объектах английского наследия, я могу сначала предоставить такой контекст, как «Английское наследие» заботится о более чем 400 исторических памятниках, зданиях и местах — от всемирно известных доисторических памятников до величественных средневековых замков, от римских фортов. …», а затем задайте мой вопрос: «какой из объектов английского наследия является крупнейшим?».

В рамках подсказки вы также можете указать формат, в котором вы хотите видеть вывод. Таким образом, подсказка может дополнительно иметь индикатор вывода. Например, вы можете спросить: «Мне нужен список всех объектов английского наследия в Англии, их местонахождение и особенности. Мне нужны результаты в табличном формате». Или, если вам нужен еще лучший ответ, вы можете ввести желаемый формат с этим синтаксисом, чтобы указать, что вы хотите видеть столбцы и строки в выводе:

Desired format:
Company names: <comma_separated_list_of_sites>
Sites: -||-
Location: -||-
Speciality: -||-

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

Text: Today I saw a movie. It was amazing.
sentiment: Positive
Text: I don't very good after seeing that incident. 
sentiment:

Типы подсказок — выстрелы

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

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

Text: Today I saw a movie. It was amazing.
sentiment: Positive
Text: I don't very good after seeing that incident. 
sentiment: Negative
Text: Lets party this weekend to celebrate your anniversary.
sentiment: Positive 
Text: Walking in that neighbourhood is quite dangerous.
sentiment: Negative 
Text: I love watching tennis all day long 
sentimet:

Затем я могу оставить модель отвечать на последний текст, который я ввел. Как правило, от 5 до 8 примеров должно быть достаточно для краткого подсказывания. Как вы уже догадались, недостатком этого подхода является то, что в приглашении будет слишком много токенов. Если вы хотите начать с простого, вам не нужно приводить какие-либо примеры, а сразу переходите к проблеме, как в этой подсказке:

Text: I love watching tennis all day long 
sentimet:

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

Типы подсказок — роли

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

Обычно вы начинаете подсказку с роли эксперта, которую должен играть LLM. Затем следуйте инструкциям для того, что он должен сделать. В качестве простого примера, роль может заключаться в том, чтобы попросить LLM стать поэтом, а инструкция может состоять в том, чтобы просто написать стихотворение об укусах ИИ. Или это может быть немного сложнее, если попросить LLM действовать как терминал Linux. И предоставление конкретных инструкций по копированию первых 10 строк файла в другой файл и его сохранению. Вы даже можете предотвратить включение любого другого текста в вывод, явно указав, что не нужно давать никаких объяснений.

You are a poet. 
Write a poem about AI Bites
Act as a linux terminal
I want you to provide the shell command to read the contents of a file named "input.txt".
Copy the first 10 lines to a different file with the name "new.txt" and save it.
Do not give any explanations.

Формальная структура приглашения

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

Подсказка форматирования

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

Extract locations from the below text
Desired format:
Cities: <comma_separated_list_of_cities>
Countries: <comma_separated_list_of_countries>
Input: Although the exact age of Aleppo in Syria is unknown, 
an ancient temple discovered in the city dates to around 3,000 B.C. Excavations in the 
1990s unearthed evidence of 5,000 years of civilization, 
dating Beirut, which is now Lebanon's capital, to around 3,000 B.C.

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

При предоставлении примеров их лучше отделять парой хэшей, как в этом примере.

##
Text: Today I saw a movie. It was amazing.
sentiment: Positive
##
Text: I don't very good after seeing that incident. 
sentiment: Negative
##
Text: Lets party this weekend to celebrate your anniversary.
sentiment: Positive 
Text: Walking in that neighbourhood is quite dangerous.
sentiment: Negative

Если вы предоставляете входные данные, вы можете заключить их в кавычки, как в этом примере:

Text: """
{text input here}
"""

Затем есть что-то, называемое stop sequence, которое подсказывает модели прекратить штамповать текст, потому что он закончил с выводом. Вы можете выбрать последовательность остановки с любым символом по вашему выбору. Но новая строка кажется здесь обычным вариантом.

Text: "Banana", Output: "yellow \\n" 
Text: "Tomato", Output: "red \\n"
Text: "Apple", Output: "red \\n"

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

/*
Get the name of the use as input and print it  
*/
# get the name of the user as input and print it

Смотреть видео

Если вы дочитали до этого места, я предполагаю, что вам либо понравилась статья, либо вам интересно узнать об ИИ. В любом случае, почему бы вам не посмотреть наше видео о Prompt Engineering здесь. Это первое видео из серии видео о подсказках. Так почему бы не подписаться и не следить за новостями!

Заключение

Со всем этим введением о подсказках, разработке подсказок и их типах мы только коснулись поверхности. Например, как мы можем попросить LLM проанализировать данную ситуацию? Есть более продвинутые способы подсказок, такие как цепочка мыслей, самосогласованность, общие знания и т. д. Давайте посмотрим на них в следующих постах и ​​видео. Пожалуйста, не переключайтесь!