Читать книгу «Промт инжиниринг» онлайн полностью📖 — Катерины Калинюк — MyBook.
image
cover

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

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

Что такое паттерн промта?

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

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

Получить ответ в определённом формате

Добиться предсказуемости в выходных данных

Ограничить возможные варианты ответа (например, «да» или «нет»)

Заставить модель включать в ответ определённую информацию

Пример работы паттерна

Представьте, что нам нужно всегда получать фразу:

Шерсть котенка была белой как снег.

Один из способов добиться этого – использовать начало знакомой истории или стиха:

У девочки был маленький котенок…

Если мы дадим такой ввод, модель с высокой вероятностью продолжит его нужной нам строкой:

У девочки был маленький котенок, шерсть которого была белой как снег.

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

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

Как применять паттерны в промтах?

Паттерны промптов могут помочь в решении множества задач, например,

Гарантировать, что ответ всегда включает определённые элементы

Заставить модель следовать заданному формату (например, JSON, таблица, список)

Получать ответы только в виде "да" или "нет"

Заставлять модель задавать вопросы вместо выдачи ответов

Во всех этих случаях мы меняем структуру промта, чтобы управлять выходными данными модели.

Почему это работает?

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

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

Итог

Паттерн промта – это структурированный способ подачи запроса, который помогает получить предсказуемый результат.

Мы можем управлять ответами модели, задавая чёткую структуру промта.

Использование правильных паттернов помогает повысить точность и стабильность ответов.

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

Главная идея: правильный промт – это не просто вопрос, а программа, которая направляет поведение модели!

Паттерн Персона: мощный способ управления ответами модели

Паттерн Персона – один из самых эффективных способов задать интересное поведение языковой модели.

Что это значит? Представьте, что вам нужен определённый ответ, но вы не знаете точно, в каком формате он должен быть представлен или какие детали включать. Однако в реальном мире вы бы знали, к кому обратиться за таким ответом. Например, с бухгалтерским вопросом вы бы пошли к бухгалтеру, за медицинским советом – к врачу, а если речь о логопедии – к специалисту по речи.

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

Как это работает?

Обычно паттерн формулируется так:

Веди себя как [персона] и давай ответы, которые дал бы этот персонаж.

Например

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

Ответ модели:

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

Теперь, если задать вопрос:

Есть опасения, что ИИ захватит мир.

Ответ:

Опасения о том, что ИИ захватит мир, часто встречаются в научной фантастике, но они маловероятны в ближайшем будущем…

Модель действительно реагирует скептически, как и было запрошено.

Другой пример:

Продавец в магазине сказал мне, что мне нужно 128 ГБ оперативной памяти, чтобы просто серфить в интернете.

Ответ:

Скептически говоря, маловероятно, что вам нужно 128 ГБ ОЗУ для обычного интернет-серфинга. Объём оперативной памяти, необходимый для просмотра веб-страниц, зависит от сложности сайтов и количества открытых вкладок…

Можно ли использовать неодушевлённые «персоны»?

Да! Модель может «играть» не только людей, но и объекты или системы.

Пример:

Веди себя как терминал Linux.

Теперь ИИ начнёт отвечать в стиле командной строки, эмулируя её поведение.

Пример:

Веди себя как ягнёнок из детского стишка "У Мэри был барашек". Я расскажу, что делает Мэри, а ты скажешь, что делает барашек.

Мэри зашла в магазин.

Ответ:

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

Мэри пошла в кино.

Ответ:

Я бы не смог пойти с ней в кино, ведь барашки туда не ходят. Скорее всего, я бы остался снаружи, щипая травку или бродя неподалёку, пока она не выйдет.

Почему это так мощно?

Экономия места в запросе – Вместо детального описания всех характеристик персонажа достаточно просто сказать: Веди себя как X, и модель сама подберёт правильный стиль ответа.

Гибкость – Можно быстро менять роли и точки зрения: от бухгалтера до скептика, от ребёнка до компьютерной системы.

Создание виртуальных экспертных панелей – Можно одновременно задать несколько точек зрения:

Анализируй этот бизнес-план как финансовый директор.

Анализируй этот же бизнес-план как специалист по безопасности.

Анализируй этот же бизнес-план как сотрудник компании.

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

Дополнение к 1 главе

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

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

Пример: паттерн «Полезный ассистент»

Представим, что мы хотим создать новый паттерн, который предотвращает генерацию негативных ответов со стороны ИИ-ассистента. Назовём этот паттерн «Полезный ассистент».

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

