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

<Callout type="tip" title="Попробуйте улучшитель промптов">
Хотите автоматически оптимизировать свои промпты? Используйте наш инструмент [Улучшитель промптов](/developers#enhancer). Он анализирует ваш промпт, применяет техники оптимизации и показывает похожие промпты сообщества для вдохновения.
</Callout>

## Компромиссы оптимизации

Каждая оптимизация предполагает компромиссы. Понимание этого поможет вам принимать осознанные решения:

<InfoGrid items={[
  { label: "Качество vs. Стоимость", description: "Более высокое качество часто требует больше токенов или лучших моделей", example: "Добавление примеров улучшает точность, но увеличивает количество токенов", exampleType: "text", color: "blue" },
  { label: "Скорость vs. Качество", description: "Более быстрые модели могут уступать в возможностях", example: "GPT-4 умнее, но медленнее, чем GPT-4o-mini", exampleType: "text", color: "purple" },
  { label: "Стабильность vs. Креативность", description: "Низкая температура = более предсказуемо, но менее креативно", example: "Температура 0.2 для фактов, 0.8 для мозгового штурма", exampleType: "text", color: "green" },
  { label: "Простота vs. Надёжность", description: "Обработка крайних случаев добавляет сложность", example: "Простые промпты не справляются с необычными входными данными", exampleType: "text", color: "amber" }
]} />

## Измерение того, что важно

Прежде чем оптимизировать, определите критерии успеха. Что значит «лучше» для вашего случая использования?

<InfoGrid items={[
  { label: "Точность", description: "Как часто результат правильный?", example: "90% предложений кода компилируются без ошибок", exampleType: "text", color: "blue" },
  { label: "Релевантность", description: "Отвечает ли результат на то, что было спрошено?", example: "Ответ напрямую отвечает на вопрос, а не уходит в сторону", exampleType: "text", color: "blue" },
  { label: "Полнота", description: "Все ли требования охвачены?", example: "Все 5 запрошенных разделов включены в результат", exampleType: "text", color: "blue" },
  { label: "Задержка", description: "Сколько времени до получения ответа?", example: "p50 < 2с, p95 < 5с для чат-приложений", exampleType: "text", color: "purple" },
  { label: "Эффективность токенов", description: "Сколько токенов нужно для того же результата?", example: "500 токенов против 1500 токенов для эквивалентного результата", exampleType: "text", color: "purple" },
  { label: "Согласованность", description: "Насколько похожи результаты для похожих входных данных?", example: "Один и тот же вопрос получает структурно похожие ответы", exampleType: "text", color: "green" }
]} />

<Callout type="info" title="Что означают p50 и p95?">
Перцентильные метрики показывают распределение времени отклика. **p50** (медиана) означает, что 50% запросов выполняются быстрее этого значения. **p95** означает, что 95% быстрее — это позволяет отследить медленные выбросы. Если ваш p50 равен 1с, но p95 равен 10с, большинство пользователей довольны, но 5% испытывают раздражающие задержки.
</Callout>

<TryIt 
  title="Определите ваши метрики успеха"
  description="Используйте этот шаблон, чтобы уточнить, что вы оптимизируете, прежде чем вносить изменения."
  prompt={`Помоги мне определить метрики успеха для оптимизации моего промпта.

**Мой случай использования**: \${useCase}
**Текущие проблемы**: \${painPoints}

Для этого случая использования помоги мне определить:

1. **Основная метрика**: Какая единственная метрика наиболее важна?
2. **Второстепенные метрики**: Что ещё следует отслеживать?
3. **Допустимые компромиссы**: Чем можно пожертвовать ради основной метрики?
4. **Красные линии**: Какой уровень качества неприемлем?
5. **Как измерять**: Практические способы оценки каждой метрики`}
/>

## Оптимизация токенов

Токены стоят денег и увеличивают задержку. Вот как сказать то же самое меньшим количеством токенов.

### Принцип сжатия

<Compare 
  before={{ label: "Многословно (67 токенов)", content: "I would like you to please help me with the following task. I need you to take the text that I'm going to provide below and create a summary of it. The summary should capture the main points and be concise. Please make sure to include all the important information. Here is the text:\n\n[text]" }}
  after={{ label: "Лаконично (12 токенов)", content: "Summarize this text, capturing main points concisely:\n\n[text]" }}
/>

**Тот же результат, на 82% меньше токенов.**

### Техники экономии токенов

<InfoGrid items={[
  { label: "Уберите вежливости", description: "\"Please\" и \"Thank you\" добавляют токены, не улучшая результат", example: "\"Please summarize\" → \"Summarize\"", color: "green" },
  { label: "Устраните избыточность", description: "Не повторяйтесь и не констатируйте очевидное", example: "\"Write a summary that summarizes\" → \"Summarize\"", color: "green" },
  { label: "Используйте сокращения", description: "Где смысл понятен, сокращайте", example: "\"for example\" → \"e.g.\"", color: "green" },
  { label: "Ссылайтесь по позиции", description: "Указывайте на контент вместо его повторения", example: "\"the text above\" вместо повторного цитирования", color: "green" }
]} />

<TryIt 
  title="Компрессор промптов"
  description="Вставьте многословный промпт, чтобы получить оптимизированную по токенам версию."
  prompt={`Сожми этот промпт, сохраняя его смысл и эффективность:

Исходный промпт:
"\${verbosePrompt}"

Инструкции:
1. Удали ненужные вежливости и слова-заполнители
2. Устрани избыточность
3. Используй лаконичные формулировки
4. Сохрани все существенные инструкции и ограничения
5. Поддерживай ясность — не жертвуй пониманием ради краткости

Предоставь:
- **Сжатая версия**: Оптимизированный промпт
- **Сокращение токенов**: Примерный процент экономии
- **Что было удалено**: Краткое объяснение того, что было удалено и почему это было безопасно удалить`}
/>

## Оптимизация качества

Иногда вам нужны лучшие результаты, а не более дешёвые. Вот как улучшить качество.

### Усилители точности

<InfoGrid items={[
  { label: "Добавьте проверку", description: "Попросите модель проверить свою работу", example: "\"...затем проверь, что твой ответ правильный\"", color: "blue" },
  { label: "Запросите уверенность", description: "Сделайте неопределённость явной", example: "\"Оцени свою уверенность от 1 до 10 и объясни любую неопределённость\"", color: "blue" },
  { label: "Несколько подходов", description: "Получите разные точки зрения, затем выберите", example: "\"Предложи 3 подхода и порекомендуй лучший\"", color: "blue" },
  { label: "Явное рассуждение", description: "Заставьте думать пошагово", example: "\"Думай шаг за шагом и покажи своё рассуждение\"", color: "blue" }
]} />

### Усилители согласованности

<InfoGrid items={[
  { label: "Детальные спецификации формата", description: "Покажите точно, как должен выглядеть результат", example: "Включите шаблон или схему", exampleType: "text", color: "purple" },
  { label: "Примеры few-shot", description: "Предоставьте 2-3 примера идеального результата", example: "\"Вот как выглядит хороший результат: [примеры]\"", color: "purple" },
  { label: "Низкая температура", description: "Уменьшите случайность для более предсказуемого результата", example: "Температура 0.3-0.5 для стабильных результатов", exampleType: "text", color: "purple" },
  { label: "Валидация результата", description: "Добавьте шаг проверки для критических полей", example: "\"Проверь, что все обязательные поля присутствуют\"", color: "purple" }
]} />

<TryIt 
  title="Улучшитель качества"
  description="Добавьте элементы, улучшающие качество, к вашему промпту."
  prompt={`Улучши этот промпт для получения более качественных результатов:

Исходный промпт:
"\${originalPrompt}"

**Какую проблему качества я наблюдаю**: \${qualityIssue}

Добавь соответствующие усилители качества:
1. Если проблема в точности → добавь шаги проверки
2. Если проблема в согласованности → добавь спецификации формата или примеры
3. Если проблема в релевантности → добавь контекст и ограничения
4. Если проблема в полноте → добавь явные требования

Предоставь улучшенный промпт с объяснениями для каждого добавления.`}
/>

## Оптимизация задержки

Когда скорость важна, каждая миллисекунда на счету.

### Выбор модели по потребности в скорости

<InfoGrid items={[
  { label: "Реальное время (< 500мс)", description: "Используйте самую маленькую эффективную модель + агрессивное кэширование", example: "GPT-4o-mini, Claude Haiku, кэшированные ответы", exampleType: "text", color: "red" },
  { label: "Интерактивный (< 2с)", description: "Быстрые модели, включён стриминг", example: "GPT-4o-mini со стримингом", exampleType: "text", color: "amber" },
  { label: "Толерантный (< 10с)", description: "Модели среднего уровня, баланс качества/скорости", example: "GPT-4o, Claude Sonnet", exampleType: "text", color: "green" },
  { label: "Асинхронный/Пакетный", description: "Используйте лучшую модель, обрабатывайте в фоне", example: "GPT-4, Claude Opus для офлайн-обработки", exampleType: "text", color: "blue" }
]} />

### Техники ускорения

<InfoGrid items={[
  { label: "Короткие промпты", description: "Меньше входных токенов = быстрее обработка", example: "Сжимайте промпты, удаляйте ненужный контекст", exampleType: "text", color: "cyan" },
  { label: "Ограничьте вывод", description: "Установите max_tokens для предотвращения бесконтрольных ответов", example: "max_tokens: 500 для резюме", exampleType: "text", color: "cyan" },
  { label: "Используйте стриминг", description: "Получайте первые токены быстрее, лучше UX", example: "Стриминг для любого ответа > 100 токенов", exampleType: "text", color: "cyan" },
  { label: "Кэшируйте агрессивно", description: "Не пересчитывайте идентичные запросы", example: "Кэшируйте частые вопросы, шаблонные результаты", exampleType: "text", color: "cyan" }
]} />

## Оптимизация стоимости

В масштабе небольшая экономия умножается в значительное влияние на бюджет.

### Понимание затрат

Используйте этот калькулятор для оценки ваших затрат на API для разных моделей:

<CostCalculatorDemo />

### Стратегии снижения затрат

<InfoGrid items={[
  { label: "Маршрутизация моделей", description: "Используйте дорогие модели только когда нужно", example: "Простые вопросы → GPT-4o-mini, Сложные → GPT-4", exampleType: "text", color: "green" },
  { label: "Эффективность промптов", description: "Короткие промпты = меньше затрат на запрос", example: "Сократите 50% токенов = 50% экономии на входе", exampleType: "text", color: "green" },
  { label: "Контроль вывода", description: "Ограничьте длину ответа, когда полная детализация не нужна", example: "\"Ответь в 2-3 предложениях\" вместо без ограничений", color: "green" },
  { label: "Пакетирование", description: "Объединяйте связанные запросы в один", example: "Анализ 10 элементов в одном промпте вместо 10 отдельных вызовов", exampleType: "text", color: "green" },
  { label: "Предварительная фильтрация", description: "Не отправляйте запросы, которые не требуют ИИ", example: "Сопоставление ключевых слов перед дорогой классификацией", exampleType: "text", color: "green" }
]} />

## Цикл оптимизации

Оптимизация — это итеративный процесс. Вот систематический подход:

### Шаг 1: Установите базовый уровень

Нельзя улучшить то, что не измеряешь. Прежде чем что-то менять, тщательно задокументируйте начальную точку.

<InfoGrid items={[
  { label: "Документация промпта", description: "Сохраните точный текст промпта, включая системные промпты и шаблоны", example: "Версионируйте промпты как код", exampleType: "text", color: "blue" },
  { label: "Тестовый набор", description: "Создайте 20-50 репрезентативных входных данных, охватывающих типичные и крайние случаи", example: "Включите лёгкие, средние и сложные примеры", exampleType: "text", color: "blue" },
  { label: "Метрики качества", description: "Оцените каждый результат по вашим критериям успеха", example: "% точности, оценка релевантности, соответствие формату", exampleType: "text", color: "purple" },
  { label: "Метрики производительности", description: "Измерьте токены и время для каждого тестового случая", example: "Сред. вход: 450 токенов, Сред. выход: 200 токенов, p50 задержка: 1.2с", exampleType: "text", color: "purple" }
]} />

<TryIt 
  title="Шаблон документации базового уровня"
  description="Используйте это для создания всесторонней документации базового уровня перед оптимизацией."
  prompt={`Создай документацию базового уровня для моего проекта оптимизации промптов.

**Текущий промпт**:
"\${currentPrompt}"

**Что делает промпт**: \${promptPurpose}

**Текущие проблемы, которые я наблюдаю**: \${currentIssues}

Сгенерируй шаблон документации базового уровня с:

1. **Снимок промпта**: Точный текст промпта (для контроля версий)

2. **Тестовые случаи**: Предложи 10 репрезентативных тестовых входных данных, которые я должен использовать, охватывающих:
   - 3 типичных/лёгких случая
   - 4 случая средней сложности  
   - 3 крайних случая или сложных входных данных

3. **Метрики для отслеживания**:
   - Метрики качества, специфичные для этого случая использования
   - Метрики эффективности (токены, задержка)
   - Как оценивать каждую метрику

4. **Базовая гипотеза**: Какую производительность я ожидаю от текущего решения?

5. **Критерии успеха**: Какие показатели сделают меня удовлетворённым оптимизацией?`}
/>

### Шаг 2: Сформулируйте гипотезу

<Compare 
  before={{ label: "Размытая цель", content: "Я хочу сделать мой промпт лучше." }}
  after={{ label: "Проверяемая гипотеза", content: "Если я добавлю 2 примера few-shot, точность улучшится с 75% до 85%, потому что модель научится ожидаемому паттерну." }}
/>

### Шаг 3: Тестируйте одно изменение

Меняйте одну вещь за раз. Запускайте обе версии на одних и тех же тестовых входных данных. Измеряйте важные метрики.

### Шаг 4: Анализируйте и принимайте решение

Сработало? Оставьте изменение. Навредило? Откатите. Нейтрально? Откатите (проще — лучше).

### Шаг 5: Повторяйте

Генерируйте новые гипотезы на основе того, что вы узнали. Продолжайте итерации, пока не достигнете целей или не дойдёте до убывающей отдачи.

## Чек-лист оптимизации

<Checklist 
  title="Перед развёртыванием оптимизированного промпта"
  items={[
    { text: "Определены чёткие метрики успеха" },
    { text: "Измерена базовая производительность" },
    { text: "Протестированы изменения на репрезентативных входных данных" },
    { text: "Проверено, что качество не ухудшилось" },
    { text: "Проверена обработка крайних случаев" },
    { text: "Рассчитана стоимость при ожидаемом масштабе" },
    { text: "Протестирована задержка под нагрузкой" },
    { text: "Задокументировано, что изменилось и почему" }
  ]}
/>

<Quiz 
  question="У вас есть промпт, который хорошо работает, но слишком дорог в масштабе. Что нужно сделать В ПЕРВУЮ ОЧЕРЕДЬ?"
  options={[
    "Немедленно переключиться на более дешёвую модель",
    "Удалить слова из промпта для сокращения токенов",
    "Измерить, какая часть промпта использует больше всего токенов",
    "Добавить кэширование для всех запросов"
  ]}
  correctIndex={2}
  explanation="Прежде чем оптимизировать, измеряйте. Вам нужно понять, куда уходят токены, прежде чем вы сможете эффективно их сократить. В промпте может быть ненужный контекст, многословные инструкции, или он может генерировать более длинные результаты, чем нужно. Измерение подскажет, на чём сосредоточить усилия по оптимизации."
/>
