Итеративная разработка и отладка запросов
Выстроите систематический процесс тестирования и улучшения запросов, выявляйте причины сбоев и используйте OpenAI Playground для быстрых итераций до написания рабочего кода.
«Итеративная разработка и отладка запросов» — бесплатный урок AI Engineering Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Engineering Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Engineering Academy содержит 4 уроков всего.
Создание промптов — эмпирическая дисциплина
Эффективная инженерия промптов не сводится к поиску магической формулы — это эмпирический итеративный процесс, больше похожий на отладку, чем на написание текста. Вы пишете промпт, запускаете его на тестовых входных данных, наблюдаете, где он даёт сбой, выдвигаете гипотезу о причине и изменяете промпт, чтобы исправить проблему. Одной интуиции недостаточно: вам нужны данные.
Многие разработчики совершают ошибку: проверяют промпт на одном-двух вручную подготовленных примерах, видят хорошие результаты и выпускают его в рабочую среду — а затем обнаруживают, что промпт не справляется с 30% реальных входных данных. Систематический процесс оценки предотвращает это, проверяя промпт на разнообразных и репрезентативных примерах до его запуска.
Сначала создайте набор проверок
До написания промпта создайте эталонный набор проверок: коллекцию из 20–100 репрезентативных примеров входных данных в паре с ожидаемым выводом или критериями успешного прохождения. Этот набор станет эталоном для оценки любых изменений промпта.
Хорошие наборы проверок включают типичные входные данные, нестандартные случаи (пустые строки, очень длинные входные данные, неоднозначные случаи), враждебные входные данные, предназначенные для нарушения работы промпта, и входные данные от разных сегментов вашей аудитории. Чем разнообразнее набор проверок, тем увереннее вы можете быть, что изменение промпта действительно улучшает его работу, а не подгоняет её под несколько примеров, которые вы держали в уме.
Простой инструмент оценки
Написание простого скрипта оценки занимает час, но экономит дни отладки проблем в рабочей среде. Скрипт запускает ваш промпт на каждом случае проверки, сравнивает вывод с ожидаемым результатом и сообщает долю успешно пройденных проверок. Затем вы можете дорабатывать промпт и сразу видеть, улучшили ли изменения общий результат.
import openai
client = openai.OpenAI()
# Golden test set: (input, expected_output)
test_cases = [
('The product is excellent and very fast.', 'Positive'),
('Arrived damaged and customer service ignored me.', 'Negative'),
('Delivery was on time.', 'Neutral'),
('Worst purchase of my life. Never again!', 'Negative'),
('Good value for the price.', 'Positive'),
]
def evaluate_prompt(system_prompt):
correct = 0
for text, expected in test_cases:
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': system_prompt},
{'role': 'user', 'content': text}
],
max_tokens=10
)
prediction = resp.choices[0].message.content.strip()
if expected.lower() in prediction.lower():
correct += 1
else:
print(f'FAIL: "{text}" -> got "{prediction}", expected "{expected}"')
return correct / len(test_cases)
score = evaluate_prompt('Classify sentiment as Positive, Negative, or Neutral. Reply with one word only.')
print(f'Score: {score:.0%}')Классификация типов сбоев
Когда промпт не проходит некоторые случаи проверки, сгруппируйте сбои по типам, чтобы выявить закономерности. Распространённые типы сбоев:
- Сбои формата: модель выдаёт правильный ответ, но в неправильном формате
- Сбои из-за неоднозначности: модель интерпретирует задачу не так, как вы задумали
- Сбои на нестандартных случаях: модель работает на типичных входных данных, но не справляется с необычными
- Сбои из-за галлюцинаций: модель уверенно выдаёт фактически неверные сведения
- Игнорирование инструкций: модель частично следует инструкциям, но упускает конкретные ограничения
Для каждого типа сбоя требуется своё исправление. Сбои формата требуют более явных инструкций по выводу, а сбои из-за неоднозначности — более чёткого определения задачи или примеров.
OpenAI Playground для быстрой итерации
OpenAI Playground (platform.openai.com/playground) — самый быстрый инструмент для доработки промптов без написания кода. Он позволяет переключаться между моделями, настраивать параметры с помощью ползунков, сохранять версии промптов и сравнивать вывод рядом.
Используйте Playground на этапе исследования при разработке промпта: пробуйте разные формулировки, интерактивно проверяйте нестандартные случаи и развивайте понимание того, что работает. Когда вы остановитесь на перспективном промпте, перенесите его в код и используйте инструмент оценки, чтобы систематически проверить его на всём наборе данных до выпуска.
Версионирование промптов
Промпты — это код. Их следует хранить под контролем версий, проверять и развёртывать с такой же строгостью, как код приложения. Самый простой подход — хранить шаблоны промптов в виде строк в файле констант репозитория, чтобы изменения отслеживались в Git и требовали проверки кода.
Более продвинутые подходы включают хранение промптов в специализированной базе данных для управления промптами (LangSmith, PromptLayer или простой таблице Supabase), добавление меток к версиям и проведение A/B-проверок разных версий промпта в рабочей среде. Это особенно важно, когда над одними и теми же промптами работают несколько участников команды или когда нужно откатить изменение промпта, ухудшившее качество в рабочей среде.
# prompts/sentiment.py
# Version 2.1 - Added explicit tie-breaking rule for mixed reviews
SENTIMENT_V2_1 = '''You are a sentiment classification assistant.
Classify the customer review sentiment as exactly one of: Positive, Negative, or Neutral.
Rules:
- Positive: overall satisfaction, praise, or recommendation
- Negative: disappointment, complaint, or warning to others
- Neutral: factual statements without strong sentiment, or equal positive and negative content
- If the review contains both positive and negative elements, choose based on the DOMINANT tone
Respond with ONLY the single word classification. No explanation.'''
# Usage:
# from prompts.sentiment import SENTIMENT_V2_1Систематическое сравнение вариантов промпта
Если у Вас есть две конкурирующие версии запроса, протестируйте обе на полном наборе тестов и сравните оценки. Даже повышение точности на 5% в рабочей системе, обрабатывающей тысячи запросов в день, стоит затраченных на оценивание усилий. Никогда не выбирайте запрос на основе одного-двух проверенных вручную примеров — всегда сравнивайте варианты на полном наборе тестов.
Для субъективных показателей качества, где нет единственного правильного ответа (например, для оценки тона, полезности или креативности), можно использовать оценивание LLM как судьёй: попросите мощную модель, например GPT-4o, оценить, какой из двух ответов лучше соответствует Вашим критериям качества. Это позволяет масштабировать оценивание за пределы возможностей человеческой проверки.
Отладка непоследовательных результатов
По умолчанию результаты LLM не являются детерминированными. Установка значения temperature=0 делает результаты почти детерминированными (наиболее вероятный токен на каждом шаге), что особенно важно для отладки: Вы можете дважды выполнить один и тот же запрос и получить одинаковый результат. При отладке всегда устанавливайте температуру равной 0, чтобы определить, вызвало ли изменение запроса изменение результата или это было всего лишь случайное отклонение.
После исправления запроса снова включите некоторую степень случайности в рабочей среде, если Вашему сценарию использования полезно разнообразие (творческое письмо, мозговой штурм). Однако для задач структурированного извлечения и классификации, где нужны стабильные и воспроизводимые результаты, оставляйте температуру равной 0.
import openai
client = openai.OpenAI()
# Deterministic mode for debugging
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'Classify sentiment: Positive, Negative, or Neutral.'},
{'role': 'user', 'content': 'The product looks nice but broke after two days.'}
],
temperature=0, # deterministic
seed=42 # optional reproducibility seed
)
print(response.choices[0].message.content)Отладка галлюцинаций
Если Ваш запрос приводит к выдуманным фактам, добавьте ограничения, которые усложняют появление галлюцинаций. К эффективным методам борьбы с галлюцинациями относятся:
- Указывайте источники: «Отвечайте только на основе предоставленного контекста. Если ответа нет в контексте, скажите: „Я не знаю“».
- Оценивайте степень уверенности: «Оцените свою уверенность по шкале от 1 до 5. Если оценка ниже 3, не отвечайте».
- Добавляйте этап проверки: «Перед ответом убедитесь, что каждый планируемый к использованию факт присутствует в предоставленном документе».
Ни один метод не устраняет галлюцинации полностью, но сочетание поиска (RAG) со строгими ограничениями запроса значительно сокращает их количество в приложениях, интенсивно использующих знания.
Длина запроса и расположение инструкций
Исследования показали, что LLM уделяют больше внимания инструкциям в начале и конце запроса, чем его середине. Эта проблема называется «потеря в середине». Если у Вас длинный запрос с важными инструкциями, скрытыми в середине и окружёнными контекстом, модель может выполнять их ненадёжно.
Рекомендуемый подход: размещайте самые важные инструкции (определение задачи и критические ограничения) в самом начале системного запроса, а ключевые ограничения повторяйте в конце. Для длинных документов, добавляемых в качестве контекста, размещайте вопрос пользователя после документа, а не перед ним, поскольку модель сильнее учитывает содержимое, расположенное ближе к концу.
От исследования к рабочей среде
Жизненный цикл разработки запроса состоит из трёх этапов:
- Исследование: свободно экспериментируйте в Playground. Сосредоточьтесь на понимании того, что работает с концептуальной точки зрения, а не на получении идеального результата.
- Оценивание: создайте набор тестов и средство для проведения оценивания. Запускайте варианты запросов на полном наборе тестов и измеряйте долю успешных результатов. Повторяйте процесс, пока не достигнете заданного порога качества.
- Рабочая среда: добавьте финальный запрос в систему контроля версий, настройте мониторинг показателей качества в рабочей среде и оповещения об ухудшении качества. Планируйте будущие итерации при изменении версий модели.
Пропуск этапа оценивания — самая распространённая причина ухудшения качества запросов в рабочей среде. Время, вложенное в создание качественного набора тестов, многократно окупается.
Быстрая проверка
Проверьте, насколько хорошо Вы поняли концепции инженерии ИИ из этого урока.
Итоги урока
В этом уроке Вы узнали, что для надёжного измерения улучшений в разработке запросов необходимы эталонный набор тестов и средство для проведения оценивания, режимы отказа следует классифицировать, чтобы находить правильное исправление для каждого типа, а температура 0 необходима для отладки, тогда как управление версиями запросов и мониторинг в рабочей среде замыкают цикл обеспечения качества. Далее мы рассмотрим, как LLM обрабатывают текст с помощью токенов и почему количество токенов важно для стоимости и контекста.
Изучай Python с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Итеративная разработка и отладка запросов» бесплатный?
Да — полный текст урока «Итеративная разработка и отладка запросов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Engineering Academy, подпишись на CoddyKit PRO. Курс AI Engineering Academy содержит 4 уроков всего.
Чему я научусь в уроке «Итеративная разработка и отладка запросов»?
Выстроите систематический процесс тестирования и улучшения запросов, выявляйте причины сбоев и используйте OpenAI Playground для быстрых итераций до написания рабочего кода. Ты практикуешь AI Engineering Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Engineering Academy?
Предыдущий опыт не требуется. AI Engineering Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Итеративная разработка и отладка запросов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Engineering Academy?
Да. Каждый урок AI Engineering Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Подходы с нулевым и несколькими примерами
- Цепочка рассуждений и пошаговое мышление
- Системные запросы и определение персоны
- Итеративная разработка и отладка запросов