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 = Машина для предсказания следующего токена
- LLM не "понимает" в человеческом смысле
- Отсутствует полная модель мира
- Работает с паттернами из обучающих данных
- Токены - не слова
- 1 слово может быть 1-4 токена
- "hello" = 1 токен, "tokenization" = 2-3 токена
- Это влияет на стоимость и скорость
- Контекстное окно - ограниченная рабочая память
- Claude 3.5 = 200k токенов (~150 страниц)
- Но качество падает ближе к концу (Контекст Rot)
- Структура и контекст = точность
- Ясная структура → лучшие предсказания
- Двусмысленность → неверные ответы
Упражнение: Будь 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 слова)
"Я основатель стартапа, пишу инвестору, стиль лаконичный и уверенный,
цель договориться о встрече в среду вечером" = КОНТЕКСТ
Полный запрос:
КОНТЕКСТ + ПРОМПТ = результат, который ты хочешь
Проблема:
Технически контекст и промпт - части одного запроса. И это создаёт путаницу.
Решение:
Когда пишешь промпт, явно отделяй контекст от инструкции:
## КОНТЕКСТ
[Роль, цель, ограничения, данные]
## ПРОМПТ
[Конкретная инструкция]
🧪 Экспериментальный подход на практике
Как пробовать:
- Пробуй и сравнивай результаты
Вариант А: "Создай компонент кнопки"
Вариант Б: "Создай компонент кнопки с поддержкой иконок и loading состояния"
- LLM знают про промптинг больше тебя
- Если результат странный, попробуй другой угол
- "А если сделать это через такую структуру?"
- "Переформулируй задачу более точно"
- Мета-промптинг (промпт, который создаёт промпты)
"Создай промпт, который будет направлять 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: ...
Когда использовать:
- Строишь переиспользуемый ассистент, а не разовый запрос
- Хочешь читаемость для ручного редактирования
- Нужна лёгкая версионность — 2–3 секции, удобно diff'ить
⚠️ Грехи промптинга и как их избежать
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>
✅ Чеклист хорошего промпта
Перед отправкой промпта, проверь:
- [ ] Роль ясна? (Кто и с какой экспертизой?)
- [ ] Задача конкретна? (Что точно нужно сделать?)
- [ ] Входные данные полные? (Есть ли все нужные данные?)
- [ ] Output определён? (Как узнать, что правильно?)
- [ ] Ограничения понятны? (Что не делать?)
- [ ] Нет дистракторов? (Есть ли лишний текст?)
- [ ] Важное в начале/конце? (Критично видно, не в середине?)
- [ ] Правильный тон? (Вежливо, без брани?)
- [ ] Структура ясна? (Легко парсить?)
🎯 Результат Meeting 3
Теперь ты знаешь:
- [ ] Четыре сдвига в работе с агентами
- [ ] Как писать эффективные ТЗ вместо команд
- [ ] Как экспериментировать и итерировать
- [ ] Как управлять вниманием (когда делегировать, когда решать)
- [ ] Механику LLM и почему это важно
- [ ] Как структурировать промпты
- [ ] Типичные ошибки и как их избежать
📝 Домашка
Задание 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