Prompt Engineering vs Fine-Tuning: Критерии выбора стратегии

40 минут Урок 21

Prompt Engineering vs Fine-Tuning: Стратегия выбора

Добро пожаловать на один из самых важных уроков модуля. Если вы работаете с LLM достаточно долго, вы неизбежно сталкиваетесь с дилеммой: «Достаточно ли мне написать хороший промпт, или пришло время тренировать свою модель?».

В экосистеме Gemini 3 этот вопрос стоит особенно остро. С одной стороны, у нас есть гигантское контекстное окно (1M+ токенов), которое позволяет загружать целые книги в промпт. С другой — требования к задержке (latency), стоимости и жесткости формата могут подталкивать к дообучению (Fine-Tuning).

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

Аналогия для понимания

Представьте, что вы нанимаете сотрудника:

  • Prompt Engineering — это наем эрудированного универсала. Вы даете ему подробную инструкцию (контекст) и примеры того, что нужно сделать. Он читает инструкцию каждый раз перед выполнением задачи. Это гибко, но медленно, если инструкция огромная.
  • Fine-Tuning — это отправка сотрудника на курсы повышения квалификации. Вы тратите время и деньги на его обучение до начала работы. После этого ему не нужна инструкция — он «спинным мозгом» чувствует, как выполнять задачу. Это быстро и эффективно, но переучивать его сложно.

1. Потенциал Prompt Engineering в Gemini 3

Прежде чем бросаться в Fine-Tuning, нужно выжать максимум из инжиниринга промптов. Gemini 3 меняет правила игры благодаря двум факторам: огромному контекстному окну и Context Caching.

In-Context Learning (ICL)

Современные модели обладают способностью к обучению в контексте (ICL). Если вы предоставите модели 50 примеров (Few-Shot Prompting) прямо в промпте, она часто работает не хуже, чем дообученная на этих же данных модель.

Преимущества промптинга:

  • Мгновенная итерация: Изменили текст — сразу проверили результат.
  • Отсутствие «Cold Start»: Не нужно разворачивать отдельные эндпоинты.
  • Универсальность: Одна модель может выполнять разные задачи в зависимости от входящего текста.

Ограничения:

  • Стоимость инференса: Если ваш промпт занимает 10 000 токенов, вы платите за их обработку при каждом запросе (если не используете кэширование).
  • Latency: Чтение длинного промпта занимает время.
  • Ограничение сложности: Есть предел тому, насколько сложные логические связи модель может извлечь из текста инструкции.

python
# Пример продвинутого Prompt Engineering с использованием Gemini SDK
# Здесь мы используем технику Few-Shot для классификации тональности
# без необходимости дообучения.

import google.generativeai as genai
import os

# Настройка API
genai.configure(api_key=os.environ["GOOGLE_API_KEY"])
model = genai.GenerativeModel('gemini-1.5-pro')

# Системная инструкция задает роль
system_instruction = """
Ты - эксперт по анализу тональности финансовых новостей.
Твоя задача: классифицировать заголовок как POSITIVE, NEGATIVE или NEUTRAL.
Также укажи степень уверенности от 0 до 1.
Формат ответа JSON: {"sentiment": "...", "confidence": ...}
"""

# Few-Shot примеры (Обучение в контексте)
examples = [
    "Ввод: Акции TechCorp упали на 15% после отчета. -> Вывод: {\"sentiment\": \"NEGATIVE\", \"confidence\": 0.95}",
    "Ввод: PharmaInc объявляет о прорыве в испытаниях вакцины. -> Вывод: {\"sentiment\": \"POSITIVE\", \"confidence\": 0.98}",
    "Ввод: Рынок ожидает решения ФРС по ставке. -> Вывод: {\"sentiment\": \"NEUTRAL\", \"confidence\": 0.85}"
]

# Новый запрос
user_input = "Ввод: Квартальная прибыль банка превысила ожидания, но прогноз на год снижен."

# Сборка промпта
full_prompt = system_instruction + "\nПримеры:\n" + "\n".join(examples) + "\n" + user_input + " -> Вывод:"

response = model.generate_content(full_prompt)
print(response.text)

2. Когда переходить к Fine-Tuning?

Fine-Tuning (FT) — это процесс обновления весов модели на вашем наборе данных. В контексте Gemini мы обычно говорим о PEFT (Parameter-Efficient Fine-Tuning), например, LoRA, что делает процесс быстрее и дешевле, чем полное переобучение.

Главные мифы о Fine-Tuning

Миф №1: FT нужен, чтобы научить модель новым знаниям.
Реальность: FT плохо подходит для запоминания фактов. Для знаний лучше использовать RAG (Retrieval Augmented Generation). FT нужен для обучения форме, стилю и поведению.

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

Истинные причины для Fine-Tuning:

  1. Снижение стоимости и Latency: Если ваш промпт занимает 5000 токенов примеров, чтобы добиться нужного формата, FT позволит убрать эти примеры. Вы отправляете только запрос (50 токенов) и получаете идеальный ответ. Экономия на входных токенах огромна.
  2. Специфический формат (Syntax Compliance): Если вам нужно генерировать сложный код (например, проприетарный язык запросов старой ERP-системы), промптинг может сбоить. FT «вбивает» синтаксис в веса модели.
  3. Стиль и Тон (Voice & Tone): Если бот должен отвечать как саркастичный пират или сухой юрист, FT улавливает эти нюансы лучше, чем промпт.
  4. Edge Cases: Когда у вас есть тысячи примеров редких ситуаций, которые не влезут даже в контекстное окно (или это будет слишком дорого).

json
// Пример структуры данных для Fine-Tuning (формат JSONL)
// Обратите внимание: здесь нет инструкций, только пары ввод-вывод.
// Модель учится паттерну "на лету".

{"messages": [{"role": "user", "content": "Конвертируй дату: 12 мая 2023"}, {"role": "model", "content": "2023-05-12T00:00:00Z"}]}
{"messages": [{"role": "user", "content": "Конвертируй дату: завтра"}, {"role": "model", "content": "OFFSET(NOW(), 1, 'DAY')"}]}
{"messages": [{"role": "user", "content": "Конвертируй дату: первый понедельник октября"}, {"role": "model", "content": "CALC_DATE('OCT', 1, 'MON')"}]}
// ... и еще 500+ таких примеров для обучения специфическому языку запросов

3. Матрица принятия решений

Как выбрать стратегию на практике? Используйте эту таблицу критериев.

КритерийPrompt Engineering / RAGFine-Tuning
ЗадачаОтветы на вопросы, суммаризация, общие задачи.Специфический формат вывода, подражание стилю, узкоспециализированные задачи.
ЗнанияНовые, часто меняющиеся данные (используем RAG).Статичные паттерны поведения, глубокое понимание нишевого жаргона.
Объем данныхМало примеров (< 50).Много качественных примеров (> 500).
LatencyВыше (нужно обрабатывать длинный контекст).Ниже (короткий промпт, быстрая генерация).
СтоимостьДешевле на старте, дороже при масштабировании (плата за Input Tokens).Дороже старт (обучение), дешевле при больших объемах (экономия Input Tokens).

Гибридный подход

В современной разработке часто используют комбинацию: RAG + Fine-Tuning.
Вы используете RAG, чтобы найти актуальную информацию (контекст), и подаете её в дообученную модель (Fine-Tuned Model), которая знает, как идеально отформатировать этот контекст в нужный вам отчет.

Упражнение

Сценарий: Вы разрабатываете чат-бота для технической поддержки проприетарного оборудования (станки ЧПУ модели X-2000). У вас есть 5000 PDF-файлов с мануалами и 20 000 логов успешных диалогов поддержки. <br><br>Задача: Бот должен отвечать на вопросы механиков точно по инструкции, используя специфический технический сленг компании.<br><br>Какую архитектуру вы выберете?<br>1. Только Prompt Engineering.<br>2. Только Fine-Tuning.<br>3. RAG (поиск по мануалам) + стандартная модель.<br>4. RAG (поиск по мануалам) + Fine-Tuning (на логах диалогов).<br><br>Обоснуйте свой выбор.

Вопрос

В каком случае Fine-Tuning будет НАИМЕНЕЕ эффективным решением?