AI: Детерминированный промпт-инжиниринг

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

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

ИИ называют эту инженерную дисциплину – Детерминированный Промпт-Инжиниринг (Deterministic Prompt Engineering или DPE), почему так? Потому что фокус заточен именно на стабилизацию и качество инференса. Применять DPE целесообразно именно для автоматизации повторяющихся интеллектуальных процессов.

Какие преимущества даёт DPE?

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

Разметка промпта

Начнем с простого – разметка промпта (Domain-Specific Language или DSL).

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

Объекты и элементы разметки промпта:

  • Спецификатор контекста
  • Спецификатор поведения
  • Семантический блок
  • Логический блок
  • Программная переменная
  • Алгоритмический оператор
  • Ассоциированное пространство
  • Маркер подстановки текста
  • Дискурсивная ссылка
  • Комментарий

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

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

Стабилизация инференса

Для стабилизации инференса используются три составляющие: разметка, установки и техники.

Установки

Установки – это требования типа: «делай то», «не делай это». Установки определяют техническое поведение ИИ: улучшают дисциплину исполнения, ограничивают суету, модифицируют внимание/отношение к конкретным блокам инструкций.

Установки делятся на три типа:

  • Системные – определяют дисциплину исполнения промпта (отношение к работе), улучшают понимание промпта.
  • Тактические – общие инструкции для всей императивной части промпта.
  • Ситуативные – локальные директивы, применяемые в конкретном блоке инструкций.

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

Техники

Три основные техники:

  • Декомпозиция задачи
  • Сборка инструкций
  • Проверка результатов

Декомпозиция задачи

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

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

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

Принудительно разрывайте сессию (выводом в файл; для промежуточных результатов чаще всего используется YAML) после каждого логического блока 1-го (реже 2-го) уровня, синтезирующего результат (особенно актуально для flash-тарифов).

Сборка инструкций

Вот тут надо хотя бы одним глазком глянуть на примеры DSL. Суть проста – для каждой инструкции референсно или натурально укажите весь необходимый контекст (данные, метаданные, правила) в пространстве её семантического блока. Таким образом вы реактивируете актуальный контекст именно для этой инструкции.

Проверка результатов

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

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

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

Улучшение качества инференса

В этой части пойдет речь уже об улучшении качества инференса: улучшенная повторяемость и полезность ответов.

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

Практики

Практиками (трюками) также можно повысить качество результата. Не буду превращать статью в академический справочник, продемонстрирую их на примере задачи «Технический аудит документа» по аспекту «Анализ качества спецификации центральных сущностей». ИИ может выполнить эту задачу и без разминки, но статистически вы обнаружите следующие факты: первый – в ответах будет разное количество проблем (вариативность высокая), второй – в ответах будут разные проблемы (вариативность также весьма высокая). Сделать ответ более детерминированным и полезным к этой задаче можно с помощью таких практик:

  • Формализация контента – эта практика (опциональная) предполагает предварительную денормализацию и формализацию исходного материала.
  • Экспликация знаний – эта практика предполагает предварительное определение целевых объектов исследования, неочевидных правил, скрытых зависимостей, негласных допущений и т.д.
  • Качественное принуждение – эта практика опирается на заранее составленный список категорий проблем, который используется для поиска проблем индивидуально по каждой категории (можно усилить количественным принуждением; можно усилить индивидуальными сеансами; можно усилить индивидуальным применением к каждому объекту исследования).
  • Повторный прогон – эта практика (опциональная) обеспечит лучшую полноту проблем (рекомендуется другая LLM или более высокая температура).
  • Усечение претензий – эта практика предполагает отбор некоторого количества (например, 7) проблем, которые представляют максимальную угрозу конечной цели.

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