Chain-of-Thought и Few-Shot промптинг для сложных задач
Введение: От интуиции к логике
Добро пожаловать на урок, который разделит вашу практику работы с LLM на «до» и «после». Мы переходим от простых запросов к архитектуре мышления. В мире Gemini 3, обладающего огромным контекстным окном и мультимодальными возможностями, промпт-инжиниринг перестает быть просто подбором слов. Это становится проектированием алгоритмов мышления на естественном языке.
Давайте честно: большие языковые модели (LLM) по своей природе — это вероятностные машины, а не логические. Когда вы задаете сложный вопрос, модель пытается угадать ответ, основываясь на статистике обучающих данных. Это похоже на «Систему 1» мышления по Даниэлю Канеману — быстрое, интуитивное, но подверженное ошибкам суждение.
Наша задача сегодня — заставить Gemini включить «Систему 2»: медленное, последовательное и логическое мышление. Для этого мы используем две мощнейшие техники: Chain-of-Thought (CoT) и Few-Shot Prompting.
Стратегия Few-Shot: Сила примера
Zero-Shot (нулевой пример) — это когда мы просто просим модель что-то сделать. Few-Shot (несколько примеров) — это методика обучения в контексте (In-Context Learning), где мы показываем модели паттерн «входные данные -> желаемый результат».
Почему это критично для Enterprise-решений? Потому что инструкции могут быть интерпретированы по-разному, а примеры задают жесткий стандарт формата и тональности.
Анатомия идеального Few-Shot промпта:
- Инструкция: Четкое описание задачи.
- Примеры (Shots): 3-5 пар «Вопрос - Ответ», демонстрирующих разные грани задачи (включая сложные или пограничные случаи).
- Целевой запрос: Новые данные, которые нужно обработать.
В Gemini 3, благодаря огромному контекстному окну, мы можем использовать стратегию Many-Shot, загружая сотни примеров для настройки под специфический корпоративный стиль без дообучения (fine-tuning) самой модели.
import google.generativeai as genai
import os
# Инициализация Gemini 3 (предполагаемая версия модели)
model = genai.GenerativeModel('gemini-1.5-pro-latest')
# Задача: Классификация обращений в техподдержку с определением приоритета
# Мы используем Few-Shot, чтобы задать JSON-формат и логику приоритетов
prompt = """
Ты - AI-аналитик службы поддержки. Твоя задача: проанализировать тикет, определить категорию и выставить приоритет (Low, Medium, High, Critical).
Ответ должен быть строго в формате JSON.
Пример 1:
Тикет: "Здравствуйте, я не могу найти кнопку смены пароля в личном кабинете. Подскажите, где она?"
Ответ: {"category": "UX/UI", "priority": "Low", "sentiment": "Neutral", "action": "Send instruction link"}
Пример 2:
Тикет: "При попытке оплаты заказа сервис выдает ошибку 500. Деньги списались, но заказ не создан! Срочно решите!"
Ответ: {"category": "Billing/Critical Bug", "priority": "Critical", "sentiment": "Angry", "action": "Escalate to Tier 2"}
Пример 3:
Тикет: "Хотелось бы увидеть темную тему в приложении в будущем обновлении."
Ответ: {"category": "Feature Request", "priority": "Low", "sentiment": "Positive", "action": "Log in backlog"}
Тикет: "Система виснет при генерации отчета за год. Жду уже 20 минут, ничего не происходит. Это блокирует работу бухгалтерии."
Ответ:
"""
response = model.generate_content(prompt)
print(response.text)
Chain-of-Thought (CoT): Думай, прежде чем говорить
Если Few-Shot задает форму ответа, то Chain-of-Thought (цепочка рассуждений) задает качество содержания. Суть метода заключается в том, чтобы заставить модель генерировать промежуточные шаги рассуждения перед выдачей финального ответа.
Исследования показывают, что при сложных математических, логических или стратегических задачах точность моделей с CoT возрастает кратно. Почему? Потому что модель «проговаривает» логику, и каждый следующий токен генерируется с учетом предыдущих верных умозаключений.
Два подхода к CoT:
- Zero-Shot CoT: Самый простой хак. Просто добавьте в конец промпта фразу: «Let's think step by step» (Давай подумаем шаг за шагом). Это магическим образом активирует рассуждение.
- Manual CoT (Few-Shot CoT): Вы даете примеры (как в Few-Shot), но в поле «Ответ» вы пишете не просто результат, а полное рассуждение, которое к нему привело.
# Пример сложной логической задачи с использованием Manual CoT
cot_prompt = """
Задача: Определить, является ли сделка подозрительной (Fraud Detection) на основе логов.
Пример рассуждения:
Входные данные: Пользователь ID_45 из Берлина совершил покупку на $50 в 10:00. В 10:15 тот же ID_45 совершил покупку на $2500 из Нью-Йорка.
Рассуждение:
1. Анализируем геолокацию: Первая транзакция в Берлине, вторая в Нью-Йорке.
2. Анализируем время: Разница между транзакциями составляет 15 минут.
3. Проверяем физическую возможность: Переместиться из Берлина в Нью-Йорк за 15 минут невозможно.
4. Анализируем суммы: Вторая сумма ($2500) значительно выше первой и превышает средний чек.
5. Вывод: Наблюдается невозможная скорость перемещения (impossible travel velocity) и резкий скачок суммы.
Вердикт: FRAUD_DETECTED
Входные данные: Пользователь ID_99 купил кофе за $5 в Лондоне. Через 4 часа купил билет на поезд за $100 в Манчестере.
Рассуждение:
"""
response = model.generate_content(cot_prompt)
print(response.text)
Мультимодальный CoT в Gemini 3
Gemini 3 уникальна тем, что она мультимодальна нативно (natively multimodal). Это означает, что мы можем применять Chain-of-Thought не только к тексту, но и к изображениям и видео. Это открывает двери для сложных Enterprise-кейсов, таких как автоматический аудит безопасности по видеокамерам или разбор сложных схем оборудования.
Как это работает?
Вместо того чтобы просто спросить «Что на картинке?», мы просим модель разложить визуальный анализ на этапы. Например: «Сначала идентифицируй все объекты на схеме, затем проследи связи между ними, найди, где связь прерывается, и на основе этого сделай вывод о причине поломки».
Создайте промпт для Gemini 3, который анализирует скриншот интерфейса веб-сайта и предлагает улучшения UX. Промпт должен использовать комбинированную технику Few-Shot + Chain-of-Thought.
Советы для Enterprise-разработки
При внедрении этих техник в продакшн учитывайте следующие нюансы:
- Разделяйте логику и данные: Используйте плейсхолдеры в промптах (например,
{{user_input}}) и подставляйте данные программно. Это предотвращает Prompt Injection. - Самокритика (Self-Correction): Для критически важных задач можно добавить этап, где модель просят «проверить свои рассуждения на наличие ошибок» перед финальным ответом.
- Контроль длины: CoT увеличивает количество выходных токенов (и стоимость). Используйте его там, где важна точность, а не скорость.
В чем главное преимущество использования Chain-of-Thought (CoT) по сравнению с обычным промптингом для решения математических задач?