← НАЗАД К КУРСУ Этап 2 · Урок 4 из 6

Урок 2.4 — Prompt Engineering

Prompt Engineering — это умение давать задачи AI так, чтобы получать именно тот результат, который нужен. Один и тот же AI может выдать бесполезный ответ или гениальный — зависит от того, как ты спросила.

Этот урок собран на основе официальных гайдов Anthropic и OpenAI по prompt engineering — то есть рекомендаций от самих создателей Claude и ChatGPT.


Зачем это нужно

Ты уже умеешь отправлять запросы к Claude из кода (урок 2.3). Но качество ответа зависит не от кода — а от того, ЧТО ты пишешь в content. Это и есть prompt (промпт) — текст, который ты отправляешь AI.

Prompt Engineering — один из самых ценных навыков в AI. Люди, которые умеют правильно формулировать задачи для AI, получают результат в 10 раз лучше, чем те, кто пишет "ну сделай что-нибудь".


6 стратегий из официальных гайдов

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


Стратегия 1: Пиши чёткие и конкретные инструкции

Из гайда OpenAI: "Модель не умеет читать мысли. Размытый промпт = размытый ответ."

Из гайда Anthropic: "Чем точнее твой запрос, тем лучше ответ."

Плохо:
"Напиши пост"

Хорошо:
"Напиши пост для Instagram про AI в бизнесе.
Целевая аудитория — предприниматели 25-40 лет.
Тон — дружелюбный, но экспертный.
Длина — 3-4 абзаца.
В конце — вопрос для вовлечения."

Формула хорошего промпта:

[РОЛЬ]         Ты — {кто}.
[КОНТЕКСТ]     Вот данные: {данные}.
[ЗАДАЧА]       Сделай {что именно}.
[ФОРМАТ]       Ответь в формате {формат}.
[ОГРАНИЧЕНИЯ]  Не делай {чего}. Длина — {сколько}.
[ПРИМЕРЫ]      Вот пример: {пример}.

Не обязательно использовать все 6 пунктов каждый раз. Но чем больше ты дашь — тем точнее результат.

Роль — кто ты, Claude?

# Без роли — общий ответ
"Как увеличить продажи?"

# С ролью — экспертный ответ с конкретикой
system = "Ты — директор по маркетингу с 15-летним опытом в digital."
"Как увеличить продажи?"

Примеры ролей:

"Ты — бизнес-аналитик. Отвечай цифрами и фактами."
"Ты — senior Python-разработчик. Пиши чистый код с комментариями."
"Ты — копирайтер для Instagram. Пишешь цепляющие короткие тексты."
"Ты — терпеливый учитель. Объясняешь сложное простым языком с аналогиями."

Формат — как должен выглядеть ответ

"Ответь в виде таблицы с колонками: Проблема | Причина | Решение"
"Дай 5 пунктов, каждый — одно предложение"
"Верни ответ в формате JSON: {name, email, company}"
"Напиши только код, без объяснений"

Ограничения — чего НЕ делать

Из гайда Anthropic: "Запреты так же важны, как и указания. Без них Claude может добавить лишнее."

"Объясни квантовые вычисления.
НЕ используй математические формулы.
НЕ упоминай конкретные квантовые компьютеры.
Объясняй только через аналогии из повседневной жизни."

Стратегия 2: Давай примеры (Few-shot Prompting)

Из гайда 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М+ в майнинг"
Результат:"""

Стратегия 3: Дай модели "время подумать" (Chain of Thought)

Из гайда OpenAI: "Если просить сразу ответ — модель чаще ошибается."

Из гайда Anthropic: "Когда модель рассуждает вслух, она делает меньше ошибок — как человек, который записывает решение задачи, а не считает в уме."

Без chain of thought:
"Сколько будет стоить запуск AI-бота на 1000 пользователей в месяц?"

С chain of thought:
"Рассчитай стоимость запуска AI-бота на 1000 пользователей в месяц.
Рассуждай пошагово:
1. Сколько сообщений в среднем отправляет один пользователь?
2. Сколько токенов на одно сообщение?
3. Какая цена за токен у Claude Sonnet?
4. Итоговая сумма."

Тег <thinking> — рекомендация Anthropic

Anthropic рекомендует использовать тег <thinking> чтобы отделить рассуждения от финального ответа:

content = """Проанализируй, стоит ли инвестировать в этот проект.