Фундаментальные контекстные утверждения:

Ты – полезный ИИ-ассистент.

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

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

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

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

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

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

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

Задание к 1 главе

Задание 1: Персона-человек

Сформулируйте промт и протестируйте его с ChatGPT (или другой крупной языковой моделью), используя паттерн персоны-человека.

Задание 2: Персона-животное

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

Задание 3: Персона-объект или система

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

Глава 2. Введение новой информации

Использование промтов для ввода новой информации

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

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

Как же можно задействовать их, если языковая модель не была обучена на этих данных?

Ввод внешней информации через промт

Чтобы продемонстрировать это, представим другую ситуацию. Допустим, я спрашиваю:

Сколько чашек кофе я выпиваю в среднем по утрам?

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

Ответ модели:

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

Как решить эту проблему? Мы просто предоставляем ей необходимую информацию в промте.

Пример: добавление контекста

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

Исторические данные о среднем количестве чашек кофе, которые я выпиваю по утрам:

Понедельник: 2 чашки

Вторник: 1 чашка

Среда: 2 чашки

Четверг: 3 чашки

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

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

Применение в работе с внутренними данными

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

Вот информация, которую ты не знал. Теперь ответь на мой вопрос, основываясь на этих данных.

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

Поиске информации в базах данных

Интеграции найденных данных в промт

Генерации ответа с учётом этих данных

Пример: влияние скрытого контекста

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

Например

У меня есть умная кофе-машина, которая автоматически варит кофе каждое утро в 7:00. Если я не отменяю таймер, она всегда готовит кофе.

Теперь, если вы зададите вопрос:

Сколько чашек кофе я выпил сегодня утром?

модель сможет учесть, что кофе был сварен автоматически, и сделать соответствующий вывод.

Вывод

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

Ограничение длины промта

Очень важно понимать, что промт – это, по сути, ввод, который мы даём модели, и у нас есть ограничение на размер промта, который мы можем создать. Мы не можем создать промт неограниченного размера. Каждая большая языковая модель имеет фундаментальное ограничение на объём информации, который мы можем передать ей за один раз.

Это важный момент, который нужно учитывать при проектировании промтов. Сейчас я покажу вам быстрый пример на ChatGPT. Я вставлю статью из Википедии, связанную с устройством фотосинтеза у растений. Я вставил огромное количество текста из этой статьи. Что ответил ChatGPT?

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

Этот пример демонстрирует важный принцип: мы не можем просто передавать модели неограниченное количество информации.

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

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

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

Что мы можем сделать?

1. Отбирать самую важную информацию

Например, если нас интересует событие 11 февраля 1990 года, мы вставляем только этот фрагмент и спрашиваем:

Что произошло 11 февраля?

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

2. Фильтровать данные.

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

3. Суммировать информацию.

Если у нас есть большой объём данных, можно предварительно его сжать. Например, можно попросить ChatGPT или другую модель суммировать каждый абзац в одном предложении. Это сократит текст, но позволит сохранить основную суть.

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

Суммируй этот текст, сохраняя числовые данные.

Тогда итоговый текст сохранит важные цифры.

4. Компрессия информации под задачу.

Можно не просто суммировать, а указать модели, какие именно аспекты информации нужно сохранить. Например, мы можем сказать:

Сократи текст, сохраняя только информацию о численности людей

Суммируй, но сохрани ключевые детали о действиях местных властей

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

Вывод

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

В таких случаях нам необходимо:

Выбирать только релевантные фрагменты

Фильтровать ненужную информацию

Компрессировать текст, сохраняя важные детали

Суммировать данные для эффективного использования в промте

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

Промт как диалог: пошаговая работа с моделью

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

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

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

Что означает этот процесс уточнения? Представьте себе, что большая языковая модель – это инструмент, например, гончарный круг. Допустим, у мастера есть заготовка из глины. Он ставит её на круг, начинает формировать изделие. Сначала оно не имеет формы. Он придаёт ему очертания, затем уточняет форму, добавляет детали, снова дорабатывает. Он не говорит: «Это ужасная ваза!» и не выбрасывает заготовку после первого касания. Он продолжает работать, снова и снова придавая ей форму, пока не создаст нечто красивое и функциональное.

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

Теперь давайте рассмотрим пример. Представьте, что я хочу изучить виртуальную лабораторию по созданию роботов. Я говорю ChatGPT: