Prompt Engineering vs Fine-Tuning: Критерии выбора стратегии
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: Чтение длинного промпта занимает время.
- Ограничение сложности: Есть предел тому, насколько сложные логические связи модель может извлечь из текста инструкции.
# Пример продвинутого 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:
- Снижение стоимости и Latency: Если ваш промпт занимает 5000 токенов примеров, чтобы добиться нужного формата, FT позволит убрать эти примеры. Вы отправляете только запрос (50 токенов) и получаете идеальный ответ. Экономия на входных токенах огромна.
- Специфический формат (Syntax Compliance): Если вам нужно генерировать сложный код (например, проприетарный язык запросов старой ERP-системы), промптинг может сбоить. FT «вбивает» синтаксис в веса модели.
- Стиль и Тон (Voice & Tone): Если бот должен отвечать как саркастичный пират или сухой юрист, FT улавливает эти нюансы лучше, чем промпт.
- Edge Cases: Когда у вас есть тысячи примеров редких ситуаций, которые не влезут даже в контекстное окно (или это будет слишком дорого).
// Пример структуры данных для 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 / RAG | Fine-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 будет НАИМЕНЕЕ эффективным решением?