Хаки промпт-инжиниринга от Google

Хаки промпт-инжиниринга от Google

Недавно вышел 68-страничный мануал от Google про как делать промпт-инжиниринг. В англоязычном интернете мануал наделал Хайфа. По этому я все прочитал и выписал основные идеи с примерами.

Ничего супер революционного не было, но пару интересных хаков себе отметил.

Step-back prompting

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

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

Вместо того, чтобы просить по-одной:

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

Вы сначала попросите:

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

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

Хаки промпт-инжиниринга от Google

Температура, Top-p, Top-k настройки

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

Температура определяет, насколько предсказуемым или творческим будет ответ. (задает уровень случайности в выборе следующего токена ответа). Вот что это означает на практике:

Промпт

Придумай короткий рассказ (до 100 слов) о человеке, который однажды проснулся с суперспособностью

Ответы:

Температура - 0.1

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

'Температура - 0.7

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

'Температура - 1.5

'Евгений проснулся на рассвете с ощущением странности. Закрыв глаза, он все еще видел мир в полной детализации — как будто влажный асфальт улицы, шум людей, их унылые мысли и тайные желания беспрепятственно проходили сквозь его веки. Путая реальность с мечтой, он медленно обошел старинный фасад своего дома и пересек дорогу — на сей раз закрытые глаза направляли его более уверенно, чем вся прошлая его жизнь. Тесного утра Евгление отправился в больницу узаяновия по сволю побпности... Грядут нов миу Conospceptions. найдеLewis I school disconnect подdinner delete siz Barber Filters Gaming i AnarchAiropp directi... (дальше белиберда)

Указать температуру можно при обращении к API. В случае с OpenAI, например, вот так:

import openai client = openai.OpenAI(api_key="...") prompt = """ Придумай короткий рассказ (до 100 слов) о человеке, который однажды проснулся с суперспособностью """ response = client.chat.completions.create( model="gpt-4", messages=[ {"role": "system", "content": ""}, {"role": "user", "content": prompt} ], temperature = 1, top_p = .8, max_tokens = 1500 ) response_text = response.choices[0].message.content.strip() response_text

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

Tree-of-Thought

Хаки промпт-инжиниринга от Google

Подход довольно большой, и сам по себе тянет на мануал, по этому в статье в сабже его только упоминают.

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

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

Есть несколько возможных подходов:

А. Кластеризация и поиск закономерностей в неструктурированных даных, а затем фильтровать квесты, которые подходят каждому кластеру.

Б. Разметить анкеты квестами, которые забронировал клиент, и обучить классификатор

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

Система с tree-of-thought (как и человек исследователь), берет каждый из вариантов, и углубляется в него, пока не дойдет до какого-то логического итога. Причем каждый вариант тоже ветвится на варианты. Например вариант Б, про классификатор можно разделить на классификацию методом:

  • Логическая регрессия
  • Решающий лес
  • Нейросеть
  • и т.д.

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

Чтобы такая модель работала, надо написать сразу несколько приложений, и отладить их работу вместе:

  1. LLM-интерфейс — OpenAI, Mistral, Claude, HuggingFace и т.д.
  2. Prompter Agent — шаблон, превращающий текущую ситуацию в запрос.
  3. Checker Module — логика валидации шагов (можно начать с rule-based).
  4. Memory Module — хранение истории шагов и partial solutions.
  5. ToT Controller — логика: продолжить/откатиться/сменить путь.
  6. (опц.) GUI или CLI — визуализация дерева решений, ходов и reasoning.

Самый интересный из них — ToT solver. Работает, примерно, так:

  • начать с пустого решения;
  • запросить у LLM шаг;
  • проверить его (валидно ли?);
  • если да — запомнить, продолжить;
  • если нет — вернуться и попробовать другой шаг;
  • остановиться, когда найдено полное решение или исчерпаны пути.

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

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

Структурированные форматы на входе и входе

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

Формат ответа: JSON вида: {{ "Short 1": "...", "Short 2": "...", "Short 3": "..." }} Важно: ответ должен быть строго в формате JSON, без пояснений и текста до или после.

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

А что, если JSON схему можно использовать не только для ВЫВОДА нейросети, но и для ВХОДА? Оказывается так и есть, и это помогает нейросети лучше понять контекст и избежать мисинтерпритаций. Например, для генерации коротких описаний можно подавать больше контекста в структурированном виде, сфокусировать нейросеть на важном, и получить более информативные описания, например вот так:

{ "task": "Сгенерировать краткое описание квеста на основе названия и полного описания, сохраняя смысл и связь с названием.", "constraints": { "max_length": 92, "exclude_from_title": true, "forbidden_lexis": ["насилие", "кровь", "война", "убийство", "оружие"], "should_reflect": ["жанр", "атмосфера"], "avoid": ["общие фразы", "штампы"], "diversity_required": true, "unique_descriptions": true }, "meta": { "brand": "Quest Stars", "price": 4500, "release_date": 01/03/2020, "smart_categories": ["хоррор", "sci-fi", "киберпанк", "мистика", "квест-приключение", "иммерсив"] } }

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

CoT и ReAct

Chain of thought и ReAct — просто интересные внутренние особенности, которые ни как особо на вас не повлияют, если вы пользуетесь chatGPT. Он и так сам применит их когда нужно.

Chain of thought заставляет модель рассуждать последовательно, повышая точность в логических задачах. Reason & Act помогает модели поискать в интернете, если это необходимо для ответа.

Все.

Начать дискуссию