Сначала рассуждай в теге <thinking> — пошагово разбери все за и против.
Потом дай финальный ответ после тега <answer>.

<thinking>
[Здесь Claude рассуждает — ты видишь его логику]
</thinking>

<answer>
[Здесь итоговый ответ]
</answer>"""

Стратегия 4: Используй структуру и разделители

Из гайда Anthropic: "Claude отлично понимает XML-разметку. Это самый надёжный способ структурировать сложный промпт."

Из гайда OpenAI: "Используйте разделители (```, \"\"\", ---, XML-теги) чтобы отделить инструкцию от данных."

XML-теги — фишка Claude

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. Есть ли штрафные санкции?
Ответь простым языком, без юридического жаргона."""

Стратегия 5: Давай справочный текст (снижай галлюцинации)

Из гайда 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?"""

Это критично для продуктов, где точность важна — юридические документы, медицина, финансы.


Стратегия 6: Разбивай сложные задачи на подзадачи

Из гайда OpenAI: "Одна огромная задача = больше ошибок. Маленькие шаги = точнее результат."

Из гайда Anthropic: "Как в программировании: одна функция — одна задача."

Плохо — всё в одном промпте:
"Напиши бизнес-план, сделай лендинг, придумай название
и рассчитай юнит-экономику"

Хорошо — разбей на цепочку:
Запрос 1: "Придумай 10 названий для AI-бота анализа крипто-чатов"
Запрос 2: "Напиши структуру лендинга для [выбранное название]"
Запрос 3: "Рассчитай юнит-экономику при 1000 пользователей"

Классификация → Обработка

Из гайда OpenAI: "Сначала определите тип запроса, потом обработайте его по нужному сценарию."

system = """Ты обрабатываешь входящие заявки.

Шаг 1: Определи тип заявки:
- "покупка" — клиент хочет купить
- "продажа" — клиент хочет продать
- "вопрос" — клиент задаёт вопрос
- "мусор" — спам или нерелевантное

Шаг 2: Если покупка или продажа — извлеки данные в JSON.
Если вопрос — сформулируй ответ.
Если мусор — ответь "SKIP"."""

Дополнительные техники

Самопроверка

Из гайда Anthropic: "Попросите модель перепроверить свой ответ. Самопроверка снижает процент ошибок."

content = """Переведи этот текст на английский.

Текст: [текст]

После перевода перепроверь:
- Все ли предложения переведены?
- Нет ли грамматических ошибок?
- Сохранён ли смысл оригинала?
Если нашёл ошибки — исправь и покажи финальную версию."""

Prefill — начни ответ за Claude

Из гайда 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 — итеративный процесс:

  1. Напиши простой промпт
  2. Посмотри результат
  3. Добавь детали, примеры, ограничения
  4. Повтори, пока не получишь то, что нужно

Реальные примеры для твоих проектов

Для мониторинга чата майнеров

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>

Классифицируй новое сообщение по этим правилам."""

Для Instagram-контента

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>"""

Prompt Engineering в коде

Вот как выглядит хороший промпт в чате из урока 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}")

Типичные ошибки (из гайдов Anthropic и OpenAI)

Ошибка Как исправить
Слишком размытый промпт ("напиши что-нибудь про AI") Добавить контекст, формат, аудиторию, длину
Нет примеров Добавить 2-3 примера желаемого ответа (few-shot)
Всё в одном промпте Разбить на цепочку маленьких задач
Требовать точные факты без источника Приложить справочный текст
Нет ограничений Явно сказать, чего НЕ делать
Не указан формат ответа Описать формат: JSON, список, таблица
Не итерируешь Менять промпт, если ответ не устраивает — это нормально
Данные и инструкции смешаны Использовать разделители или XML-теги

Шпаргалка: все техники в одном месте

Техника Когда использовать Пример
Роль (system) Всегда "Ты — бизнес-аналитик"
Few-shot Когда нужен точный формат Показать 2-3 примера ответа
Chain of thought Сложные задачи, расчёты "Рассуждай пошагово"
XML-теги Сложные промпты с данными <instructions>, <document>
Разделители Отделить данные от инструкции --- или """
Справочный текст Нужны точные факты "Отвечай ТОЛЬКО на основе текста"
Самопроверка Критичные задачи "Перепроверь свой ответ"
Prefill Нужен строгий формат Начать ответ за Claude
Подзадачи Большая задача Разбить на 3-4 запроса

