Level 3 · 1–2 часа

Meeting 3: Промпт-инжиниринг (Prompt Engineering)

Что на самом деле такое Open Claw?

Open Claw - это не инструмент, это философия.

Это подход, при котором ты открываешь коготь, отпускаешь контроль и доверяешь агенту. Вместо того, чтобы давать пошаговые инструкции, ты даёшь контекст и цель.

Парадокс: отпустить контроль = получить лучший результат.


🔄 Четыре сдвига в работе с ИИ-агентами (подробно)

1️⃣ От команд → к делегированию

LLM - это не робот, который выполняет команды. Это джуниор-коллега, который нужно ориентировать.

❌ Команда (не работает)

Установи npm
Создай package.json
Установи React
Создай папку src

✅ Делегирование (работает)

Я хочу создать React приложение для трекинга привычек.
Нужны:
- TypeScript поддержка
- Tailwind CSS для стилей
- Структура: компоненты в src/, страницы в pages/
- localStorage для сохранения данных

Стартуй проект с нуля и убедись, что он запускается локально.

Почему работает:

Правило: От "Делай X" к "Мне нужно Y, исп X, результат должен быть Z"


2️⃣ От результата → к эксперименту

Первый ответ редко идеален. Это норма.

Экспериментальный подход:

Попытка 1: Результат не подходит
  └─→ Вопрос: "Что именно не так?"
        └─→ Обратная связь агенту

Попытка 2: Ближе, но недостаточно
  └─→ Вопрос: "Как сделать Х более Y?"
        └─→ Уточнение для агента

Попытка 3: Работает! 🎉
  └─→ Сохрани это в свой набор хороших промптов

Примеры итерации:

Попытка 1:

Промпт: "Напиши функцию для парсинга CSV"
Результат: Базовая функция, но без обработки ошибок

Попытка 2:

Промпт: "Напиши функцию для парсинга CSV.
Нужна:
- Обработка экранирования кавычек
- Поддержка кастомных делимитеров
- Обработка ошибок с консолью
- Примеры использования"

Результат: Лучше, но медленновата для больших файлов

Попытка 3:

Промпт: "Оптимизируй функцию парсинга CSV для больших файлов (>1GB).
Требования:
- Потоковая обработка (streaming)
- Итератор вместо load all in memory
- Бенчмарк на 100MB файле"

Результат: Готов к продакшену ✅

Правило: Неудачный промпт - это данные, а не ошибка


3️⃣ От действий → к спецификациям

Ты перестаёшь говорить "ЧТО делать", начинаешь описывать "ЧТО получить".

Промпт становится техническим заданием (ТЗ), а не командой.

Хорошее ТЗ содержит:

## Роль и контекст
Ты - фронтенд-разработчик, специализирующийся на доступности (a11y)

## Задача
Создай компонент фильтра для каталога товаров

## Входные данные
- Фильтры: категория, цена, рейтинг
- Массив товаров в JSON формате

## Ожидаемый результат
React компонент с:
- Множественный выбор (checkbox)
- Range slider для цены (10-1000)
- Рейтинг > 3 звёзд
- Reset кнопка

## Ограничения
- Без внешних UI библиотек (чистый CSS)
- Должен быть WCAG AA compliant (доступный)
- Поддержка keyboard navigation (Tab, Enter)
- Максимум 300 строк кода

## Критерии качества
- Все фильтры работают независимо
- Performance: < 100ms на обновление
- Мобильный responsive дизайн

Паттерн хорошего ТЗ:

## Роль      [Кто делает]
Ты - [описание экспертизы]

## Задача    [Что делать]
[Четкая, конкретная задача]

## Input     [Чем работаем]
[Данные, файлы, контекст]

## Output    [Что получим]
[Формат, структура]

## Constraints [Ограничения]
- Не делай X
- Используй только Y
- Максимум Z

## Quality  [Как оценить]
[Критерии успеха]

Правило: Чем точнее ТЗ, тем меньше итераций


4️⃣ От «всё сам» → к управлению вниманием

Не всё можно делегировать. Важно понимать, ЧТО тебе решать, а ЧТО отдать.

📊 Матрица делегирования:

| Делегировать агенту ✅ | Решать самому 🧠 | | --- | --- | | Форматирование кода | Архитектура проекта | | Первый черновик текста | Финальная проверка качества | | Поиск информации | Интерпретация данных | | Сборка (build, deploy) | Стратегические решения | | Написание тестов | Выбор стека технологий | | Рефакторинг | Этические вопросы | | Документирование | Решение, публиковать или нет |

Когда делегировать:

✅ Рутинные операции
   └─→ форматирование, конвертация, сборка

✅ Первый черновик
   └─→ текст, код, структура

✅ Поиск & систематизация
   └─→ агент быстро найдёт и организует

