Главная / Статьи / Инжиниринг промптов: управление большими языковыми моделями без финтюнинга

Инжиниринг промптов: управление большими языковыми моделями без финтюнинга

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

748 слов

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

Два способа управления моделью

Тонкая настройка и инжиниринг промптов стремятся к одной цели — полезному поведению модели — но с противоположными методами.

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

from openai import OpenAI
client = OpenAI()response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You are a helpful sentiment classifier. Respond with only 'positive' or 'negative'."},
        {"role": "user", "content": "I loved this movie"}
    ]
)print(response.choices[0].message.content)

Zero-shot vs Few-shot Prompting

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

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

prompt = """
Classify the sentiment of each review as positive or negative.
Review: "Absolutely fantastic, exceeded expectations!"
Sentiment: positiveReview: "Complete waste of money, broke in a week."
Sentiment: negativeReview: "I loved this movie"
Sentiment:
"""response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": prompt}]
)print(response.choices[0].message.content)

Структура хорошей подсказки

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

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

Техники формулировки запросов, которые стоит знать

Для более сложных задач выделяются несколько эффективных подходов:

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

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

    К чему это приводит

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

    Следующий этап — поиск по смыслу, а не по ключевым словам, затем использование полученного текста для генерации — относится к области эмбеддингов и генерации с улучшением за счёт поиска (RAG).