Оперативное проектирование

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

Хорошо сформулированное задание:

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

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

В этом модуле мы будем использовать общий пример: BlogBuddy, помощник по написанию текстов на основе искусственного интеллекта, созданный по образцу использования API Prompt в CyberAgent .

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

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

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

  • Контекст : Определяет роль и область применения модели, чтобы она понимала, как себя вести.
  • Инструкция : Назначает модели конкретную задачу.
  • Входные переменные : контекст, специфичный для конкретной ситуации, предоставляемый вашим приложением в режиме реального времени.
  • Формат вывода : определяет ожидаемую структуру выходных данных. Например, вам могут потребоваться выходные данные в формате JSON.
  • Примеры : Продемонстрируйте, как следует выполнять задачу для одного или нескольких других входных данных.
  • Ограничения : Установите четкие лимиты, чтобы обеспечить согласованность, безопасность и соответствие фирменному стилю выпускаемой продукции.

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

### Context

You are a writing assistant for blog authors.
Your job is to generate helpful, concise, and engaging content.

### Instruction

Generate 3 alternative titles for the user's blog post with a given style.

### Input variables

Here is the content of the blog post:
${blogPostContent}

Here is the desired style:
${titleStyle}

### Output format

Return valid JSON ONLY, in the following exact structure:
{
  "titles": ["Title option 1", "Title option 2", "Title option 3"]
}

### Examples

Example input:
{
  "blogPostContent": "I finally visited the small neighborhood café I've been eyeing for months...",
  "titleStyle": "friendly"
}

Example output:
{
  "titles": [
    "A First Visit to the Neighborhood Café",
    "Trying the Café I've Wanted to Visit for Months",
    "My Experience at a Long-Awaited Local Spot"
  ]
}
### Constraints

- Each title must be under 128 characters.
- Titles must be original, not copied verbatim from the draft.
- Keep the tone natural and human. Avoid emojis unless explicitly requested.
- Avoid sensationalism or clickbait.
- If the draft includes multiple topics, choose the most prominent topic.

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

Системные и пользовательские подсказки

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

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

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

Большинство API для генеративного ИИ позволяют структурировать запрос в виде массива сообщений, каждое из которых имеет роль (системная или пользовательская) и содержимое. Это упрощает разделение стабильных глобальных инструкций от динамических входных данных, обрабатываемых каждым запросом отдельно.

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

Варианты использования с ограничениями

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

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

Для реализации этого с помощью API Prompt мы будем использовать initialPrompts для определения поведения на системном уровне для всей сессии:

// Defines stable behavior for the entire session
const session = await LanguageModel.create({
  initialPrompts: [
    {
      role: "system",
      content: `You are a blog-writing assistant.
      Your task is to generate high-quality titles for blog posts.
      Always respond in concise, friendly language.
      Return exactly 3 alternative titles.
      Produce valid JSON with a "titles" array of strings.`
    }
  ]
});

Когда пользователь нажимает кнопку «Показать заголовки» , появляется запрос на отображение текущего контента:

// The only variable input is the blog content
const result = await session.prompt(blogContent);

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

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

Гибкие задачи предполагают подробные подсказки от пользователя.

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

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

К передовым методам относятся:

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

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

Распространенные методы подсказок

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

Подсказка без предварительного обучения

Вы описываете задачу для модели и надеетесь на лучшее. Например:

"What is the capital of France?"

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

Подсказка с небольшим количеством попыток

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

You classify user messages into one of the following categories:
- "positive"
- "negative"
- "neutral"
Here are examples to guide your classifications:
Input: "I love this product! It works perfectly."
Output: { "label": "positive" }

Input: "This is terrible. I want a refund."
Output: { "label": "negative" }

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

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

Метод подсказок, основанный на логической цепочке мыслей.

Вы побуждаете модель к пошаговому рассуждению перед выдачей ответа. Шаги могут быть описаны явно или могут быть оставлены на усмотрение модели. Например:

"Think step-by-step to identify the main idea of this paragraph. Then produce a
short heading under 60 characters."

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

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

Побуждение к саморефлексии

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

"Review your previous output.
Identify unclear phrasing and rewrite it more concisely."

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

Ваши выводы

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

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

Ресурсы

Каждый из этих методов имеет свои варианты и лучшие практики. Существует широкий спектр подробных внешних ресурсов, например:

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

Проверьте свое понимание

Какие типы правил можно указать в системной подсказке?

Конкретные входные переменные (например, ввод пользователя), ожидаемая структура выходных данных, роль модели и ограничение на количество символов.
Отличная работа, всё верно!
Здесь размещается только пользовательский ввод.
Не совсем так, попробуйте ещё раз.
Чтобы определить роль и область применения модели, необходимо, чтобы она понимала, как себя вести.
Не совсем так, попробуйте ещё раз.
Какую модель и какого размера вы используете?
Нет, попробуйте еще раз.

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

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

Когда подсказки, задаваемые в течение короткого времени, наиболее полезны?

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

Что представляет собой техника побуждения к саморефлексии?

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