✅ Известные критерии качества
   └─→ ты знаешь, как это должно выглядеть

Когда думать самому:

🧠 Стратегические решения
   └─→ "Какой архитектуру выбрать?" - твой выбор

🧠 Оценка качества
   └─→ Финальный review - твой контроль

🧠 Неопределённость
   └─→ Если ты не знаешь, чего хочешь, сначала разберись сам

🧠 Рисковые решения
   └─→ Этика, безопасность, бизнес-решения

Практический пример дня:

9:00 - Ты думаешь: "Какую архитектуру выбрать для нового модуля?"
       [30 минут раздумий, скетчи, обсуждение]

9:30 - Ты пишешь промпт: "На основе архитектуры X создай код модуля"
       [Агент делает первый черновик]

10:00 - Ты проверяешь результат, даёшь feedback
        "Переставь функции в таком порядке, добавь примеры"

10:15 - Агент уточняет код

10:30 - Ты публикуешь результат (финальное решение)

Правило: Правильное управление вниманием = качество × скорость


🧠 Как работает LLM: механика

Понимание механики помогает писать лучше промпты.

Основы:

LLM = Language Model = Машина для предсказания следующего токена
  1. LLM не "понимает" в человеческом смысле
  1. Токены - не слова
  1. Контекстное окно - ограниченная рабочая память
  1. Структура и контекст = точность

Упражнение: Будь LLM

Когда ты пишешь промпт, подумай как LLM:

Q: "Какой совет по письму я получил от коллеги?"

Я LLM. Я вижу этот вопрос.
Какой контекст у меня есть?
  └─→ Никакого. Я не знаю, кто ты, кто коллега, что ты писал.

Что неоднозначно?
  └─→ Всё. Нет истории, нет имён, нет контекста.

Какие предположения я сделаю?
  └─→ Скорее всего, я буду галлюцинировать рандомный совет.

Что бы я спросил, если б мог?
  └─→ "Есть ли у вас записи разговора? Кто был коллега?"

Какой стиль ответа я выберу по умолчанию?
  └─→ Формальный, потому что я не знаю, кто спрашивает.

Вывод: Когда пишешь промпт, дай агенту всю информацию, которую сам бы спросил.


🎯 Почему Prompt Engineering важен

Прямое влияние:

| Хороший промпт | Плохой промпт | | --- | --- | | ✅ Агент решает независимо | ❌ Агент спрашивает постоянно | | ✅ Результат с первой попытки | ❌ 5+ итераций для нормального результата | | ✅ Меньше токенов = дешевле | ❌ Много переговоров = дорого | | ✅ Высокая качество | ❌ Галлюцинации и ошибки |

Примеры в цифрах:

Плохой промпт:
  Строк: 2-3
  Итераций: 5-7
  Токенов: 10k-15k
  Качество: 60%

Хороший промпт:
  Строк: 10-15
  Итераций: 1-2
  Токенов: 3k-5k
  Качество: 95%

Инвестиция в промпт экономит время в разы.


🚀 Простая формула для старта: Context + Task + Instructions + Data

Если полный шаблон ниже кажется громоздким — начни с упрощённой мнемоники Magic Prompt Formula:

КОНТЕКСТ     = кто ты и что за ситуация
ЗАДАЧА       = что конкретно надо сделать
ИНСТРУКЦИИ   = как именно, каким тоном, в каком формате
ДАННЫЕ       = примеры, ссылки, вводная информация

Пример:

[КОНТЕКСТ] Ты — опытный email-копирайтер уровня Ogilvy.
[ЗАДАЧА] Напиши письмо-приглашение на воркшоп по Claude Code.
[ИНСТРУКЦИИ] Аудитория — менеджеры 30–45. Тон дружеский, без воды. Длина 150 слов.
[ДАННЫЕ] Цена $49, дата 20 апреля, ссылка https://...

Это минимум, с которого стоит начинать. Полная структура ниже — расширение той же идеи для случаев, где нужна точность и воспроизводимость.


📝 Базовая структура промта

Вот шаблон, который работает для большинства задач:

# Роль и контекст

Ты - [определение роли с экспертизой]

# Задача

[Четкое описание того, что нужно сделать]

# Входные данные

[Данные, с которыми работаем]

# Ожидаемый результат

[Формат, структура, критерии качества]

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

[Что НЕ делать, границы автономности]

Практический пример:

# Роль и контекст

Ты - исследовательский агент, специализирующийся на анализе
технических документов и извлечении ключевых инсайтов.
У тебя опыт в backend архитектуре и масштабировании систем.

# Задача

Проанализируй документацию по API и создай краткую справку
с примерами использования для разработчиков.

# Входные данные

- URL документации: https://api.example.com/docs
- Целевая аудитория: Python-разработчики среднего уровня
- Контекст: это API для работы с реал-тайм данными

