Урок 10 из 11•15 мин
Продвинутые техники и паттерны
Цели урока
После прохождения этого урока вы сможете:
- 1Освоить продвинутые паттерны промпт-инжиниринга
- 2Научиться избегать типичных ошибок
- 3Применять техники для production-систем
Паттерны, которые работают
1. Роль + Контекст + Задача + Формат
Универсальная структура промпта для большинства задач:
python
prompt_template = """
РОЛЬ: Ты — [кто ты и какова твоя экспертиза]
КОНТЕКСТ: [фоновая информация, которую нужно знать]
ЗАДАЧА: [что конкретно нужно сделать]
ФОРМАТ: [как должен выглядеть результат]
ДАННЫЕ:
"""{input_data}"""
"""2. Негативные инструкции
Говорите не только что делать, но и чего НЕ делать:
python
prompt = """
Напиши продающее описание товара.
ДЕЛАЙ:
- Фокусируйся на выгодах для покупателя
- Используй конкретные цифры
- Добавь призыв к действию
НЕ ДЕЛАЙ:
- Не используй превосходные степени без доказательств
- Не придумывай характеристики
- Не пиши больше 150 слов
"""3. Fallback и обработка ошибок
Всегда предусматривайте, что делать, если входные данные неполные или некорректные:
python
prompt = """
Извлеки контактные данные из текста.
ЕСЛИ контактов нет → верни: {"status": "not_found"}
ЕСЛИ данные неполные → верни то, что есть + флаг "incomplete": true
ЕСЛИ текст на другом языке → переведи и извлеки
Текст: """{text}"""
"""Типичные ошибки и как их избежать
| Ошибка | Почему плохо | Как исправить |
|---|---|---|
| Слишком общий промпт | Результат непредсказуем | Добавьте конкретику и примеры |
| Нет формата вывода | Сложно парсить результат | Укажите JSON/Markdown/структуру |
| Противоречивые инструкции | Модель путается | Проверьте на консистентность |
| Полагаться на "здравый смысл" | У модели другой "здравый смысл" | Явно укажите все правила |
| Игнорировать edge cases | Система ломается на необычных данных | Добавьте fallback-инструкции |
Техники для production
Версионирование промптов
python
# prompts/product_description_v2.py
PROMPT_VERSION = "2.1.0"
PROMPT_DATE = "2024-03-15"
PRODUCT_DESCRIPTION_PROMPT = """
# v2.1.0 - Добавлен контроль длины, улучшен формат
# v2.0.0 - Переход на JSON вывод
# v1.0.0 - Первоначальная версия
Ты — копирайтер маркетплейса...
"""
# Логируйте версию промпта вместе с результатом для отладкиA/B тестирование промптов
python
import random
def get_prompt_variant():
variants = {
"A": prompt_formal, # Формальный стиль
"B": prompt_friendly, # Дружелюбный стиль
}
variant = random.choice(["A", "B"])
return variant, variants[variant]
# Логируйте variant и метрики (конверсия, CTR, оценка пользователя)
# для определения лучшего вариантаВалидация вывода
python
import json
from pydantic import BaseModel, validator
class ProductDescription(BaseModel):
title: str
description: str
bullets: list[str]
@validator('title')
def title_length(cls, v):
if len(v) > 80:
raise ValueError('Title too long')
return v
@validator('bullets')
def bullets_count(cls, v):
if len(v) < 3 or len(v) > 7:
raise ValueError('Need 3-7 bullets')
return v
def generate_with_validation(prompt: str, max_retries: int = 3):
for attempt in range(max_retries):
response = call_llm(prompt)
try:
data = json.loads(response)
return ProductDescription(**data)
except (json.JSONDecodeError, ValueError) as e:
if attempt == max_retries - 1:
raise
# Добавляем ошибку в промпт для retry
prompt += f"\n\nПредыдущий ответ некорректен: {e}. Исправь."Комбинирование моделей
Разные задачи — разные модели. Не используйте GPT-4 там, где справится GPT-3.5.
| Задача | Рекомендуемая модель | Почему |
|---|---|---|
| Классификация, извлечение | GPT-3.5 / Claude Haiku | Быстро и дёшево |
| Генерация контента | GPT-4 / Claude Sonnet | Баланс качества и цены |
| Сложный анализ, код | GPT-4 / Claude Opus | Максимальное качество |
| Перевод | GPT-3.5 / DeepL API | Специализированные модели |
Пайплайн: GPT-3.5 классифицирует и извлекает → GPT-4 генерирует сложный контент → GPT-3.5 форматирует. Экономия до 70% бюджета.
Вопросы для размышления
- •Какие из этих паттернов вы уже используете?
- •Как вы тестируете и улучшаете свои промпты?
