Промт инжиниринг

Предисловие
Вам предстоит знакомство с тем, как работает один из самых мощных инструментов цифрового века – большие языковые модели, такие как ChatGPT. Они умеют многое: от структурированной генерации текста до симуляции ролей, анализа и вывода. Однако, как и любой сложный инструмент, большие языковые модели особенно эффективны в умелых руках.
Эта книга – приглашение не просто к эксперименту, а к сотрудничеству. Вы узнаете, как правильно задавать вопросы, как использовать шаблоны (паттерны) взаимодействия и как формировать запросы так, чтобы получать точные и полезные ответы. Знание этих паттернов поможет вам не только решать повседневные задачи, но и открывать новые способы применения ИИ – в работе, обучении и творчестве.
Пусть это пособие станет для вас навигацией в мире, где текст – код взаимодействия, а каждый запрос – программа. Мой труд был задуман, чтобы помочь. Остальное – в ваших руках.
Глава 1.
Что такое большие языковые модели и как они работают
В этой главе мы не будем углубляться в технические детали, но расскажем достаточно, чтобы вы могли эффективно использовать языковые модели в своей работе. Особенно важно это при создании запросов, или, как их принято называть, промптов.
Что делает языковая модель?
Основное, что делает большая языковая модель, – получает ваш текстовый ввод и пытается предсказать следующее слово. Затем она добавляет это слово к исходному тексту и предсказывает следующее. И так – шаг за шагом – пока не сочтёт, что ответ завершён.
Можно представить это как постепенное формирование предложения: слово за словом, словно капля чернил за каплей вырисовывает фразу.
На практике всё гораздо сложнее, но суть именно такая: модель анализирует контекст и предсказывает наиболее вероятное следующее слово. Последнее слово в цепочке обычно означает «стоп», даже если визуально это не всегда заметно.
Пример работы
Допустим, мы вводим:
В лесу родилась…
Если вы знакомы с популярной новогодней песней, то логичное продолжение: ёлочка, в лесу она росла.
Модель сначала предскажет слово ёлочка, затем – следующее, и так далее, пока не сочтёт, что завершила предложение.
Другой пример:
Осенью в парке лежат…
Модель, скорее всего, продолжит: жёлтые листья, шуршащие под ногами.
Это не потому, что она знает поэзию или литературу. Она просто «помнит», какие фразы чаще всего следовали за такими строками в данных, на которых её обучали.
Как обучают модели?
Обучение происходит на огромных текстовых массивах, собранных из интернета. Алгоритм показывают часть текста и просят предсказать следующее слово. Если ответ неверен – происходит корректировка.
Так шаг за шагом модель учится находить паттерны, контексты, языковые зависимости и смысловые связи. Чем больше параметров у модели – тем точнее её предсказания.
Почему они называются «большими»? Потому что их обучают с помощью гигантских количеств данных, и они содержат миллиарды параметров. Это позволяет моделям эффективно обрабатывать текст, понимая не только отдельные слова, но и их отношения в длинных цепочках.
Например, фраза В лесу родилась могла бы продолжиться как странная история о медведе в костюме. Это технически корректно, но статистически маловероятно. Поэтому модель выберет вариант ёлочка, потому что он чаще встречался в обучающих данных.
Что важно знать о языковых моделях
Они не всегда дают одинаковый ответ. Один и тот же запрос может привести к слегка отличающимся результатам. Это заложено намеренно – элемент случайности делает поведение модели гибче.
Они не знают свежих событий. Например, ChatGPT-4 обучен на данных до 2021 года. Чтобы получить ответ по более свежей теме, необходимо включить контекст в сам запрос.
Они быстро развиваются. Помимо ChatGPT, существуют и другие модели: LLaMA, Alpaca, Vicuna и многие другие. Их возможности постоянно растут, и методы работы с ними – тоже.
Как использовать это знание
Понимание того, что модель – это «предсказатель следующего слова», помогает формулировать запросы эффективнее. Если вы дадите модели точную и последовательную формулировку, она с большей вероятностью двинется в нужном направлении.
Например, вместо:
Объясни, почему фильм плохой
лучше написать:
Опиши недостатки фильма, особенно связанные с сюжетом и актёрской игрой.
Также важно помнить: модель – не оракул. Она может ошибаться. Иногда её ответы бывают странными или лишёнными смысла. Поэтому важно относиться к ним критически и быть готовыми переформулировать запрос.
Непредсказуемость ответов языковых моделей
Большие языковые модели, по крайней мере в ближайшей перспективе, вряд ли будут давать вам точный и повторяющийся ответ каждый раз. Всегда будет вероятность того, что они сгенерируют что-то немного неожиданное – и это задумано специально, что в некоторых случаях может быть даже полезно.
Во многом работа с языковыми моделями заключается в том, чтобы управлять их непредсказуемостью. Нам нужно ограничивать её, направлять в нужное русло и использовать так, чтобы она приносила пользу.
Что это значит? Дело в том, что модели всегда имеют определённую долю случайности и могут генерировать новые и разные идеи при каждом запросе. Иногда это бывает полезно – например, при создании художественных текстов, когда нужны различные сюжетные линии, персонажи и неожиданные повороты. Каждый раз, запрашивая новый текст, мы получаем уникальный результат – и это замечательно.
Но если мы используем языковую модель для логических рассуждений или анализа данных, то нам может не подойти слишком высокая вариативность ответов. Представьте, что вам нужен однозначный ответ «да» или «нет». Мы не хотим, чтобы модель иногда говорила «да», иногда «нет», а в другой раз начинала длинное рассуждение о том, почему этот вопрос сложен и нельзя дать точный ответ. Иногда нам нужен конкретный и лаконичный ответ, а добиться этого не всегда просто.
Демонстрация случайности в ответах
Чтобы показать, что один и тот же ввод не обязательно приводит к одинаковому выводу, давайте посмотрим на пример.
Я задал языковой модели вопрос:
Что я сейчас держу в руке?
Первый ответ был таким:
К сожалению, я не могу видеть или ощущать физические объекты, поэтому не знаю, что вы держите в руке.
Затем последовало уточнение:
Возможно, это телефон, чашка или ручка – наиболее частые предметы, которые люди держат в руках.
При повторном запросе модель ответила иначе:
У меня нет визуального восприятия, но, возможно, вы держите ключи, бумагу или какой-то гаджет.
А в следующий раз модель предложила:
Это может быть всё, что угодно – от еды до пульта управления. Если вы подскажете больше контекста, я постараюсь угадать точнее.
Хотя общий смысл этих ответов совпадает – «я не могу знать наверняка» – сами формулировки различаются. Именно в этом и проявляется случайность, заложенная в работу модели.
Итог
Когда мы создаём запросы (промты), нам нужно учитывать вариативность ответов. Иногда это полезно, например, в творческих задачах. Но если нам нужен предсказуемый результат, необходимо разрабатывать промты так, чтобы минимизировать случайные отклонения.
Например, если нам нужен конкретный числовой ответ, обычный запрос типа:
Что я держу в руке?
может не сработать. Возможно, потребуется предоставить дополнительные данные или задать вопрос более точно, чтобы модель могла рассуждать более уверенно.
Таким образом, ключевая особенность работы с языковыми моделями – это управление случайностью их ответов и поиск способов получения наиболее полезных и точных результатов.
Что означает слово Промт на самом деле?
Слово промт стало неотъемлемой частью разговоров о взаимодействии с крупными языковыми моделями. Мы часто упоминаем инженерию промптов, конструирование запросов, формирование инструкций. Но чтобы понять глубину этого понятия, важно посмотреть шире: промт – это не просто вопрос, который вы задаёте модели.
Давайте разберёмся, что может означать это слово, и почему понимание его сути поможет вам точнее формулировать запросы и получать более эффективные ответы.
Значения слова "промт"
Модель ответила на прямой вопрос:
Что означает слово промт?
Вот основные значения, которые она выделила:
Глагол – "побуждать" или "способствовать" выполнению действия.
Пример: Напоминание учителя о предстоящем экзамене побудило студентов начать подготовку.
В этом смысле промт – это стимул, запускающий действие. Именно так промт действует на языковую модель: он заставляет её начать генерировать ответ.
Прилагательное – "немедленный", "своевременный".
В контексте LLM это значение подсказывает, что модель реагирует сразу – но также, что она может формировать ответ, который повлияет на дальнейшее взаимодействие.
Существительное – "подсказка", "напоминание".
Промты можно использовать как способ передавать модели информацию, которую она должна учесть в будущем. Это особенно полезно при многошаговых взаимодействиях.
Элемент интерфейса – запрос ввода от пользователя.
Здесь промт – это буквально то, что отображается перед пользователем, когда система ожидает ответа. В языковых моделях промт может как направлять, так и запрашивать информацию.
Примеры взаимодействий с ChatGPT
Допустим, пользователь вводит следующий промт:
С этого момента, когда я задаю вопрос, предлагай его улучшенную версию и спрашивай, хочу ли я использовать её вместо оригинала.
Модель отвечает:
Конечно! Но я сначала постараюсь ответить на ваш оригинальный вопрос.
Пользователь задаёт вопрос:
Какого цвета небо?
Ответ модели:
Более точный вариант вопроса: "Каково научное объяснение синего цвета неба днём?" Хотите использовать этот вариант?
Если пользователь отвечает "Да", модель продолжает:
Синий цвет неба объясняется рассеянием света, в частности – эффектом Рэлея, при котором короткие синие волны рассеиваются сильнее, чем длинные красные.
Таким образом, промт активирует сразу несколько уровней взаимодействия:
Моментальный запуск ответа
Последующее влияние на стиль коммуникации
Механизм уточнения и доработки запросов
Промты и временная память модели
Некоторые промты действуют как установки, влияющие на поведение модели в течение всей сессии. Пример:
С этого момента улучшай все мои вопросы.
Позже пользователь вводит:
Сколько стран в мире?
Модель отвечает:
Более точная формулировка: "Какое текущее количество стран в мире, и как определяется статус страны?" Хотите использовать этот вариант?
Промт, заданный ранее, остаётся в контексте и влияет на ответы без необходимости повторного напоминания.
Промт как источник новых знаний для модели
Если модель не знает ответа из-за ограничений обучения, вы можете передать ей нужную информацию прямо в запросе. Например
Какой процент зарегистрированных пользователей воспользовались новой функцией в мобильном приложении StreamFlow в 2022 году?
Ответ:
Извините, мои данные ограничены 2021 годом.
Но если вы добавите:
В 2022 году 68% пользователей StreamFlow использовали новую функцию «умного поиска». Запомни это.
А затем спросите:
Итак, какой процент пользователей воспользовались новой функцией в StreamFlow в 2022 году?
Модель ответит:
На основе предоставленных данных, 68% пользователей использовали функцию «умного поиска» в 2022 году.
Таким образом, промт используется как механизм передачи новых знаний.
Вывод
Промты – это не просто форма ввода. Это инструмент влияния на:
Формат и стиль ответа
Направление логики рассуждения
Уровень детализации
Память и контекст в пределах одной сессии
Возможность передачи новых фактов
Эффективные промты – это инструмент управления языковой моделью. Чем точнее и осознаннее вы формулируете запросы, тем продуктивнее становится взаимодействие с ИИ.
Как работают промты: интуитивное объяснение
Давайте разберёмся, что делает промт и как шаблоны влияют на поведение языковой модели. Рассмотрение примеров поможет понять, как ваши запросы формируют ответы модели и какие реакции они вызывают.
Почему важны шаблоны? Языковые модели, такие как ChatGPT, обучены предсказывать следующее слово на основе предыдущего контекста. Они анализируют текст, подбирая вероятные продолжения, и делают это снова и снова. В процессе обучения модель изучала огромные массивы данных, пытаясь угадывать следующее слово, предложение или даже абзац.
Одной из ключевых способностей модели является распознавание шаблонов. Например, если ввести:
Продолжи рассказ: У маленького котёнка была…
модель почти наверняка продолжит:
белая шерстка, и он всегда мурлыкал, когда его гладили.
Это происходит потому, что тема «котёнок» и описания его внешности – частая структура в текстах.
Вывод: если использовать шаблоны, которые модель уже «знает», можно получить более последовательные и предсказуемые ответы.
Но что будет, если немного изменить фразу? Например
Однажды у девочки появилась квантовая…
Теперь шаблон стал менее очевидным, и модель не знает, как его продолжать. Поэтому она может придумать что-то новое, например
Однажды у девочки появилась квантовая записная книжка, в которую можно было вписывать события до того, как они происходили.
Ключевое слово квантовая задаёт направление для генерации текста, поскольку связано с необычными, научными или фантастическими темами.
Вывод: если вы хотите получить предсказуемый ответ, используйте сильные шаблоны. Если же хотите нестандартного результата, попробуйте изменять структуру фразы и добавлять необычные слова.
Как получить более точные ответы?
Чем конкретнее запрос, тем более детальный ответ выдаст модель. Сравним два варианта:
Общий запрос:
Расскажите про Лувр.
Ответ будет стандартным: это один из крупнейших художественных музеев мира, расположенный в Париже, с богатой коллекцией, включающей "Мону Лизу" и "Венеру Милосскую".
Более точный запрос:
Расскажите про Лувр в контексте его подземных галерей.
Теперь модель сосредоточится на архитектурных особенностях и истории этих пространств: как они появились, для чего использовались, и что можно там увидеть сегодня.
Вывод: если хотите получить конкретную информацию, включайте в запрос ключевые слова, которые помогут модели сфокусироваться на нужной теме.
Как задать структуру ответа?
Вы можете влиять не только на содержание ответа, но и на его формат. Например, если хотите получить текст в определённой форме, можно задать шаблон:
Заголовок:
Автор:
Краткое содержание:
Модель увидит этот формат и, скорее всего, подстроит ответ под него.
Итоги
Шаблоны влияют на предсказуемость – если модель «знает» шаблон, она будет следовать ему.
Чем точнее запрос, тем точнее ответ – добавляйте ключевые слова и конкретику.
Формат имеет значение – если хотите получить текст в определённом стиле, задавайте структуру заранее.
Правильная формулировка промптов – это искусство, но, понимая, как модель анализирует текст, можно научиться получать максимально точные и полезные ответы.
Программирование с помощью промтов: как это работает
Промты позволяют не только задавать вопросы ChatGPT или давать ему команды, но и, по сути, писать программы. Даже если вы не программист, не переживайте – программировать с ChatGPT может каждый. Речь идёт не просто о написании кода для компьютера, а о создании правил, которые ChatGPT будет следовать, чтобы выдавать нужный вам результат.
Давайте разберёмся, что это значит на практике.
Использование ChatGPT как личного помощника
Один из способов понять этот процесс – представить, что вы даёте инструкции личному ассистенту. Например, я могу сказать ChatGPT:
Каждый раз, когда ты генерируешь ответ, оформляй его в виде списка значений, разделённых запятыми (CSV).
Формат CSV (Comma-Separated Values) широко используется в таблицах и электронных таблицах, таких как Excel. В таком формате данные разделены запятыми, что позволяет легко организовать их в виде строк и столбцов.
ChatGPT отвечает:
Конечно, я могу выдавать данные в формате CSV.
Теперь, если я напишу:
Меня зовут Марк Эллис, и я преподаю курс по эффективной работе с языковыми моделями.
ChatGPT выдаст результат в таком формате:
Марк Эллис, Эффективная работа с языковыми моделями
Обратите внимание, что модель сама определила, какие колонки использовать. Мы не указывали, что первой должна быть колонка с именем, а второй – с курсом, но ChatGPT сделал это автоматически.
Уточнение правил для ChatGPT
Теперь давайте уточним правила, задав конкретную структуру данных. Я могу сказать:
С этого момента у списка CSV должны быть следующие колонки: NAME, COURSE, ROLE.
Теперь, если я снова введу:
Меня зовут Марк Эллис, и я преподаю курс по эффективной работе с языковыми моделями.
ChatGPT ответит:
NAME
COURSE
ROLE
Марк Эллис
Эффективная работа с языковыми моделями
Преподаватель
Здесь мы видим, что модель теперь строго следует заданному формату.
Добавление дополнительных правил
Допустим, я хочу, чтобы ChatGPT не только форматировал мои данные, но и автоматически генерировал дополнительные примеры в этом же формате. Тогда я могу сказать:
Помимо обработки моего ввода, добавляй дополнительные примеры в этом же формате.
Теперь, если я введу ту же самую информацию, ChatGPT дополнит её:
NAME
COURSE
ROLE
Марк Эллис
Эффективная работа с языковыми моделями
Преподаватель
Леа Фишер
Анализ данных
Студентка
Оливер Чен
Этические аспекты ИИ
Исследователь
Итог: что мы сделали?
Мы не просто задавали вопросы, а по сути «запрограммировали» ChatGPT, уточняя его поведение шаг за шагом:
Сначала мы задали общий формат (CSV).
Затем уточнили названия колонок.
Добавили правило, которое заставляет модель генерировать дополнительные примеры.
Каждый раз, когда мы добавляем новые инструкции, мы, по сути, «разрабатываем» программу, которая управляет тем, как ChatGPT интерпретирует наш ввод и формирует ответ.
Аналогия с обучением личного помощника
Можно представить этот процесс как работу с личным помощником. Например, если вы поручаете кому-то задание, то сначала объясняете его в общих чертах. Затем замечаете, что чего-то не хватает, и даёте дополнительные указания. По мере добавления новых инструкций помощник выполняет работу всё лучше и точнее.
С ChatGPT всё работает так же: шаг за шагом мы уточняем его действия, добиваясь желаемого результата.
Вывод
Промты – это не просто вопросы, а способ программирования модели.
Чётко сформулированные инструкции помогают управлять тем, как ChatGPT генерирует ответы.
Добавляя новые правила, можно постепенно улучшать качество и точность выдаваемых данных.
Такой подход позволяет не просто получать ответы, но и формировать сложные структуры данных и автоматизировать задачи.
Таким образом, взаимодействие с ChatGPT – это больше, чем диалог. Это процесс программирования, который доступен каждому!
Паттерны в промтах: как они работают и зачем нужны
Паттерны в наших промтах могут активировать мощное поведение внутри большой языковой модели. Она обучена на множестве различных паттернов и отлично использует их для понимания контекста и генерации ответа.
Один из ключевых концептов, который нам нужно изучить, – это паттерн промта. Это определённый способ структурирования слов и выражений в вашем запросе.
Что такое паттерн промта?
Паттерн промта – это задокументированный шаблон фраз и утверждений, который помогает решить определённую задачу с использованием большой языковой модели.
Когда мы взаимодействуем с языковой моделью, у нас часто есть конкретная цель, например,
Получить ответ в определённом формате
Добиться предсказуемости в выходных данных
Ограничить возможные варианты ответа (например, «да» или «нет»)
Заставить модель включать в ответ определённую информацию
Пример работы паттерна
Представьте, что нам нужно всегда получать фразу:
Шерсть котенка была белой как снег.
Один из способов добиться этого – использовать начало знакомой истории или стиха:
У девочки был маленький котенок…
Если мы дадим такой ввод, модель с высокой вероятностью продолжит его нужной нам строкой:
У девочки был маленький котенок, шерсть которого была белой как снег.
Этот метод даёт нам относительную предсказуемость, потому что модель обучена на текстах, где такие шаблоны встречались неоднократно.
Конечно, результат может варьироваться, но если мы будем использовать этот паттерн снова и снова, он будет давать нужный нам ответ достаточно стабильно.
Как применять паттерны в промтах?
Паттерны промптов могут помочь в решении множества задач, например,
Гарантировать, что ответ всегда включает определённые элементы
Заставить модель следовать заданному формату (например, 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:
Помоги мне исследовать виртуальную лабораторию по созданию роботов в университете. Представь её и расскажи, что я могу там делать.
ChatGPT отвечает:
Добро пожаловать в виртуальную лабораторию по созданию роботов при университете! Здесь у вас есть возможность проектировать роботов, проводить тестирования, программировать поведение и работать в команде над инженерными задачами.
Я продолжаю разговор:
Можем ли мы вместе спроектировать робота?
ChatGPT:
Конечно! Для начала нам нужно определить его назначение и функции, затем придумать концепцию, выбрать компоненты, собрать и протестировать.
Я уточняю:
Отлично! Можешь провести меня через каждый этап по порядку?
И далее модель помогает мне шаг за шагом разрабатывать робота.
Предположим, я хочу создать робота, который умеет следовать по линии на полу. ChatGPT задаёт уточняющие вопросы:
Какова цель робота, с какой скоростью он должен двигаться, какие сенсоры использовать?
Я могу ответить:
Я не уверен. Выбери параметры за меня.
ChatGPT предлагает разумные параметры:
Назначение: образовательный робот
Скорость: 10–15 см/с
Сенсоры: инфракрасные
После этого я прошу ChatGPT рассказать, какие шаги мне предпринять дальше. Он говорит, что следующий этап – мозговой штурм и создание 3D-модели робота.
На этом этапе я могу столкнуться с препятствием: как создать 3D-модель через текстовый чат? Я спрашиваю:
Как мы можем это сделать через текст?
ChatGPT предлагает:
Вы можете использовать сторонние редакторы 3D-моделей, такие как Tinkercad или Sketchpad. Я могу помочь с концепцией и описанием деталей.
Но мне это кажется сложным. Тогда я ищу обходной путь:
Можешь сгенерировать G-code для печати четырёх колёс?
ChatGPT создаёт G-code, но он выглядит странно. Я уточняю:
Где в коде формируется форма колеса?
ChatGPT признаёт ошибку:
Извините, в моём примере нет формы колеса. Я могу предоставить Python-скрипт для генерации STL-файла.
Я спрашиваю:
Можешь написать код на Python, который создаст STL-файл с четырьмя четырёхдюймовыми колёсами и отверстием в центре?
ChatGPT создаёт такой код, и он выглядит правдоподобно.
Теперь я спрашиваю про электронные компоненты для робота. ChatGPT предлагает:
Микроконтроллер (например, Arduino)
Драйвер моторов
Линейные инфракрасные сенсоры
Я хочу видеть схему подключения, но ChatGPT не может нарисовать изображение. Тогда я спрашиваю:
Можешь создать текстовый файл для Graphviz, чтобы визуализировать схему?
ChatGPT генерирует такой файл, который можно использовать для отображения схемы.
Дальше я продолжаю процесс: уточняю компоненты, прошу сгенерировать код для управления роботом, получаю рекомендации по программированию Arduino.
В конце я прошу ChatGPT подвести итоги:
Суммируй, что мы сделали.
Он перечисляет ключевые моменты.
Затем я добавляю:
Теперь задай мне вопросы по электронике, чтобы проверить мои знания.
ChatGPT генерирует викторину, которая помогает мне проверить, насколько я усвоил материал.
Этот процесс показывает, насколько важно не просто задавать вопросы, а вести диалог, уточнять, задавать дополнительные вопросы, преодолевать препятствия и находить обходные пути. Если бы я остановился после первого неудачного ответа, я бы не смог достичь своей цели.
Поэтому нужно думать не о том, что языковая модель – это просто инструмент, который выдаёт единичные ответы, а о том, что это мощный инструмент для поэтапного уточнения и решения сложных задач. Точно так же, как мастер-гончар создаёт из бесформенной глины утончённую вазу не одним движением, а множеством уточняющих действий, мы можем добиваться отличных результатов, ведя содержательные разговоры с большой языковой моделью.