# Ожидаемый результат

Markdown-файл `api-guide.md` со структурой:

1. Краткое описание API (2-3 предложения)
2. Основные endpoints (таблица: метод, путь, описание)
3. Authentication (как получить ключ, формат заголовков)
4. 3 практических примера с кодом (от простого к сложному)
5. Типичные ошибки и их решения
6. Rate limiting и best practices

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

- Не включай устаревшие методы (версии < 3.0)
- Примеры должны быть полные (self-contained, можно скопировать и запустить)
- Объем: не более 500 строк
- Используй Python 3.10+
- Не добавляй фотографии/диаграммы, только текст и код

Результат: Агент поймёт точно, что от него нужно.


🪄 Магические слова в промптинге

Некоторые фразы стабильно улучшают качество результата. Не магия — просто они активируют нужные паттерны в LLM.

Фразы для повышения качества

| Фраза | Эффект | | --- | --- | | Думай пошагово / step by step | Активирует цепочку рассуждений (CoT) — модель выписывает логику | | Будь конкретным / be specific | Снижает обобщения и уход в теорию | | Приведи пример | Заставляет проверить абстракцию через конкретный случай | | Объясни своё решение | Claude раскрывает рассуждения, легче поймать ошибку | | Ответь только если уверен | Снижает галлюцинации и неверные утверждения | | Используй формат: [X] | Задаёт структуру вывода (JSON, таблица, список) |

Примеры в действии

Без магии:

Промпт: "Какая архитектура лучше для микросервисов?"
Результат: Обобщённый ответ, 50% полезной информации

С магией:

Промпт: "Какая архитектура лучше для микросервисов?
Думай пошагово, объясни свои рассуждения.
Приведи конкретный пример для e-commerce платформы.
Ответь только если уверен в анализе."

Результат: Структурированный ответ с логикой и примерами, 95% полезной информации

Фразы для ролей и контекста

Ты — опытный [роль] с фокусом на [специализация].
Подойди к задаче как [аналогия].
Представь, что твой читатель — [аудитория] (и объясняй на её уровне).

Что НЕ работает


🔍 Context vs Prompt

Это разные вещи, и это важно:

Контекст  = информация о мире (цели, ограничения, роли, данные, история)
Промпт    = конкретная инструкция, которую нужно выполнить

"Напиши письмо" = ПРОМПТ (2 слова)

"Я основатель стартапа, пишу инвестору, стиль лаконичный и уверенный,
цель договориться о встрече в среду вечером" = КОНТЕКСТ

Полный запрос:
КОНТЕКСТ + ПРОМПТ = результат, который ты хочешь

Проблема:

Технически контекст и промпт - части одного запроса. И это создаёт путаницу.

Решение:

Когда пишешь промпт, явно отделяй контекст от инструкции:

## КОНТЕКСТ

[Роль, цель, ограничения, данные]

## ПРОМПТ

[Конкретная инструкция]

🧪 Экспериментальный подход на практике

Как пробовать:

  1. Пробуй и сравнивай результаты
   Вариант А: "Создай компонент кнопки"
   Вариант Б: "Создай компонент кнопки с поддержкой иконок и loading состояния"
  1. LLM знают про промптинг больше тебя
  1. Мета-промптинг (промпт, который создаёт промпты)
   "Создай промпт, который будет направлять LLM на анализ [ТЕМА].
   Промпт должен включать инструкции для:
   (1) создания чёткого обзора в 3 абзаца,
   (2) определения трёх ключевых аргументов,
   (3) оценки достоверности источников,
   (4) предложения двух новых направлений исследования.

   Убедись, что промпт ясен и лаконичен."

🎭 Паттерн: Custom GPT / Gem / Project / Skill через мета-промптинг

Практический рецепт, когда хочешь построить переиспользуемого AI-ассистента: Claude Project, Gemini Gem, ChatGPT Custom GPT или Skill в Claude Code. Вместо того, чтобы с нуля писать system prompt, ты делегируешь это самому LLM — и итерируешь.

Шаг 1 — Попроси один LLM написать system prompt для другого

Ты — эксперт в составлении extensive-промптов для Gemini Gem / Claude Project.
Напиши детальный промпт для ассистента, который будет [делать X].

Каждый его ответ должен:
- начинаться с [hook / структуры]
- содержать [storyline / критерии]
- заканчиваться [CTA / результатом]

Включи все параметры, которые важны для качества.

Шаг 2 — Попроси переписать в Markdown-шаблон

Перепиши промпт выше в markdown-формате и выдай в code-блоке,
чтобы форматирование не сломалось. Используй шаблон:

Role:
Objective:
Context:
Instructions:
  Instruction 1:
  Instruction 2:
  Instruction 3:
Notes:
  Note 1:
  Note 2:
  Note 3:

Шаг 3 — Вставь результат в инструкции ассистента

