Prompt Engineering — это умение давать задачи AI так, чтобы получать именно тот результат, который нужен. Один и тот же AI может выдать бесполезный ответ или гениальный — зависит от того, как ты спросила.
Этот урок собран на основе официальных гайдов Anthropic и OpenAI по prompt engineering — то есть рекомендаций от самих создателей Claude и ChatGPT.
Ты уже умеешь отправлять запросы к Claude из кода (урок 2.3). Но качество ответа зависит не от кода — а от того, ЧТО ты пишешь в content. Это и есть prompt (промпт) — текст, который ты отправляешь AI.
Prompt Engineering — один из самых ценных навыков в AI. Люди, которые умеют правильно формулировать задачи для AI, получают результат в 10 раз лучше, чем те, кто пишет "ну сделай что-нибудь".
Anthropic и OpenAI выделяют одни и те же ключевые стратегии. Вот они — с примерами под твои проекты.
Из гайда OpenAI: "Модель не умеет читать мысли. Размытый промпт = размытый ответ."
Из гайда Anthropic: "Чем точнее твой запрос, тем лучше ответ."
Плохо:
"Напиши пост"
Хорошо:
"Напиши пост для Instagram про AI в бизнесе.
Целевая аудитория — предприниматели 25-40 лет.
Тон — дружелюбный, но экспертный.
Длина — 3-4 абзаца.
В конце — вопрос для вовлечения."
[РОЛЬ] Ты — {кто}.
[КОНТЕКСТ] Вот данные: {данные}.
[ЗАДАЧА] Сделай {что именно}.
[ФОРМАТ] Ответь в формате {формат}.
[ОГРАНИЧЕНИЯ] Не делай {чего}. Длина — {сколько}.
[ПРИМЕРЫ] Вот пример: {пример}.
Не обязательно использовать все 6 пунктов каждый раз. Но чем больше ты дашь — тем точнее результат.
# Без роли — общий ответ
"Как увеличить продажи?"
# С ролью — экспертный ответ с конкретикой
system = "Ты — директор по маркетингу с 15-летним опытом в digital."
"Как увеличить продажи?"
Примеры ролей:
"Ты — бизнес-аналитик. Отвечай цифрами и фактами."
"Ты — senior Python-разработчик. Пиши чистый код с комментариями."
"Ты — копирайтер для Instagram. Пишешь цепляющие короткие тексты."
"Ты — терпеливый учитель. Объясняешь сложное простым языком с аналогиями."
"Ответь в виде таблицы с колонками: Проблема | Причина | Решение"
"Дай 5 пунктов, каждый — одно предложение"
"Верни ответ в формате JSON: {name, email, company}"
"Напиши только код, без объяснений"
Из гайда Anthropic: "Запреты так же важны, как и указания. Без них Claude может добавить лишнее."
"Объясни квантовые вычисления.
НЕ используй математические формулы.
НЕ упоминай конкретные квантовые компьютеры.
Объясняй только через аналогии из повседневной жизни."
Из гайда Anthropic: "Примеры — самый надёжный способ показать Claude, ЧТО именно ты хочешь."
Из гайда OpenAI: "Покажите модели формат ответа, который вы хотите."
Вместо того чтобы объяснять словами — покажи 2-3 примера. AI поймёт паттерн и повторит.
system = """Ты классифицируешь сообщения из чата.
Примеры:
Сообщение: "Продаём 10 ASIC S19, цена договорная, пишите @miner_ivan"
Категория: Продажа оборудования
Сообщение: "Кто-нибудь знает почему хешрейт упал после обновления?"
Категория: Техническая проблема
Сообщение: "Привет всем, как дела?"
Категория: Общение (не заносить)
Теперь классифицируй новое сообщение по такому же принципу."""
Ещё пример — извлечение данных:
content = """Извлеки данные из текста.
Пример:
Текст: "Иван Смирнов, @ivan_s, ищу поставщика на 100 ASIC"
Результат: {"name": "Иван Смирнов", "contact": "@ivan_s", "request": "ищет поставщика на 100 ASIC"}
Пример:
Текст: "Народ, какой пул сейчас лучше?"
Результат: НЕ ЛИД
Теперь обработай:
Текст: "Khachatur Ghukasyan, kh.ghukasyan@ardshinbank.am, @kh_ghukas — хочет собрать согласие на инвестицию 20М+ в майнинг"
Результат:"""
Из гайда OpenAI: "Если просить сразу ответ — модель чаще ошибается."
Из гайда Anthropic: "Когда модель рассуждает вслух, она делает меньше ошибок — как человек, который записывает решение задачи, а не считает в уме."
Без chain of thought:
"Сколько будет стоить запуск AI-бота на 1000 пользователей в месяц?"
С chain of thought:
"Рассчитай стоимость запуска AI-бота на 1000 пользователей в месяц.
Рассуждай пошагово:
1. Сколько сообщений в среднем отправляет один пользователь?
2. Сколько токенов на одно сообщение?
3. Какая цена за токен у Claude Sonnet?
4. Итоговая сумма."
<thinking> — рекомендация AnthropicAnthropic рекомендует использовать тег <thinking> чтобы отделить рассуждения от финального ответа:
content = """Проанализируй, стоит ли инвестировать в этот проект.
Сначала рассуждай в теге <thinking> — пошагово разбери все за и против.
Потом дай финальный ответ после тега <answer>.
<thinking>
[Здесь Claude рассуждает — ты видишь его логику]
</thinking>
<answer>
[Здесь итоговый ответ]
</answer>"""
Из гайда Anthropic: "Claude отлично понимает XML-разметку. Это самый надёжный способ структурировать сложный промпт."
Из гайда OpenAI: "Используйте разделители (```, \"\"\", ---, XML-теги) чтобы отделить инструкцию от данных."
content = """
<instructions>
Проанализируй отзыв клиента.
Определи тональность и главную проблему.
</instructions>
<format>
Тональность: позитивная / негативная / нейтральная
Проблема: [одно предложение]
Рекомендация: [что делать]
</format>
<review>
Заказал доставку на 12:00, привезли в 15:30. Еда холодная,
курьер даже не извинился. Больше не буду заказывать.
</review>
"""
# <instructions> — что делать
# <format> — как отвечать
# <review> — данные для анализа
content = """Переведи текст ниже на английский.
---
Привет, как дела? Сегодня отличная погода!
---
Дай только перевод, без пояснений."""
Без разделителей Claude может перепутать инструкцию с данными.
Из гайда Anthropic: "Если даёшь Claude длинный текст — размести его В НАЧАЛЕ, а инструкции В КОНЦЕ. Claude лучше запоминает то, что идёт последним."
content = """
<document>
[здесь длинный текст контракта на 5 страниц]
</document>
На основе документа выше, ответь:
1. Какая сумма сделки?
2. Какие сроки?
3. Есть ли штрафные санкции?
Ответь простым языком, без юридического жаргона."""
Из гайда OpenAI: "Модель может уверенно выдумывать факты. Чтобы этого избежать — прикладывайте текст-источник."
Если тебе нужны точные факты — дай Claude текст-источник и скажи отвечать только на его основе:
content = """Используя ТОЛЬКО текст ниже, ответь на вопрос.
Если ответа нет в тексте — скажи "информация не найдена".
НЕ придумывай и НЕ дополняй от себя.
<source>
Тарифы API Claude:
- Haiku: $0.25 / 1M input tokens, $1.25 / 1M output tokens
- Sonnet: $3 / 1M input tokens, $15 / 1M output tokens
- Opus: $15 / 1M input tokens, $75 / 1M output tokens
</source>
Вопрос: Сколько стоит использование Claude Sonnet?"""
Это критично для продуктов, где точность важна — юридические документы, медицина, финансы.
Из гайда OpenAI: "Одна огромная задача = больше ошибок. Маленькие шаги = точнее результат."
Из гайда Anthropic: "Как в программировании: одна функция — одна задача."
Плохо — всё в одном промпте:
"Напиши бизнес-план, сделай лендинг, придумай название
и рассчитай юнит-экономику"
Хорошо — разбей на цепочку:
Запрос 1: "Придумай 10 названий для AI-бота анализа крипто-чатов"
Запрос 2: "Напиши структуру лендинга для [выбранное название]"
Запрос 3: "Рассчитай юнит-экономику при 1000 пользователей"
Из гайда OpenAI: "Сначала определите тип запроса, потом обработайте его по нужному сценарию."
system = """Ты обрабатываешь входящие заявки.
Шаг 1: Определи тип заявки:
- "покупка" — клиент хочет купить
- "продажа" — клиент хочет продать
- "вопрос" — клиент задаёт вопрос
- "мусор" — спам или нерелевантное
Шаг 2: Если покупка или продажа — извлеки данные в JSON.
Если вопрос — сформулируй ответ.
Если мусор — ответь "SKIP"."""
Из гайда Anthropic: "Попросите модель перепроверить свой ответ. Самопроверка снижает процент ошибок."
content = """Переведи этот текст на английский.
Текст: [текст]
После перевода перепроверь:
- Все ли предложения переведены?
- Нет ли грамматических ошибок?
- Сохранён ли смысл оригинала?
Если нашёл ошибки — исправь и покажи финальную версию."""
Из гайда Anthropic: В API можно задать начало ответа — и Claude продолжит в нужном формате.
# В API можно начать ответ за Claude:
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[
{"role": "user", "content": "Извлеки имя и email из текста: Иван Петров, ivan@mail.com"},
{"role": "assistant", "content": '{"name": "'}
# Claude продолжит в JSON, потому что мы начали за него
]
)
Из обоих гайдов: Первый промпт редко идеален. Prompt engineering — итеративный процесс:
system = """Ты анализируешь сообщения из Telegram-чата про майнинг.
<instructions>
Определи, является ли сообщение бизнес-лидом.
Лид — когда в сообщении есть имя/компания + контакт + запрос.
Обычные разговоры — игнорируй.
</instructions>
<examples>
Сообщение: "Иван Смирнов, @ivan_s, ищу поставщика на 100 ASIC"
Ответ: {"opportunity": "Иван Смирнов", "contact": "@ivan_s", "notes": "ищет поставщика на 100 ASIC"}
Сообщение: "Народ, какой пул сейчас лучше?"
Ответ: НЕ ЛИД
Сообщение: "Продаю 5 S19, б/у, Москва, писать @miner_alex"
Ответ: {"opportunity": "@miner_alex", "contact": "@miner_alex", "notes": "продаёт 5 S19, б/у, Москва"}
</examples>
Классифицируй новое сообщение по этим правилам."""
system = """Ты — копирайтер для Instagram-аккаунта про AI и технологии.
<rules>
Аудитория: предприниматели 25-40 лет
Тон: экспертный, но простой, без технического жаргона
НЕ используй: "в современном мире", "в эпоху технологий" и подобные клише
</rules>
<format>
1. Цепляющий первый абзац (hook) — максимум 2 предложения
2. 2-3 абзаца основной мысли с конкретным примером
3. Вопрос в конце для вовлечения
4. 5-7 хештегов
</format>"""
content = """
<document>
[текст контракта]
</document>
<instructions>
На основе документа выше, ответь:
1. Какая сумма сделки?
2. Какие сроки?
3. Есть ли штрафные санкции? Если да — какие?
4. Какие риски ты видишь для покупателя?
Если информация отсутствует в документе — напиши "не указано".
НЕ додумывай то, чего нет в тексте.
Ответь в виде таблицы, простым языком.
</instructions>"""
Вот как выглядит хороший промпт в чате из урока 2.3:
from anthropic import Anthropic
client = Anthropic()
history = []
system_prompt = """Ты — AI-ассистент для предпринимателей в сфере AI.
<rules>
- Отвечай конкретно, с цифрами и примерами
- Если не знаешь — честно скажи, не выдумывай
- Предлагай конкретные следующие шаги
- НЕ используй общие фразы типа "это зависит от многих факторов"
</rules>
<format>
- Короткий ответ на вопрос (2-3 предложения)
- Конкретный пример или расчёт
- Что делать дальше (1-2 пункта)
</format>"""
while True:
user_input = input("\nТы: ")
if user_input.lower() == "выход":
break
history.append({"role": "user", "content": user_input})
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=system_prompt,
messages=history
)
reply = response.content[0].text
history.append({"role": "assistant", "content": reply})
print(f"\nAI: {reply}")
| Ошибка | Как исправить |
|---|---|
| Слишком размытый промпт ("напиши что-нибудь про AI") | Добавить контекст, формат, аудиторию, длину |
| Нет примеров | Добавить 2-3 примера желаемого ответа (few-shot) |
| Всё в одном промпте | Разбить на цепочку маленьких задач |
| Требовать точные факты без источника | Приложить справочный текст |
| Нет ограничений | Явно сказать, чего НЕ делать |
| Не указан формат ответа | Описать формат: JSON, список, таблица |
| Не итерируешь | Менять промпт, если ответ не устраивает — это нормально |
| Данные и инструкции смешаны | Использовать разделители или XML-теги |
| Техника | Когда использовать | Пример |
|---|---|---|
| Роль (system) | Всегда | "Ты — бизнес-аналитик" |
| Few-shot | Когда нужен точный формат | Показать 2-3 примера ответа |
| Chain of thought | Сложные задачи, расчёты | "Рассуждай пошагово" |
| XML-теги | Сложные промпты с данными | <instructions>, <document> |
| Разделители | Отделить данные от инструкции | --- или """ |
| Справочный текст | Нужны точные факты | "Отвечай ТОЛЬКО на основе текста" |
| Самопроверка | Критичные задачи | "Перепроверь свой ответ" |
| Prefill | Нужен строгий формат | Начать ответ за Claude |
| Подзадачи | Большая задача | Разбить на 3-4 запроса |
Возьми плохой промпт и сделай из него хороший по формуле (роль + контекст + задача + формат + ограничения + примеры):
Плохой: "Напиши код для бота"
Добавь в свой чат (урок 2.3) system промпт с 2-3 примерами. Например, бот который классифицирует вопросы на "технический" / "бизнес" / "общий".
Задай Claude сложный вопрос двумя способами:
1. Просто вопрос
2. Тот же вопрос + "Рассуждай пошагово в теге <thinking>"
Сравни качество ответов.
Перепиши один из примеров ниже, используя XML-теги <instructions>, <context>, <format>:
"Проанализируй 3 конкурентов: Notion, Obsidian, Roam.
Для каждого укажи цену, аудиторию, главное преимущество.
Формат — таблица."
Напиши system промпт для одного из своих проектов:
- Анализатор чата майнеров (лиды в таблицу)
- Генератор постов для Instagram
- Бот-ментор для обучения AI
Задача 1: Что такое few-shot prompting?
Задача 2: Почему "Рассуждай пошагово" улучшает ответ?
Задача 3: Зачем нужны XML-теги в промпте?
Задача 4: Клиент жалуется, что твой AI-бот иногда выдумывает факты. Какую технику использовать?
<thinking>)<instructions>, <document>)| Термин | Что значит |
|---|---|
| Промпт | Текст-инструкция, которую ты отправляешь модели, чтобы получить нужный ответ. |
| Системный промпт | Специальная инструкция, которая задаёт роль и правила поведения модели на весь разговор. |
| Few-shot | Техника, при которой ты показываешь модели 2-3 примера нужного результата, и она повторяет паттерн. |
| Zero-shot | Техника, при которой ты даёшь задачу без примеров — модель должна справиться сама. |
| Chain of thought | Техника, при которой ты просишь модель рассуждать пошагово, что улучшает качество сложных ответов. |
| Role prompting | Приём, при котором ты назначаешь модели роль (эксперт, учитель, редактор), чтобы она отвечала в нужном стиле. |
| XML-теги | Специальные метки вроде <instructions> и <document>, которые помогают структурировать сложные промпты. |
| Температура | Параметр, управляющий случайностью ответов: низкая — точные и предсказуемые, высокая — творческие и разнообразные. |
| Контекст | Вся информация, которую модель "видит" при генерации ответа — твои сообщения, системный промпт и история. |
| Инструкция | Чёткое указание модели, что именно нужно сделать — главная часть любого промпта. |
| Ограничение (constraint) | Правило, которое запрещает модели что-то делать — например, "не используй жаргон" или "отвечай только по тексту". |
| Формат вывода | Указание, в каком виде модель должна дать ответ — список, таблица, JSON, короткий абзац и т.д. |
В следующем уроке — Tokens, контекст, стоимость. Ты узнаешь, сколько стоит каждый запрос к AI и как оптимизировать расходы при создании AI-продуктов.