Практика

Задание 1: Улучши промпт

Возьми плохой промпт и сделай из него хороший по формуле (роль + контекст + задача + формат + ограничения + примеры):

Плохой: "Напиши код для бота"

Задание 2: Few-shot в коде

Добавь в свой чат (урок 2.3) system промпт с 2-3 примерами. Например, бот который классифицирует вопросы на "технический" / "бизнес" / "общий".

Задание 3: Chain of thought vs Прямой ответ

Задай Claude сложный вопрос двумя способами: 1. Просто вопрос 2. Тот же вопрос + "Рассуждай пошагово в теге <thinking>"

Сравни качество ответов.

Задание 4: XML-теги

Перепиши один из примеров ниже, используя XML-теги <instructions>, <context>, <format>:

"Проанализируй 3 конкурентов: Notion, Obsidian, Roam.
Для каждого укажи цену, аудиторию, главное преимущество.
Формат — таблица."

Задание 5: Свой промпт для проекта

Напиши system промпт для одного из своих проектов: - Анализатор чата майнеров (лиды в таблицу) - Генератор постов для Instagram - Бот-ментор для обучения AI


Задачки на закрепление

Задача 1: Что такое few-shot prompting?

Ответ Техника, при которой ты даёшь AI 2-3 примера желаемого ответа. AI видит паттерн и повторяет его для новых данных. По рекомендации Anthropic — это самый надёжный способ показать Claude, что ты хочешь.

Задача 2: Почему "Рассуждай пошагово" улучшает ответ?

Ответ Когда AI генерирует рассуждения шаг за шагом, каждый следующий шаг учитывает предыдущий. Это снижает вероятность ошибки — как человек, который записывает решение, а не считает в уме.

Задача 3: Зачем нужны XML-теги в промпте?

Ответ XML-теги (``, ``, ``) помогают Claude чётко разделить "что делать" от "с чем работать" от "в каком формате отвечать". Anthropic рекомендует их для сложных промптов с данными.

Задача 4: Клиент жалуется, что твой AI-бот иногда выдумывает факты. Какую технику использовать?

Ответ Справочный текст + ограничения. Дай боту текст-источник и скажи: "Отвечай ТОЛЬКО на основе предоставленного текста. Если ответа нет — скажи 'информация не найдена'. НЕ додумывай." Это рекомендация OpenAI для снижения галлюцинаций.

Главное


Источники


Глоссарий

Термин Что значит
Промпт Текст-инструкция, которую ты отправляешь модели, чтобы получить нужный ответ.
Системный промпт Специальная инструкция, которая задаёт роль и правила поведения модели на весь разговор.
Few-shot Техника, при которой ты показываешь модели 2-3 примера нужного результата, и она повторяет паттерн.
Zero-shot Техника, при которой ты даёшь задачу без примеров — модель должна справиться сама.
Chain of thought Техника, при которой ты просишь модель рассуждать пошагово, что улучшает качество сложных ответов.
Role prompting Приём, при котором ты назначаешь модели роль (эксперт, учитель, редактор), чтобы она отвечала в нужном стиле.
XML-теги Специальные метки вроде <instructions> и <document>, которые помогают структурировать сложные промпты.
Температура Параметр, управляющий случайностью ответов: низкая — точные и предсказуемые, высокая — творческие и разнообразные.
Контекст Вся информация, которую модель "видит" при генерации ответа — твои сообщения, системный промпт и история.
Инструкция Чёткое указание модели, что именно нужно сделать — главная часть любого промпта.
Ограничение (constraint) Правило, которое запрещает модели что-то делать — например, "не используй жаргон" или "отвечай только по тексту".
Формат вывода Указание, в каком виде модель должна дать ответ — список, таблица, JSON, короткий абзац и т.д.

Что дальше?

В следующем уроке — Tokens, контекст, стоимость. Ты узнаешь, сколько стоит каждый запрос к AI и как оптимизировать расходы при создании AI-продуктов.

← ПРЕДЫДУЩИЙ СЛЕДУЮЩИЙ →