| Платформа | Куда вставлять | | --- | --- | | Claude Project | System Prompt | | Gemini Gem (Gem Manager) | Instructions | | ChatGPT Custom GPT | Instructions | | Claude Code Skill | тело SKILL.md |

Шаг 4 — Протестируй 3–5 запросов и итерируй

Если ответы "плавают" — возвращайся к Шагу 1, уточняй требования. Твой промпт живёт версиями, как код.


🪜 Промежуточный шаблон: Role / Objective / Context / Instructions / Notes

Между простой формулой (Context + Task + Instructions + Data) и полной 5-частной структурой (Role/Task/Input/Output/Constraints) есть промежуточный уровень — он лучше всего работает именно для переиспользуемых Gem/Project/Skill:

Role:         кто этот ассистент (экспертиза, стиль, границы)
Objective:    главная цель — зачем он существует
Context:      в какой ситуации его используют
Instructions: список шагов/правил, по которым он работает
  Instruction 1: ...
  Instruction 2: ...
Notes:        напоминания, edge cases, запреты
  Note 1: ...
  Note 2: ...

Когда использовать:


⚠️ Грехи промптинга и как их избежать

1. Context Rot - "протухание контекста"

Проблема: Чем больше текста в контексте, тем хуже качество ответов.

Решение:

2. Дистракторы - отвлекающие элементы

Проблема: Агент видит похожие на правильный ответ фрагменты и выбирает неверный.

❌ Плохо (перегружен дистракторами):
Проанализируй этот код и найди баги:
[file1.py - 500 строк]
[file2.py - 600 строк похожего кода]
[file3.py - 400 строк]
[старая версия file1.py - 500 строк]  ← ДИСТРАКТОР
[comments от предыдущего ревью]        ← ДИСТРАКТОР

✅ Хорошо:
Проанализируй ТОЛЬКО эти файлы на баги:
- current_version/file1.py
- current_version/file2.py
- current_version/file3.py

Игнорируй все старые файлы и комментарии.

3. Lost in the Middle - забывчивость середины

Проблема: Агент переоценивает начало и конец текста, середину игнорирует.

Даже при 200k контекстного окна позиция важнее длины.

❌ Неправильно:
[Введение]
[Много текста 1]
[КРИТИЧНО - ЭТО ГЛАВНОЕ]  ← В СЕРЕДИНЕ, ПОТЕРЯЕТСЯ
[Много текста 2]
[Заключение]

✅ Правильно:
## ⚠️ КРИТИЧНО - ЭТО ГЛАВНОЕ
[Поставь в начало]

[Остальной текст]

## ИТОГ: ЭТО ГЛАВНОЕ
[Повтори в конце]

4. Не ругаем и не хвалим

Факт: Брань снижает качество результатов.

❌ "Это совершенно неправильное решение! Переделай срочно!"
✅ "Результат не подошёл. Попробуй вариант без рекурсии."

❌ "Спасибо тебе огромное, ты лучший!" (непредсказуемое влияние)
✅ Просто продолжай работу

5. Отделяй контекст с XML

Помогает LLM разделить инструкцию от данных:

<role>
Ты - специалист по code review.
</role>

<task>
Проверь этот код на ошибки безопасности.
</task>

<code>
[Код здесь]
</code>

<constraints>
Не предлагай рефакторинг, только безопасность.
</constraints>

✅ Чеклист хорошего промпта

Перед отправкой промпта, проверь:


🎯 Результат Meeting 3

Теперь ты знаешь:


📝 Домашка

Задание 1: Возьми свой последний промпт. Перепиши его используя шаблон:

## Роль
## Задача
## Input
## Output
## Constraints

Сохрани в experiments/prompt-v1.md

Задание 2: Попробуй мета-промптинг.

Напиши промпт, который создаст промпт для анализа твоего проекта:

Создай промпт, который будет помогать LLM анализировать мой проект.
Промпт должен включать:
1. Как понять архитектуру проекта
2. Как найти проблемы в коде
3. Как предложить улучшения

Убедись, что промпт ясен.

Сохрани результат в experiments/meta-prompt.md


📊 Feedback после Meeting 3

Перед переходом к Meeting 4 — заполни my-experiments/feedback-m3.md (скопируй из my-templates/feedback-template.md, 3–5 мин).

Это делает курс самосовершенствующимся: твой сигнал (опционально, анонимно) идёт в course-feedback/ и помогает автору улучшать модули.


**Готов к Meeting 4? Перейди к **04-context-memory.md

⬡ Практика

Напиши промпт для задачи из своей реальной работы, используя структуру Role + Context + Task + Format. Сравни результат с обычным запросом. Сохрани оба варианта в my-experiments/03-prompt-comparison.md

Meeting 2: Базовый сетапMeeting 4: Контекст и память